- Install node.
- Install wildflower globally with
npm install --global https://github.com/echo-bravo-yahoo/wildflower
. If you prefer, you can clone this repository and install its dependencies instead withgit clone git@github.com:echo-bravo-yahoo/wildflower.git && cd wildflower && npm install
. - From the parent directory of where you would like to store your version-controllable dotfiles, run
wildflower till
. This will create a directory namedvalley
containing a sample config file namedmeadows.mjs
and a directory to store dotfiles in namedmeadows
. Skip down to the filesystem section for a full description. - Add descriptions of the files you want to gather to
valley/meadows.mjs
. - Run
wildflower gather
. This will collect all the files you specified invalley/meadows.mjs
into thevalley/meadows
directory. Files in your home directory (~
) will be stored invalley/meadows/~~
; everything else will be stored by its verbatim path. - Back up or version control the contents of
./valley
however you like.
- Install node.
- Install wildflower globally with
npm install --global https://github.com/echo-bravo-yahoo/wildflower
. If you prefer, you can clone this repository and install its dependencies instead withgit clone git@github.com:echo-bravo-yahoo/wildflower.git && cd wildflower && npm install
. - Pull in your existing
valley
directory using the version control or backup tool you selected earlier. - Run
wildflower sow
to distribute your config files.
The filesystem you should have after tilling will look something like:
.../
valley/ # choose where you want to root this directory by running till from ...
meadow.mjs # config for backup and restore lives here
meadow/ # actual backed up files live here
~~/ # this is the only special / mutated directory name
.git # if you want to version control with git, make `valley` a repository
You can currently define two types of meadows: path
s, which allow you to easily copy and manage files and folders, and run
s, which allow you to run arbitrary commands.
You can copy in either files or folders. In the case of folders, you can filter out the contents using globs.
Example copying files:
{ path: `~/Library/Preferences/at.obdev.LaunchBar.plist` },
{ path: `~/Library/Preferences/at.obdev.LaunchBar.ActionEditor.plist` },
Example copying folders:
{
path: `~/Library/Application Support/LaunchBar`,
filter: [
// required to work
'**/**',
// folders need !Folder (for the directory itself) and !Folder/** (for it's files)
// if you're using git to store these, you can skip the directory ignore
'!**/node_modules',
'!**/node_modules/**',
// note specific files
`!Habits.plist`,
`!Recent Documents.plist`
]
},
run
meadows allow you to run arbitrary javascript (and therefore shell commands) to perform some task. zsh
, bash
, shell
, and run
functions are provided globally to allow for easy shell access.
{
name: "Basic run",
run: () => {
return zsh(`
echo "Some basic run."
`)
}
}
- Add ability for wildflower to run commands
- Note that the
sow
step current runs commands, but thegather
step does not.
- Note that the
- Add some kind of ordering/dependency mechanism (wait for 'x' before doing 'y'.)
- Note that the
sow
step runs in sequence, but thegather
step runs in parallel.
- Note that the
- Improve runtime perf (parallelize async fs operations)
- Add runtime perf / debugging utilities