All Projects → deadc0de6 → Dotdrop

deadc0de6 / Dotdrop

Licence: gpl-3.0
Save your dotfiles once, deploy them everywhere

Programming Languages

shell
77523 projects
python3
1442 projects

Projects that are alternatives of or similar to Dotdrop

Pilgo
Configuration-based dotfiles manager
Stars: ✭ 78 (-90.41%)
Mutual labels:  command-line, dotfiles
Askama
Type-safe, compiled Jinja-like templates for Rust
Stars: ✭ 1,255 (+54.37%)
Mutual labels:  templating, jinja2
gpp
General PreProcessor
Stars: ✭ 25 (-96.92%)
Mutual labels:  jinja2, templating
Yadm
Yet Another Dotfiles Manager
Stars: ✭ 2,982 (+266.79%)
Mutual labels:  dotfiles, jinja2
Proji
A powerful cross-platform CLI project templating tool.
Stars: ✭ 156 (-80.81%)
Mutual labels:  command-line, templating
Statik
Multi-purpose static web site generator aimed at developers.
Stars: ✭ 249 (-69.37%)
Mutual labels:  command-line, jinja2
Prinder
Free Pull Request reminder for Github. Has configurations to post reminders to Slack and email along with jinja templating
Stars: ✭ 21 (-97.42%)
Mutual labels:  jinja2, templating
Dotfiles
🐲 My Arch Linux config [i3-gaps + i3blocks + Zsh + Spacemacs + Rofi + Alacritty + Neofetch]
Stars: ✭ 725 (-10.82%)
Mutual labels:  dotfiles
Argh
Argh! A minimalist argument handler.
Stars: ✭ 752 (-7.5%)
Mutual labels:  command-line
Portray
Your Project with Great Documentation.
Stars: ✭ 726 (-10.7%)
Mutual labels:  command-line
Terjira
Terjira is a very interactive and easy to use CLI tool for Jira.
Stars: ✭ 713 (-12.3%)
Mutual labels:  command-line
Learn gnuawk
Example based guide to mastering GNU awk
Stars: ✭ 727 (-10.58%)
Mutual labels:  command-line
Dotfiles
@holman does dotfiles
Stars: ✭ 6,397 (+686.84%)
Mutual labels:  dotfiles
Mow.cli
A versatile library for building CLI applications in Go
Stars: ✭ 725 (-10.82%)
Mutual labels:  command-line
Hug
Embrace the APIs of the future. Hug aims to make developing APIs as simple as possible, but no simpler.
Stars: ✭ 6,572 (+708.36%)
Mutual labels:  command-line
Hexyl
A command-line hex viewer
Stars: ✭ 6,349 (+680.93%)
Mutual labels:  command-line
Ntl
Node Task List: Interactive cli to list and run package.json scripts
Stars: ✭ 800 (-1.6%)
Mutual labels:  command-line
Ipt
Interactive Pipe To: The Node.js cli interactive workflow
Stars: ✭ 783 (-3.69%)
Mutual labels:  command-line
Sade
Smooth (CLI) Operator 🎶
Stars: ✭ 746 (-8.24%)
Mutual labels:  command-line
Imgp
📸 High-performance cli batch image resizer and rotator
Stars: ✭ 744 (-8.49%)
Mutual labels:  command-line

DOTDROP

Tests Status Doc Status License: GPL v3 Coverage Status Language grade: Python

PyPI version AUR Python

Donate

Save your dotfiles once, deploy them everywhere

Dotdrop makes the management of dotfiles between different hosts easy. It allows to store your dotfiles on git and automagically deploy different versions of the same file on different setups.

It also allows to manage different sets of dotfiles. For example you can have a set of dotfiles for your home laptop and a different set for your office desktop. Those sets may overlap and different versions of the same dotfiles can be deployed on different predefined profiles. Or you may have a main set of dotfiles for your everyday's host and a sub-set you only need to deploy to temporary hosts (cloud VM, etc) that may be using a slightly different version of some of the dotfiles.

Features:

  • Sync once every dotfile on git for different usages
  • Allow dotfiles templating by leveraging jinja2
  • Dynamically generated dotfile contents with pre-defined variables
  • Comparison between deployed and stored dotfiles
  • Handling multiple profiles with different sets of dotfiles
  • Easy import and update dotfiles
  • Handle files and directories
  • Support symlink of dotfiles
  • Associate actions to the deployment of specific dotfiles
  • Associate transformations for storing encrypted/compressed dotfiles
  • Provide solutions for handling dotfiles containing sensitive information

Check also the blog post, the example, the documentation or how people are using dotdrop for more.

Quick start:

mkdir dotfiles && cd dotfiles
git init
git submodule add https://github.com/deadc0de6/dotdrop.git
pip3 install -r dotdrop/requirements.txt --user
./dotdrop/bootstrap.sh
./dotdrop.sh --help

A mirror of this repository is available on gitlab under https://gitlab.com/deadc0de6/dotdrop.

Why dotdrop ?

There exist many tools to manage dotfiles however not many allow to deploy different versions of the same dotfile on different hosts. Moreover dotdrop allows to specify the set of dotfiles that need to be deployed on a specific profile.

See the example for a concrete example on why dotdrop rocks.


Table of Contents

Installation

There are multiple ways to install and use dotdrop. It is recommended to install dotdrop as a submodule to your dotfiles git tree. Having dotdrop as a submodule guarantees that anywhere you are cloning your dotfiles git tree from you'll have dotdrop shipped with it.

Below instructions show how to install dotdrop as a submodule. For alternative installation instructions (with virtualenv, pypi, aur, snap, etc) see the installation documentation.

Dotdrop is also available on

As a submodule

The following will create a git repository for your dotfiles and keep dotdrop as a submodule:

## create the repository
$ mkdir dotfiles; cd dotfiles
$ git init

## install dotdrop as a submodule
$ git submodule add https://github.com/deadc0de6/dotdrop.git
$ pip3 install -r dotdrop/requirements.txt --user
$ ./dotdrop/bootstrap.sh

## use dotdrop
$ ./dotdrop.sh --help

For MacOS users, make sure to install realpath through homebrew (part of coreutils).

Using dotdrop as a submodule will need you to work with dotdrop by using the generated script dotdrop.sh at the root of your dotfiles repository. Note that this script updates the submodule automatically, unless called with the environment variable DOTDROP_AUTOUPDATE set to no.

To ease the use of dotdrop, it is recommended to add an alias to it in your shell (~/.bashrc, ~/.zshrc, etc) with the config file path, for example

alias dotdrop='<absolute-path-to-dotdrop.sh> --cfg=<path-to-your-config.yaml>'

Completion scripts exist for bash, zsh and fish, see the related doc.

Getting started

Create a new repository to store your dotfiles with dotdrop. Init or clone that new repository and install dotdrop.

Then import any dotfiles (files or directories) you want to manage with dotdrop. You can either use the default profile (which resolves to the hostname of the host you are running dotdrop on) or provide it specifically using the switch -p --profile.

Import dotfiles on host home

$ dotdrop import ~/.vimrc ~/.xinitrc ~/.config/polybar

Dotdrop does two things:

  • Copy the dotfiles in the dotpath directory (defined in config.yaml, defaults to dotfiles)
  • Create the associated entries in the config.yaml file (in the dotfiles and profiles entries)

Your config file will look something similar to this

config:
  backup: true
  banner: true
  create: true
  dotpath: dotfiles
  ignoreempty: false
  keepdot: false
  longkey: false
  showdiff: false
  workdir: ~/.config/dotdrop
dotfiles:
  d_polybar:
    dst: ~/.config/polybar
    src: config/polybar
  f_vimrc:
    dst: ~/.vimrc
    src: vimrc
  f_xinitrc:
    dst: ~/.xinitrc
    src: xinitrc
profiles:
  home:
    dotfiles:
    - f_vimrc
    - f_xinitrc
    - d_polybar

For a description of the different fields and their use, see the config doc.

Commit and push your changes with git.

Then go to another host where your dotfiles need to be managed as well, clone the previously setup repository and compare the local dotfiles with the ones stored in dotdrop:

$ dotdrop compare --profile=home

Now you might want to adapt the config.yaml file to your likings on that second host. Let's say for example that you only want d_polybar and f_xinitrc to be deployed on that second host. You would then change your config to something like this (considering that the second host's hostname is office):


profiles:
  home:
    dotfiles:
    - f_vimrc
    - f_xinitrc
    - d_polybar
  office:
    dotfiles:
    - f_xinitrc
    - d_polybar

Then adapt any dotfile using the templating feature (if needed). For example you might want different fonts sizes on polybar for the different hosts:

edit <dotpath>/config/polybar/config

{%@@ if profile == "home" @@%}
font0 = sans:size=10;0
{%@@ elif profile == "office" @@%}
font0 = sans:size=14;0
{%@@ endif @@%}
font1 = "Material Design Icons:style=Regular:size=14;0"
font2 = "unifont:size=6;0"

Also the home computer is running awesomeWM and the office computer bspwm. The ~/.xinitrc file will therefore be different while still sharing some lines.

edit <dotpath>/xinitrc

#!/bin/bash

# load Xresources
userresources=$HOME/.Xresources
if [ -f "$userresources" ]; then
      xrdb -merge "$userresources" &
fi

# launch the wm
{%@@ if profile == "home" @@%}
exec awesome
{%@@ elif profile == "office" @@%}
exec bspwm
{%@@ endif @@%}

The if branch on above template examples will define which part is deployed based on the hostname of the host on which dotdrop is run from (or the selected profile).

When done, you can install your dotfiles using

$ dotdrop install

If you are unsure, you can always run dotdrop compare to see how your local dotfiles would be updated by dotdrop before running install or run install with --dry.

That's it, a single repository with all your dotfiles for your different hosts.

You can then

For more options see dotdrop --help and the documentation.

Documentation

Dotdrop's documentation is hosted on readthedocs.

Thank you

If you like dotdrop, buy me a coffee.

Contribution

If you are having trouble installing or using dotdrop, open an issue.

If you want to contribute, feel free to do a PR (please follow PEP8). Have a look at the contribution guidelines

License

This project is licensed under the terms of the GPLv3 license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].