Add bootstrap info to website
This commit is contained in:
parent
e4ef8c37b5
commit
a42f75123c
9 changed files with 198 additions and 0 deletions
|
@ -28,6 +28,8 @@ docs:
|
||||||
url: /docs/common_commands
|
url: /docs/common_commands
|
||||||
- title: Advanced Features
|
- title: Advanced Features
|
||||||
children:
|
children:
|
||||||
|
- title: "Bootstrap"
|
||||||
|
url: /docs/bootstrap
|
||||||
- title: "Alternate Files"
|
- title: "Alternate Files"
|
||||||
url: /docs/alternates
|
url: /docs/alternates
|
||||||
- title: "Encryption"
|
- title: "Encryption"
|
||||||
|
|
|
@ -53,6 +53,10 @@ about [encryption](encryption) for more details.
|
||||||
only list the files (without decrypting them). Read about
|
only list the files (without decrypting them). Read about
|
||||||
[encryption](encryption) for more details.
|
[encryption](encryption) for more details.
|
||||||
|
|
||||||
|
<i class="fa fa-fw fa-asterisk" aria-hidden="true"></i> `yadm clone --bootstrap <URL>`
|
||||||
|
: Clone the repository from `<URL>`, and automatically run bootstrap if
|
||||||
|
successful. Read about [bootstrap](bootstrap) for more details.
|
||||||
|
|
||||||
<i class="fa fa-fw fa-git-square" aria-hidden="true"></i> `yadm remote -v`
|
<i class="fa fa-fw fa-git-square" aria-hidden="true"></i> `yadm remote -v`
|
||||||
: Display detailed information about all configured remote repositories.
|
: Display detailed information about all configured remote repositories.
|
||||||
|
|
||||||
|
|
168
_docs/037_bootstrap.md
Normal file
168
_docs/037_bootstrap.md
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
---
|
||||||
|
title: "Bootstrap"
|
||||||
|
permalink: /docs/bootstrap
|
||||||
|
---
|
||||||
|
|
||||||
|
Often there is more to set up once your dotfiles repository has been cloned. For
|
||||||
|
example, if your repository has submodules, you may wish to initialize them. On
|
||||||
|
MacOS, you may wish to install **Homebrew** and process a `.Brewfile`. These types
|
||||||
|
of additional steps are generally referred to as "bootstrapping".
|
||||||
|
|
||||||
|
Though everyone may have a different set of bootstrap operations they need to
|
||||||
|
perform, **yadm** has a standard command for executing them.
|
||||||
|
|
||||||
|
yadm bootstrap
|
||||||
|
|
||||||
|
This command will execute the program named `$HOME/.yadm/bootstrap`. You must
|
||||||
|
provide this program yourself, and it must be made executable. But those are the
|
||||||
|
only constraints.
|
||||||
|
|
||||||
|
After **yadm** successfully clones a repository, if there is a bootstrap program
|
||||||
|
available, it will offer to run it for you.
|
||||||
|
|
||||||
|
Found .yadm/bootstrap
|
||||||
|
It appears that a bootstrap program exists.
|
||||||
|
Would you like to execute it now? (y/n)
|
||||||
|
|
||||||
|
You can prevent this prompting by using the `--bootstrap` or `--no-bootstrap`
|
||||||
|
options when cloning.
|
||||||
|
|
||||||
|
It is best to make the logic of your bootstrap idempotent—allowing it to be
|
||||||
|
re-run in the future when you merge changes made on other hosts.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Curious about the possibilities? See some examples below. These are all written
|
||||||
|
in Bash, but you can use any executable file as a bootstrap.
|
||||||
|
|
||||||
|
### Initialize submodules
|
||||||
|
|
||||||
|
If you've added repositories as submodules for the **yadm** repository, you can
|
||||||
|
initialize them after a successful clone.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Init submodules"
|
||||||
|
yadm submodule update --recursive --init
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install [Homebrew](http://brew.sh/) and a bundle of recipes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
system_type=$(uname -s)
|
||||||
|
|
||||||
|
if [ "$system_type" = "Darwin" ]; then
|
||||||
|
|
||||||
|
# install homebrew if it's missing
|
||||||
|
if ! command -v brew >/dev/null 2>&1; then
|
||||||
|
echo "Installing homebrew"
|
||||||
|
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$HOME/.Brewfile" ]; then
|
||||||
|
echo "Updating homebrew bundle"
|
||||||
|
brew bundle --global
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configure [iTerm2](http://www.iterm2.com/) to use your configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
system_type=$(uname -s)
|
||||||
|
|
||||||
|
if [ "$system_type" = "Darwin" ]; then
|
||||||
|
|
||||||
|
# possibly add something here to ensure iTerm2 is installed using Homebrew
|
||||||
|
# cask like in the previous example
|
||||||
|
|
||||||
|
if [ -d "$HOME/.iterm2" ]; then
|
||||||
|
echo "Setting iTerm preference folder"
|
||||||
|
defaults write com.googlecode.iterm2 PrefsCustomFolder "$HOME/.iterm2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compile a custom terminfo file
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ -f "$HOME/.terminfo/custom.terminfo" ]; then
|
||||||
|
echo "Updating terminfo"
|
||||||
|
tic "$HOME/.terminfo/custom.terminfo"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update the **yadm** repo origin URL
|
||||||
|
|
||||||
|
You might initially clone your repo using `https`, but ssh configurations may be
|
||||||
|
available after cloning. If so, you could update the **yadm** repo origin to use
|
||||||
|
`ssh` instead.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Updating the yadm repo origin URL"
|
||||||
|
yadm remote set-url origin "git@github.com:MyUser/dotfiles.git"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install [vim](http://www.vim.org/) plugins managed with [vim-plug](https://github.com/junegunn/vim-plug)
|
||||||
|
|
||||||
|
**vim-plug** can be used in your `.vimrc` to enable plugins. The example here will
|
||||||
|
automatically download **vim-plug** and run the `:PlugInstall` command if
|
||||||
|
**vim-plug** is missing when **vim** starts.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" download vim-plug if missing
|
||||||
|
if empty(glob("~/.vim/autoload/plug.vim"))
|
||||||
|
silent! execute '!curl --create-dirs -fsSLo ~/.vim/autoload/plug.vim https://raw.github.com/junegunn/vim-plug/master/plug.vim'
|
||||||
|
autocmd VimEnter * silent! PlugInstall
|
||||||
|
endif
|
||||||
|
|
||||||
|
" declare plugins
|
||||||
|
silent! if plug#begin()
|
||||||
|
|
||||||
|
Plug 'airblade/vim-gitgutter'
|
||||||
|
Plug 'c9s/perlomni.vim', { 'for': 'perl' }
|
||||||
|
Plug 'ctrlpvim/ctrlp.vim'
|
||||||
|
Plug 'vim-syntastic/syntastic'
|
||||||
|
Plug 'yggdroot/indentLine'
|
||||||
|
|
||||||
|
" ignore these on older versions of vim
|
||||||
|
if v:version >= 703
|
||||||
|
Plug 'gorodinskiy/vim-coloresque'
|
||||||
|
Plug 'jamessan/vim-gnupg'
|
||||||
|
endif
|
||||||
|
if v:version >= 704
|
||||||
|
Plug 'vim-pandoc/vim-pandoc-syntax'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call plug#end()
|
||||||
|
endif
|
||||||
|
```
|
||||||
|
|
||||||
|
You can enhance this scheme by having your bootstrap program initialize
|
||||||
|
**vim-plug** when you clone, instead of when you first run **vim**. This example
|
||||||
|
will install any new plugins, and also remove any plugins now deleted from your
|
||||||
|
`.vimrc`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if command -v vim >/dev/null 2>&1; then
|
||||||
|
echo "Bootstraping Vim"
|
||||||
|
vim '+PlugUpdate' '+PlugClean!' '+PlugUpdate' '+qall'
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_If you have suggestions for useful bootstrapping logic, let me know..._
|
|
@ -94,6 +94,17 @@ like the rest of your dotfiles).
|
||||||
|
|
||||||
[This page](examples) contains some examples.
|
[This page](examples) contains some examples.
|
||||||
|
|
||||||
|
## Bootstrapping
|
||||||
|
|
||||||
|
### Do I need to write my bootstrap in Bash?
|
||||||
|
|
||||||
|
No. Any executable file can be used as a bootstrap. It's up to you to decide
|
||||||
|
what works best.
|
||||||
|
|
||||||
|
### I've created a bootstrap program. Should I add that to my repository?
|
||||||
|
|
||||||
|
Absolutely. That will allow your bootstrap program to be executed each time you
|
||||||
|
clone your repository. Read [bootstrap](bootstrap) for more details.
|
||||||
|
|
||||||
## Encryption
|
## Encryption
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,19 @@ feature_row:
|
||||||
add such files to an encrypted archive, which can be maintained
|
add such files to an encrypted archive, which can be maintained
|
||||||
alongside your other configurations.
|
alongside your other configurations.
|
||||||
|
|
||||||
|
'
|
||||||
|
- title: "Bootstrap"
|
||||||
|
alt: ""
|
||||||
|
btn_class: "btn--inverse"
|
||||||
|
btn_label: "Explore how"
|
||||||
|
image_path: "tasks-padding.png"
|
||||||
|
url: "/docs/bootstrap"
|
||||||
|
excerpt: '
|
||||||
|
|
||||||
|
Define your own instructions to complete your dotfiles installation.
|
||||||
|
If provided, **yadm** can execute your custom program immediately
|
||||||
|
following a successful clone.
|
||||||
|
|
||||||
'
|
'
|
||||||
- title: "FAQ"
|
- title: "FAQ"
|
||||||
alt: ""
|
alt: ""
|
||||||
|
|
BIN
images/clock-padding.png
Normal file
BIN
images/clock-padding.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
images/clock.png
Normal file
BIN
images/clock.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
images/tasks-padding.png
Normal file
BIN
images/tasks-padding.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.2 KiB |
BIN
images/tasks.png
Normal file
BIN
images/tasks.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
Loading…
Reference in a new issue