Giter VIP home page Giter VIP logo

bashdot's Introduction

CircleCI

Summary

I am bashdot, a minimalist dotfile management framework with support for multiple profiles and templates.

I am a single script, written entirely in bash, which requires no additional dependencies.

The authors of bashdot focus on transparency in the code, providing clear log output and heavily testing the script using bats.

Overview

Bashdot works by symlinking files and directions, in a given profile, into the users home directory.

One or more profiles can be installed on a specific instance to provide the desired dotfiles for it's purpose (work, home, etc.), operating system (Linux, MacOS, Solaris, etc.) and version (Debian, RedHat, etc.).

Bashdot supports templates for replacing values in files during installation.

Install

MacOS Homebrew

brew tap bashdot/tap
brew install bashdot

Manual Installation

curl -s https://raw.githubusercontent.com/bashdot/bashdot/master/bashdot > bashdot
sudo mv bashdot /usr/local/bin
sudo chmod a+x /usr/local/bin/bashdot

Quick Start

  1. Create your initial profile directory, in this example, default.

    mkdir default
  2. Add any files you would like symlinked into your home directory when this profile is installed:

    echo 'set -o vi' > default/env
  3. Install the profile.

    bashdot install default

    Note, when you run install, bashdot prepends a dot, in front of the filename, to the linked file.

    In the above, default/env will now be linked to ~/.env.

  4. Continue adding your dotfiles to the default profile.

    mv ~/.bashrc default/bashrc
  5. You can safely re-run bashdot install default to link newly added files. Store this directory in a cloud drive or source control. Repeat for additional profiles.

Templates

If you have values which need to be set in a file when bashdot is run, you can create a template.

  1. Append .template to any files which should be rendered.

  2. When installed, template files will have all variables replaced with the current environment variables set when bashdot is run.

  3. The rendered files will be created in the same directory, and have .template replaced with .rendered.

  4. For example:

    If you have the file default/env.template with the below contents:

    export SECRET_KEY=$ENV_SECRET_KEY

    You can run the following to set the value ENV_SECRET_KEY when installing the home profile:

    env ENV_SECRET_KEY=test1234 bashdot install default

    This will result in the rendered file default/env.rendered being created and symlinkd to ~/.env with the below contents..

    export SECRET_KEY=test1234
  5. Rendered files will be removed when you uninstall their respective bashdot profile.

  6. Be sure to include **/*.rendered in .gitignore if you will be checking your dotfiles into a Git repo.

Managing Multiple Profiles

Bashdot works by symlinking files within the given profile directory into your home directory.

For example, if you run:

bashdot install default work

Bashdot will symlink all the files in default and work into your home directory.

Profiles installed on the same system must not contain overlapping files.

Frequently Asked Questions

Q: How do I set secrets or private information in my dotfiles?

A: Never store secrets in your dotfiles. To remove sensitive information, create a bashdot template and replace sensitive information with variables. This will prompt for the sensitive information to be provided when you run bashdot install.

Q: How do I manage directories with bashdot, when only some of the contents, of that directory, should be in source control? For example .config or .ssh?

A: Bashdot does not provide any functionality past symlinking into the top level of home directory. To manage the contents of any directories symlinked by bashdot, we recommend you add the directory and then ignore the appropriate files from your source control (For example with .gitignore).

Q: How can I share my bashdot profiles?

A: Bashdot only manages dotfiles installation, not their distribution. To share your bashdot profile, make it available via source control, shared file system or cloud drive.

Q: Does bashdot work with zsh, fish or other shells?

A: Yes. Bashdot works by using standard unix commands and symlinks. It should work with any shell on a system that has bash installed.

Q: If bashdot supports other shells, why is it called bashdot?

A: It is a 100% self contained bash script with no dependencies.

Bashdot Development

Test

Only requirement to run tests is docker. Once installed run:

make test

Shell

To shell into a container to test bashdot without affecting your local environment run:

make shell

Debug

To increase logging, set the BASHDOT_LOG_LEVEL environment variable to debug.

export BASHDOT_LOG_LEVEL=debug

bashdot's People

Contributors

jaki avatar jwater7 avatar pawamoy avatar weavenet avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.