Top Related Projects
rice 🍚 custom linux config files. as seen on r/unixporn #noricenolife neovim cultist. dotfiles are perpetual wip
Quick Overview
Dotdrop is a tool that allows you to manage your dotfiles (configuration files) across multiple machines. It provides a way to store your dotfiles in a Git repository and easily deploy them to different systems, while also supporting different configurations for different environments.
Pros
- Cross-platform Compatibility: Dotdrop works on various operating systems, including Linux, macOS, and Windows, making it a versatile tool for managing dotfiles.
- Flexible Configuration: Dotdrop supports multiple configuration profiles, allowing you to have different setups for different machines or environments.
- Version Control Integration: Dotdrop integrates well with Git, making it easy to track changes and manage your dotfiles in a version control system.
- Templating Support: Dotdrop allows you to use templates for your dotfiles, enabling you to customize them based on the target environment.
Cons
- Learning Curve: Dotdrop has a slightly steeper learning curve compared to some other dotfile management tools, especially for users who are new to the concept.
- Limited Ecosystem: Dotdrop doesn't have as large of an ecosystem as some other dotfile management tools, which may limit the availability of pre-made configurations or plugins.
- Dependency on YAML: Dotdrop uses YAML for its configuration files, which some users may find less intuitive than other formats.
- Potential Conflicts with Other Tools: Dotdrop may not always play nicely with other dotfile management tools or scripts that you might be using on your system.
Getting Started
To get started with Dotdrop, follow these steps:
-
Install Dotdrop:
pip install dotdrop
-
Initialize a new Dotdrop repository:
dotdrop import ~/.bashrc
This will create a new Dotdrop repository in the current directory and add your
.bashrc
file to it. -
Customize your configuration: Open the
config.yaml
file in the Dotdrop repository and modify the settings to match your needs. You can add more dotfiles, create different profiles, and configure the deployment process. -
Deploy your dotfiles:
dotdrop deploy
This will deploy your dotfiles to the appropriate locations on your system.
-
Update your dotfiles: Whenever you make changes to your dotfiles, you can update the Dotdrop repository and redeploy the changes:
dotdrop import ~/.bashrc dotdrop deploy
That's the basic workflow for using Dotdrop. For more advanced usage, such as using templates or managing multiple profiles, refer to the Dotdrop documentation.
Competitor Comparisons
rice 🍚 custom linux config files. as seen on r/unixporn #noricenolife neovim cultist. dotfiles are perpetual wip
Pros of xero/dotfiles
- Provides a comprehensive set of dotfiles for various applications and tools, including Vim, Zsh, Git, and more.
- Includes a well-documented installation process, making it easy to set up a new environment.
- Offers a modular structure, allowing users to selectively install only the dotfiles they need.
Cons of xero/dotfiles
- The repository may not be as actively maintained as deadc0de6/dotdrop, with fewer recent commits and updates.
- The configuration management approach may not be as flexible as deadc0de6/dotdrop, which offers more customization options.
Code Comparison
deadc0de6/dotdrop:
def _get_dotfile(self, dotfile_key):
"""Return the dotfile object for the given key"""
if dotfile_key not in self.dotfiles:
raise KeyError('dotfile "{}" not found'.format(dotfile_key))
return self.dotfiles[dotfile_key]
xero/dotfiles:
function install_dotfiles() {
echo "Installing dotfiles..."
local overwrite_all=false backup_all=false skip_all=false
for src in $(find -H "$DOTFILES_DIR" -maxdepth 2 -name '*.symlink' -not -path '*.git*')
do
dst="$HOME/.$(basename "${src%.*}")"
link_file "$src" "$dst"
done
}
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
dotdrop
Save your dotfiles once, deploy them everywhere
Dotdrop makes the management of dotfiles between different hosts easy. It allows you to store your dotfiles in 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 using different predefined profiles. Or you may have a main set of dotfiles for your everyday host and a subset 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 in Git for different usages
- Allow dotfile templating
- Dynamically generated dotfile contents with pre-defined variables
- Comparison between deployed and stored dotfiles
- Handling multiple profiles with different sets of dotfiles
- Easily import and update dotfiles
- Handle files and directories
- Support symlinking 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 the example, the documentation or how people are using dotdrop for more.
Quick start:
## using dotdrop as a submodule
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
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 for a specific profile.
See the example for a concrete example of why dotdrop rocks.
Table of Contents
Installation
See the installation instructions.
Dotdrop is available on:
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 explicitly using the switch -p
/--profile
.
Import dotfiles on host home:
$ dotdrop import ~/.vimrc ~/.xinitrc ~/.config/polybar
Dotdrop does two things:
- Copy the dotfiles to the dotpath directory
(defined in
config.yaml
, defaults to dotfiles) - Create the associated entries in the
config.yaml
file (in thedotfiles
andprofiles
entries)
Your config file will look like 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 set up 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 liking 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 (assuming 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 in Polybar for each host.
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"
â¦
You also want to have the correct interface set on the wireless network in the Polybar config.
Add a variable
to the config file (In the below example, home gets the default wlan0
value for
the variable wifi
while office gets wlp2s0
):
â¦
variables:
wifi: "wlan0"
â¦
profiles:
home:
dotfiles:
- f_vimrc
- f_xinitrc
- d_polybar
office:
dotfiles:
- f_xinitrc
- d_polybar
variables:
wifi: "wlp2s0"
Then you can adapt the Polybar config file so that the
variable wifi
gets correctly replaced during installation:
[module/wireless-network]
type = internal/network
interface = {{@@ wifi @@}}
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 @@%}
Finally you want everything installed with the office profile to be logged; you thus add an action to the config file:
â¦
actions:
loginstall: "echo {{@@ _dotfile_abs_src @@}} installed to {{@@ _dotfile_abs_dst @@}} >> {0}"
â¦
profiles:
home:
dotfiles:
- f_vimrc
- f_xinitrc
- d_polybar
office:
dotfiles:
- f_xinitrc
- d_polybar
variables:
wifi: "wlp2s0"
actions:
- loginstall "/tmp/dotdrop-installation.log"
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 you could run install with --dry
.
That's it, a single repository with all your dotfiles for your different hosts.
For more, see the docs:
Documentation
Dotdrop's documentation is hosted on Read the Docs.
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.
Top Related Projects
rice 🍚 custom linux config files. as seen on r/unixporn #noricenolife neovim cultist. dotfiles are perpetual wip
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot