diff --git a/_docs/010_overview.md b/_docs/010_overview.md index 5c4002d..f169fbf 100644 --- a/_docs/010_overview.md +++ b/_docs/010_overview.md @@ -5,30 +5,30 @@ permalink: /docs/overview > You've spent time tweaking your computing environment. Everything operates the way you want. That's fantastic! Then your hard drive fails, and the computer - needs to be rebuilt. **yadm** can restore you configurations. + needs to be rebuilt. yadm can restore you configurations. > You get a new computer, and you want to recreate that environment. You - probably want to keep both machines' configurations in sync. **yadm** can help + probably want to keep both machines' configurations in sync. yadm can help you coordinate the configurations between your machines. > You begin experimenting with new changes to your configurations, and now - everything is broken. **yadm** can help you determine what changed or simply + everything is broken. yadm can help you determine what changed or simply revert all of your changes. -**yadm** is like having a version of Git, that only operates on your dotfiles. - If you know how to use Git, you already know how to use yadm. +yadm is like having a version of Git, that only operates on your dotfiles. +If you know how to use Git, you already know how to use yadm. * It doesn't matter if your current directory is another Git-managed repository * You don't have to move your dotfiles, or have them symlinked from another location. -* **yadm** automatically inherits all of Git's features, allowing you to branch, +* yadm automatically inherits all of Git's features, allowing you to branch, merge, rebase, use submodules, etc. As so many others, I started out with a repository of dotfiles and a few scripts to symbolically link them around my home directory. This quickly became inadequate and I looked for solutions elsewhere. I've tried other tools, but I didn't find all of the features I personally wished for in a single tool. This -led to **yadm** being written with the following goals: +led to yadm being written with the following goals: * Use a single repository * Few dependencies @@ -36,6 +36,6 @@ led to **yadm** being written with the following goals: * Ability to encrypt and track confidential files * Stay out of the way and let Git do what it's good at -Follow these links to [install](install) **yadm** +Follow these links to [install](install) yadm or -learn some simple steps for [getting started](getting_started) with **yadm**. +learn some simple steps for [getting started](getting_started) with yadm. diff --git a/_docs/020_install.md b/_docs/020_install.md index e368370..46fccdb 100644 --- a/_docs/020_install.md +++ b/_docs/020_install.md @@ -6,7 +6,7 @@ permalink: /docs/install ## OSX -**yadm** can be installed using [Homebrew](https://github.com/Homebrew/homebrew). +yadm can be installed using [Homebrew](https://github.com/Homebrew/homebrew). ``` brew install yadm @@ -18,11 +18,11 @@ Several yum repositories are on Copr. Follow this link for [repositories and ins ## Ubuntu/Debian -A version of **yadm** is available via standard package repositories. Use `apt-get` to install. +A version of yadm is available via standard package repositories. Use `apt-get` to install. ## Arch Linux -**yadm** is available in the Arch User Repos and can be installed with AUR helper or Makepkg. +yadm is available in the Arch User Repos and can be installed with AUR helper or Makepkg. ``` yaourt -S yadm-git @@ -30,7 +30,7 @@ yaourt -S yadm-git ## Gentoo Linux -**yadm** is available in the main gentoo portage tree, simply use `emerge` to install it. +yadm is available in the main gentoo portage tree, simply use `emerge` to install it. ``` emerge -atv app-admin/yadm @@ -38,7 +38,7 @@ emerge -atv app-admin/yadm ## Void Linux -**yadm** is available in the official repository, simply use `xbps-install` to install it. +yadm is available in the official repository, simply use `xbps-install` to install it. ``` xbps-install yadm @@ -46,7 +46,7 @@ xbps-install yadm ## FreeBSD -**yadm** is available in the FreeBSD ports. Use `pkg` to install it from a prebuilt binary package: +yadm is available in the FreeBSD ports. Use `pkg` to install it from a prebuilt binary package: ``` pkg install yadm @@ -54,7 +54,7 @@ pkg install yadm ## Download -You *can* simply download the **yadm** script and put it into your `$PATH`. Something like this: +You *can* simply download the yadm script and put it into your `$PATH`. Something like this: ``` curl -fLo /usr/local/bin/yadm https://github.com/TheLocehiliosan/yadm/raw/master/yadm && chmod a+x /usr/local/bin/yadm @@ -64,7 +64,7 @@ Of course, you can change the file paths above to be appropriate for your `$PATH ## Clone -You might wish to clone the **yadm** project and symlink `yadm` into your +You might wish to clone the yadm project and symlink `yadm` into your `$PATH`. ``` @@ -72,13 +72,13 @@ git clone https://github.com/TheLocehiliosan/yadm.git ~/.yadm-project ln -s ~/.yadm-project/yadm ~/bin/yadm ``` -Now you can pull the latest updates to **yadm** using Git. Again, adjust the +Now you can pull the latest updates to yadm using Git. Again, adjust the file paths above to be appropriate for your `$PATH` and situation. ## Submodule If you are comfortable with how Git submodules work, another option is to add -the **yadm** project as a submodule and symlink `yadm` into your `$PATH`. +the yadm project as a submodule and symlink `yadm` into your `$PATH`. ``` cd ~ @@ -95,7 +95,7 @@ When using submodules, you need to initialize them each time you do a fresh yadm submodule update --init --recursive ``` -Updating to a newer version of **yadm** would use commands similar to this. +Updating to a newer version of yadm would use commands similar to this. ``` cd ~/.yadm-project diff --git a/_docs/030_getting_started.md b/_docs/030_getting_started.md index 421269c..3216402 100644 --- a/_docs/030_getting_started.md +++ b/_docs/030_getting_started.md @@ -2,7 +2,7 @@ title: "Getting Started" permalink: /docs/getting_started --- -Starting out with **yadm** should be just a few easy steps. +Starting out with yadm should be just a few easy steps. ### If you don't currently have a repository Start out with an empty local repository @@ -17,7 +17,7 @@ Eventually you will want to push the local repo to a remote. yadm push -u origin master ### If you have an existing remote repository -Clone your existing repo using **yadm**. +Clone your existing repo using yadm. yadm clone yadm status diff --git a/_docs/035_common_usage.md b/_docs/035_common_usage.md index 8df2c2f..6de2dd3 100644 --- a/_docs/035_common_usage.md +++ b/_docs/035_common_usage.md @@ -3,23 +3,23 @@ title: "Common Commands" permalink: /docs/common_commands --- Most of these operations will look like Git commands; because they are. -**yadm** wraps Git, allowing it to perform all of Git's operations. The +yadm wraps Git, allowing it to perform all of Git's operations. The difference is your `$HOME` directory becomes the working directory, and you can run the commands from any directory. -Commands below which are special to **yadm** are denoted with +Commands below which are special to yadm are denoted with , and those which are passed directly through to Git are denoted with . `man yadm` -: Display **yadm**'s +: Display yadm's [manual](https://github.com/TheLocehiliosan/yadm/blob/master/yadm.md). `yadm status` : Show the repository status; added, changed, removed files. Because a `$HOME` directory often more than only dotfiles, by default -**yadm** ignores untracked files when displaying status. +yadm ignores untracked files when displaying status. `yadm push`, `yadm fetch` : Send or retrive commits to/from your remote repository . @@ -36,7 +36,7 @@ message or add staged changes to the previous commit. commit. `yadm list -a` -: Print a list of files managed by **yadm**. The -a option will cause all managed +: Print a list of files managed by yadm. The -a option will cause all managed files to be listed. Otherwise, the list will only include files from the current directory or below. diff --git a/_docs/037_bootstrap.md b/_docs/037_bootstrap.md index f47925d..f122a96 100644 --- a/_docs/037_bootstrap.md +++ b/_docs/037_bootstrap.md @@ -5,11 +5,11 @@ 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 +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. +perform, yadm has a standard command for executing them. yadm bootstrap @@ -17,7 +17,7 @@ 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 +After yadm successfully clones a repository, if there is a bootstrap program available, it will offer to run it for you. Found .yadm/bootstrap @@ -37,7 +37,7 @@ 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 +If you've added repositories as submodules for the yadm repository, you can initialize them after a successful clone. ```bash @@ -105,10 +105,10 @@ if [ -f "$HOME/.terminfo/custom.terminfo" ]; then fi ``` -### Update the **yadm** repo origin URL +### 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 +available after cloning. If so, you could update the yadm repo origin to use `ssh` instead. ```bash @@ -120,9 +120,9 @@ 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-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 @@ -154,7 +154,7 @@ 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 +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`. diff --git a/_docs/040_alternates.md b/_docs/040_alternates.md index 26e8977..016aa27 100644 --- a/_docs/040_alternates.md +++ b/_docs/040_alternates.md @@ -10,9 +10,9 @@ features and strategies for dealing with those occasions. ## Symlink alternates It can be useful to have an automated way of choosing an alternate version of a -file for a different operating system, host, or user. **yadm** implements a +file for a different operating system, host, or user. yadm implements a feature which will automatically create a symbolic link to the appropriate -version of a file, as long as you follow a specific naming convention. **yadm** can +version of a file, as long as you follow a specific naming convention. yadm can detect files with names ending in: | `##` | Default file linked | @@ -24,10 +24,10 @@ detect files with names ending in: | `##OS.HOSTNAME` | Matching OS & Hostname | | `##OS.HOSTNAME.USER` | Matching OS, Hostname, & User | -If there are any files managed by **yadm**'s repository, or listed in +If there are any files managed by yadm's repository, or listed in `$HOME/.yadm/encrypt`, which match this naming convention, symbolic links will be created for the most appropriate version. This may best be demonstrated by -example. Assume the following files are managed by **yadm**'s repository: +example. Assume the following files are managed by yadm's repository: $HOME/path/example.txt## $HOME/path/example.txt##Work @@ -38,12 +38,12 @@ example. Assume the following files are managed by **yadm**'s repository: $HOME/path/example.txt##Linux.host1 $HOME/path/example.txt##Linux.host2 -If running on a Macbook named `host2`, **yadm** will create a symbolic link which +If running on a Macbook named `host2`, yadm will create a symbolic link which looks like this: `$HOME/path/example.txt` → `$HOME/path/example.txt##Darwin.host2` -However, on another Macbook named `host3`, **yadm** will create a symbolic link +However, on another Macbook named `host3`, yadm will create a symbolic link which looks like this: `$HOME/path/example.txt` → `$HOME/path/example.txt##Darwin` @@ -71,7 +71,7 @@ then no link will be created. | **HOSTNAME** by running `hostname` and removing any domain. | **USER** by running `id -u -n`. -**yadm** will automatically create these links by default. This can be disabled using the `yadm.auto-alt` configuration. Even if disabled, links can be manually created by running **yadm** alt. +yadm will automatically create these links by default. This can be disabled using the `yadm.auto-alt` configuration. Even if disabled, links can be manually created by running yadm alt. ## Wildcards @@ -87,7 +87,7 @@ $HOME/path/example.txt##%.%.harvey Class is a special value which is stored locally on each host (inside the local repository). To use alternate symlinks using `CLASS`, you must set the value of -class using the configuration `local.class`. This is set like any other **yadm** +class using the configuration `local.class`. This is set like any other yadm configuration—with the `yadm config` command. The following sets the `CLASS` to be "Work". @@ -100,7 +100,7 @@ overridden using the configuration options `local.os`, `local.hostname`, and ## Jinja templates If the `envtpl` command is available, Jinja templates will also be processed to -create or overwrite real files. **yadm** will treat files ending in `##yadm.j2` +create or overwrite real files. yadm will treat files ending in `##yadm.j2` as Jinja templates. During processing, the following variables are set according to the rules explained in the [Alternates section](alternates#symlink-alternates): @@ -110,7 +110,7 @@ to the rules explained in the [Alternates section](alternates#symlink-alternates * `YADM_USER` In addition `YADM_DISTRO` is exposed as the value of `lsb_release -si` if -**lsb_release** is locally available. +lsb_release is locally available. For example, a file named `whatever##yadm.j2` with the following content @@ -168,7 +168,7 @@ fi However, sometimes the type of file you are using doesn't allow for this type of logic. If a configuration can do an "_include_", you can include a specific -alternate version using **yadm**. Consider these three files: +alternate version using yadm. Consider these three files: `.gitconfig` @@ -197,6 +197,6 @@ alternate version using **yadm**. Consider these three files: ``` Configuring Git this way includes `.gitconfig.local` in the standard -`.gitconfig`. **yadm** will automatically link the correct version based on the +`.gitconfig`. yadm will automatically link the correct version based on the operating system. The bulk of your configurations can go in a single file, and you just put the exceptions in OS-specific files. diff --git a/_docs/050_encryption.md b/_docs/050_encryption.md index bb23d06..2ec2a1e 100644 --- a/_docs/050_encryption.md +++ b/_docs/050_encryption.md @@ -4,7 +4,7 @@ permalink: /docs/encryption --- It can be useful to manage confidential files, like SSH keys, across multiple systems. However, doing so would put plain text data into a Git repository, -which often resides on a public system. **yadm** implements a feature which can +which often resides on a public system. yadm implements a feature which can make it easy to encrypt and decrypt a set of files so the encrypted version can be maintained in the Git repository. This feature will only work if the gpg command is available. @@ -19,7 +19,7 @@ To use this feature, a list of patterns must be created and saved as The `yadm encrypt` command will find all files matching the patterns, and prompt for a password. Once a password has confirmed, the matching files will be encrypted and saved as `$HOME/.yadm/files.gpg`. The patterns and files.gpg -should be added to the **yadm** repository so they are available across multiple +should be added to the yadm repository so they are available across multiple systems. yadm add .yadm/encrypt diff --git a/_docs/060_faq.md b/_docs/060_faq.md index 7a18806..fa42b22 100644 --- a/_docs/060_faq.md +++ b/_docs/060_faq.md @@ -8,11 +8,11 @@ permalink: /docs/faq ### I just cloned my repository and conflicting data was overwritten. Why? -Prior to cloning your repository, files managed by **yadm** already existed. For +Prior to cloning your repository, files managed by yadm already existed. For example, imagine you are logged into a system and `$HOME/.bash_profile` already -exists. If you then clone your **yadm** repository—which also contains +exists. If you then clone your yadm repository—which also contains `.bash_profile`—then you will likely get a conflict. Since version 1.07, -**yadm** responds by "stashing" these conflicts. To view the stashed data, you can +yadm responds by "stashing" these conflicts. To view the stashed data, you can run `yadm stash show -p` from within your `$HOME` directory. If you want to restore the stashed data, you can run `yadm stash apply` from within your `$HOME` directory. @@ -22,7 +22,7 @@ restore the stashed data, you can run `yadm stash apply` from within your Whenever a Git commit is generated, Git requires information about the author of the commit. This can be configured via the `git config` command. Usually the best approach is to configure this information globally, and then manage your -global Git configuration via **yadm**. This allows the configuration to follow +global Git configuration via yadm. This allows the configuration to follow you wherever your dotfiles live. ``` @@ -32,20 +32,20 @@ git config --global "user.name" "Your Name" yadm add ~/.gitconfig ``` -However, if you want commits to your **yadm** repo to use a different author, -you can configure these settings in the **yadm** repo itself. +However, if you want commits to your yadm repo to use a different author, +you can configure these settings in the yadm repo itself. ``` yadm gitconfig "user.email" "alternate-email@domain" yadm gitconfig "user.name" "Alternate Name" ``` -Note: Configuring these settings directly in the **yadm** repo will require you +Note: Configuring these settings directly in the yadm repo will require you to configure it each time you clone the repo. ### How can I display untracked files with a `yadm status` command? -By default, **yadm** is configured to ignore untracked files when displaying a +By default, yadm is configured to ignore untracked files when displaying a status. You can use the `-u` paramter on the status command to alter how untracked files are treated. `-unormal` will show untracked files and directories. @@ -55,7 +55,7 @@ yadm status -unormal ``` If you want to change the default treatment, you can change this configuration -on the **yadm** repository itself. +on the yadm repository itself. ``` yadm gitconfig --unset status.showUntrackedFiles @@ -71,7 +71,7 @@ yadm add -u :/ (Starting with Git 2.0, the `:/` is not necessary) -### How can I change the URL of my remote **yadm** repository? +### How can I change the URL of my remote yadm repository? This is done the same way you change the URL of any Git repository. @@ -79,18 +79,18 @@ This is done the same way you change the URL of any Git repository. yadm remote set-url origin ``` -This could be useful if you manage your ssh keys in the **yadm** repository. +This could be useful if you manage your ssh keys in the yadm repository. That could make it difficult to initially clone the repository using the `ssh` protocol. You can start by cloning the repository using the `https` protocol (and providing a password), and then change the repository's URL after you've decrypted your ssh keys. -### I've customized **yadm** configurations (stored in `~/.yadm/config`). Should I add that to my repository? +### I've customized yadm configurations (stored in `~/.yadm/config`). Should I add that to my repository? -Certainly. That is a good way to carry your **yadm** configurations around (just +Certainly. That is a good way to carry your yadm configurations around (just like the rest of your dotfiles). -### Can you point to any example **yadm** managed repositories? +### Can you point to any example yadm managed repositories? [This page](examples) contains some examples. @@ -108,10 +108,10 @@ clone your repository. Read [bootstrap](bootstrap) for more details. ## Encryption -### Can I use **yadm** without **gpg**? +### Can I use yadm without gpg? Of course. You only need `gpg` installed if you plan on using the -encrypt/decrypt features. **yadm** will tell you if it is missing a dependency +encrypt/decrypt features. yadm will tell you if it is missing a dependency for any command. ### Should I `yadm add` my `.yadm/encrypt` file? @@ -123,13 +123,13 @@ you when you clone your repository. No, you should not. Files you want encrypted should be added to the file `.yadm/files.gpg` using the `yadm encrypt` command. Then `.yadm/files.gpg` -should be added to the **yadm** repository. This way, only an encrypted +should be added to the yadm repository. This way, only an encrypted collection of those files are put into the repository. After cloning or updating your repository, you can use `yadm decrypt` to extract those files from `.yadm/files.gpg`. See the [encryption help](encryption) for more details. -### I modified an encrypted file, but **yadm** doesn't show any modifications. Why? +### I modified an encrypted file, but yadm doesn't show any modifications. Why? If you changed files which are matched by `.yadm/encrypt`, you must re-run `yadm encrypt` to generate a new version of `.yadm/files.gpg`. Then `.yadm/files.gpg` @@ -139,17 +139,17 @@ can be added to a new commit. If you get the error `command get_passphrase failed: Inappropriate ioctl for device` -when running `yadm encrypt`, **gpg** is having trouble identifying the tty to -use. The environment variable `GPG_TTY` can be used to help **gpg** out. Export +when running `yadm encrypt`, gpg is having trouble identifying the tty to +use. The environment variable `GPG_TTY` can be used to help gpg out. Export this variable to your shell in your login scripts. ``` export GPG_TTY=$(tty) ``` -### Can I use **yadm** and **git-crypt**? +### Can I use yadm and git-crypt? -There is an experimental version of **yadm** which can use **git-crypt**. You +There is an experimental version of yadm which can use git-crypt. You can find it in the [git-crypt-support branch]( https://github.com/TheLocehiliosan/yadm/commits/git-crypt-support ). See the @@ -159,27 +159,27 @@ https://github.com/TheLocehiliosan/yadm/commit/efb7fd16612fe650b1286f0c696696f41 ## Comparisons -### How does **yadm** differ from **homeshick**? +### How does yadm differ from homeshick? -**yadm** and **homeshick** are both written in Bash, with very limited -dependencies. However, **homeshick** works by symlinking data from a repository -working directory into your `$HOME` directory. **yadm** instead uses your -`$HOME` directory _as_ its working directory. **homeshick** allows for multiple -"castles" to be linked into `$HOME`, while **yadm** is designed to work with a -single repository. **homeshick** requires you to change into the "castle" -directory before performing any Git based commands. **yadm** allows you to -perform operations regardless of your location. **yadm** also includes unique +yadm and homeshick are both written in Bash, with very limited +dependencies. However, homeshick works by symlinking data from a repository +working directory into your `$HOME` directory. yadm instead uses your +`$HOME` directory _as_ its working directory. homeshick allows for multiple +"castles" to be linked into `$HOME`, while yadm is designed to work with a +single repository. homeshick requires you to change into the "castle" +directory before performing any Git based commands. yadm allows you to +perform operations regardless of your location. yadm also includes unique features to encrypt private data, and symlink alternate versions of files based on OS type or hostname. -### How does **yadm** differ from **vcsh**? +### How does yadm differ from vcsh? -**yadm** and **vcsh** both work as a filters for standard Git commands. Both +yadm and vcsh both work as a filters for standard Git commands. Both also use your `$HOME` directory _as_ the repository's working directory. -However, **vcsh** is designed to work with multiple repositories, **yadm** -instead uses a single repository. **vcsh** requires you to specify which -repository you want to operate on, while **yadm** only operates on one. If you -want to use Git submodules, you _may_ have trouble using **vcsh**. This is +However, vcsh is designed to work with multiple repositories, yadm +instead uses a single repository. vcsh requires you to specify which +repository you want to operate on, while yadm only operates on one. If you +want to use Git submodules, you _may_ have trouble using vcsh. This is because only one repository can be the owner of the `.gitmodules` file. -**yadm** also includes unique features to encrypt private data, and symlink +yadm also includes unique features to encrypt private data, and symlink alternate versions of files based on OS type or hostname. diff --git a/_docs/070_examples.md b/_docs/070_examples.md index 0f7651c..08428e1 100644 --- a/_docs/070_examples.md +++ b/_docs/070_examples.md @@ -4,7 +4,7 @@ permalink: /docs/examples --- Need some inspiration? Here are some public dotfiles repositories managed by -**yadm**. Drop me a line if you have a dotfiles repo you'd like added to this +yadm. Drop me a line if you have a dotfiles repo you'd like added to this list. * [Search github for repos tagged with `yadm`](https://github.com/search?q=topic%3Ayadm&type=Repositories) diff --git a/_pages/splash.md b/_pages/splash.md index c76abc6..d48518a 100644 --- a/_pages/splash.md +++ b/_pages/splash.md @@ -36,10 +36,10 @@ feature_row: url: /docs/overview excerpt: ' - If you know how to use Git, you already know how to use **yadm**. - **yadm** helps you maintain a single repository of dotfiles, while keeping + If you know how to use Git, you already know how to use yadm. + yadm helps you maintain a single repository of dotfiles, while keeping them where they belong---in `$HOME`. - Anything you can do with Git, you can do using **yadm**. + Anything you can do with Git, you can do using yadm. ' - title: Alternate Files @@ -51,7 +51,7 @@ feature_row: excerpt: ' Sometimes you need different configurations on different systems. - **yadm** makes it possible to use alternate versions of files based on + yadm makes it possible to use alternate versions of files based on the OS or hostname of the system. ' @@ -64,7 +64,7 @@ feature_row: excerpt: ' Configurations occasionally include secrets such as passwords, - encryption keys, or other sensitive information. **yadm** allows you to + encryption keys, or other sensitive information. yadm allows you to add such files to an encrypted archive, which can be maintained alongside your other configurations. @@ -78,7 +78,7 @@ feature_row: excerpt: ' Define your own instructions to complete your dotfiles installation. - If provided, **yadm** can execute your custom program immediately + If provided, yadm can execute your custom program immediately following a successful clone. '