2
0
mirror of https://github.com/kazhala/dotbare synced 2024-11-02 09:40:27 +00:00
Go to file
2020-05-17 15:54:03 +10:00
.github/workflows update workflow name 2020-05-17 11:54:07 +10:00
helper improve test and codebuild test bats 2020-05-13 21:04:02 +10:00
scripts refactor fadd 2020-05-15 18:50:26 +10:00
tests refactor fstash and fix pipeline 2020-05-15 18:19:22 +10:00
.travis.yml docker build arg 2020-05-13 21:32:25 +10:00
buildspec.yml fix docker login 2020-05-15 12:35:53 +10:00
Dockerfile use bash iamge 2020-05-11 12:42:19 +10:00
dotbare update mydir handling 2020-05-13 17:30:54 +10:00
LICENSE Create LICENSE 2020-05-11 08:54:08 +10:00
README.md add screenshot 2020-05-17 15:54:03 +10:00
shellcheck.sh update shebang 2020-05-11 12:42:19 +10:00

dotbare

Build Status CI Status AWSCodeBuild License

Introduction

dotbare is a command line utility to help you manage your dotfiles. It wraps around git bare repository and heavily utilise fzf for better user expereince. It is inspired by forgit, a git wrapper that utilise fzf for interactive expereince. dotbare uses a different implementation approach and focuses on managing and interacting with your dotfiles.

Core characteristics:

  • No symlink
  • Easy setup/remove
  • Customization
  • Minimal dependency
  • 1 step migration
  • Zero learning curve
  • Manage dotfiles in any directory

You could find out how git bare repository could be used for managing dotfiles here.

Demo

Why

It has always been a struggle for me to get started with managing dotfiles using version control, as some other tools like "gnu stow" really scares me off with all the symlinks, until I found out about using git bare repository for managing dotfiles, zero symlinks, minimal setup required and you keep your dotfiles at the location they should be.

However, it has always lack some interactive expereince as it does not provide any auto completion on git commands nor file paths by default. It is also a pain when migrating the setup over to another system as you will have to manully resolve all the git checkout issues.

dotbare solves the above problems by providing a series of scripts starts with a prefix f (e.g. dotbare fadd, dotbare flog etc) that will enable a interactive expereince by processing all the git information from your bare repository and display it through fzf. dotbare also comes with the ability to migrate easily to other systems with one single command without having user to do any extra work.

Getting started

Install

  1. Clone the repository

    Note: change ~/.dotbare to the location of your preference

git clone https://github.com/kazhala/dotbare.git ~/.dotbare
  1. Add dotbare to your PATH (below is only an example, put PATH into your appropriate shellrc file)

    Note: change the $HOME/.dotbare to your install location

echo "PATH=$PATH:$HOME/.dotbare" >> "$HOME"/.bashrc

Dependencies

  • Required dependency
    • fzf
    • bash(You don't need to run bash, but dotbare does require you have bash in your system)
  • Optional dependency
    • fd (Faster local file search, if you have fd, dotbare bare will use fd instead of find when finding local files)
    • tree (Will provide a directory tree view when finding directory)
      # if you are on macos
      brew install tree
      

Setup

Treat dotbare as normal git commands

For interactive commands, check out usage

  1. init git bare repository
dotbare finit
  1. add dotfiles you want to track
dotbare fadd -f
# or
dotbare add [FIELNAME]

# add entire repository like .config
dotbare fadd -d
# or
dotbare add [DIRECTORY]
  1. commit changes and push to remote
dotbare commit -m "First commit"
dotbare remote add origin [URL]
dotbare push -u origin master

Migration

Migrating from normal git bare repository

  1. follow the steps in install to install dotbare
  2. check your current alias of git bare reference
# Below is an example alias, check yours for reference
alias config=/usr/bin/git --git-dir=$HOME/.cfg --work-tree=$HOME
  1. set env variable for dotbare
export DOTBARE_DIR="$HOME/.cfg"
export DOTBARE_TREE="$HOME"
  1. optionally you could alias config to dotbare so you keep your muscle memory
alias config=dotbare

Migrating dotbare to a new system

  1. follow the steps in install to install dotbare
  2. set env variable to let dotbare know where to init dotbare, backup etc.

    Copy below to your cmd line and set them temporarily

export DOTBARE_DIR="$HOME/.cfg"
export DOTBARE_TREE="$HOME"
  1. give dotbare your remote URL and let it handle the rest
dotbare finit -u https://github.com/kazhala/dotfiles.git

Migrating from gnu stow

I haven't used gnu stow but I would advise to stay with gnu stow if you are happy with it. If you want to give dotbare a try, as long as your remote repository resembles the structure of your home folder (reference what I mean in my repo)

dotbare finit -u [URL]

Usage

dotbare doesn't have a man page yet, will come later, for help, type dotbare [COMMANDS] -h

Checkout all available scripts and their help manual

# run dotbare without any arguments
dotbare
# or checkout help for dotbare
dotbare -h
dotbare help
# for normal git help
dotbare --help

dotbare fadd

interactivly stage and view changes for modified files

Background

dotbare was initially part of my personal scripts, however as the number of scripts grows, I feel like is more appropriate to make a dedicated project for it. I've just started scripting for a few months, so there must be a lot of improvements that could be made, please help me out by firing up issues and any PR is welcome.