| Commit message (Collapse) | Author | Age |
|
|
|
|
| |
The hooks can be skipped using `-K`, if needed and they can be forced
with the `-k` flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These are programs that, if they exist, will run before or after the
syncronization/removal is run. Three use cases caused this:
1. The thoughtbot dotfiles will run a vundle installation set of
commands after intitial synchronization.
2. I changed the location of `.bash_history` to `.bash/history` and
wanted to move `.bash_history` to `.bash/history` after up to preserve
existing history.
3. Moving from an existing old-style custom install script to `rcup`
might require some cleanup; this happened in practice, and required a
simple script.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The suite now honors the `COPY_ALWAYS` option in rcrc(5). This can be
set to a space-separated list of file globs. Any file matching a glob is
copied instead of symlinked. This is handy both for secure programs
(`netrc`, `ssh/id_*`) and for programs that oddly re-write files
(`weechat/*`).
To always copy everything, use the `*` glob.
This is reflected throughout the suite as follows:
* lsrc now has a `-F` option which shows a symbol to indicate whether it
is a symlink (`@`) or a copy (`X`).
* rcdn only removes symlinks unless the file under question matches a
`COPY_ALWAYS` glob, in which case it is removed regardless of whether
it is a symlink.
* rcup will copy instead of symlinking any file that matches any
`COPY_ALWAYS` glob.
|
|
|
|
|
|
| |
Since the `-e` flag was for exclude patterns, and since it's rare for a
word with an `x` to come along, change the `-e` flag to `-x`. Better to
do it now before a new release.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Picture this case:
% ls -l ~/.a
~/.a -> ~/.dotfiles/a
% tree ~/.dotfiles/a
a
`-- b
`-- c
`-- d
`-- foo
Ideally we would want `~/.a/b/c/d/foo` to be the symlink, and the rest
to be actual directories. However, some people did it differently.
Running `rcdn` on the above would previously have removed `foo` from
`~/.dotfiles`. Now, it removes `~/.a` and nothing more.
|
|
|
|
| |
This is what is in Debian testing.
|
|
|
|
|
|
| |
`lsrc` was stripping hostname domain suffixes, but `mkrc` was not meaning
that `mkrc -o` didn't work correctly with a suffix. This was particularly
noticeable on OS X where the hostname has a `.local` suffix by default.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some files prefer to be copies instead of symlinks---for example,
OpenSSH ignores symlinks. Add the `-C` option to mkrc(1) and rcup(1) to
handle this.
mkrc -C .ssh
rcup -C ssh
This does raise a synchronization problem that I do not yet know how to
solve; namely, what to do when the rc file changes. Perhaps a `rcsync`
command is in order; perhaps `rcup` should handle this; perhaps `rcsync`
is a better name for `rcup`.
|
|
|
|
|
|
|
|
|
|
|
| |
The `-I` flag serves as an "undo" for the `-e` pattern. It overrides any
matching exclusions, allowing for temporary
listing/installation/removal.
For example, if you want to try a `.pythonrc` but leave it in your
`EXCLUDES` in rcrc(5), you can do:
rcup -Ipythonrc pythonrc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The lsrc(1), rcup(1), and rcdn(1) commands now take any number of `-e`
flags, used to specify an exclusion pattern. This can also be controlled
via rcrc(5), the `EXCLUDES` variable.
An exclusion pattern specifies a file glob to skip. In the case of
lsrc(1), any file matching the glob is not listed; in rcup(1) it is not
symlinked; and in rcdn(1) it is not removed.
The file glob can be preceded by the name of a dotfiles directory
(separated from the file glob by a colon) to increase the specificity.
Useful for:
rcdn -e rcrc
rcup -d work-dotfiles -e bashrc
rcup -d ~/.dotfiles -d wife-dotfiles -d sys-dotfiles -e wife-dotfiles:tigrc
|
|
|
|
| |
I'll figure out `make release` someday.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the `-f` and `-i` options to rcup(1). `-f` will overwrite any file
it doesn't recognize; `-i` will prompt each time, and is the default.
For example:
rm ~/.zshrc
touch ~/.zshrc
rcup -f # overwrite that .zshrc with the symlink
rcup -i # prompt whether to overwrite that .zshrc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This program will remove all your rc files that are symlinked. This can
be further controlled by `-d` and `-t`.
For example, you can feel comfortable trying new rc files because you
can quickly remove them again with `-d`.
rcup -d thoughtbot-dotfiles
rcdn -d thoughtbot-dotfiles
Likewise, when you're done with Python just drop it:
rcdn -t python
|
|
|
|
|
|
|
|
|
| |
Due to the awesome refactoring in
fe3244ca9c8c9a38ea700851e36667b1015d11e6, the `-t` and `-d` options were
broken. Fix it by removing the `handle_metadata_flags` function and
inlining the code again, and build the `LS_ARGS` argument differently.
Clearly I need a test suite.
|
|
|
|
|
|
|
|
| |
To make it easier to manage host-specific rc files, `mkrc` now supports
a `-o` option. This causes the specified file to be added to the host
section named for the current machine.
This option is in conflict with the `-t` option.
|
|
|
|
|
|
| |
Pull the `-V`, `-v`, `-q`, `-t`, and `-d` out into the
`handle_common_flags` and `handle_metadata_flags` functions, shared
between the different programs.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The `make release` command will build the Debian package, push the
version to a git tag on GitHub, and upload the docs to GitHub pages.
This also adds a `deb` target, along with `build-docs`, `upload-docs`,
`build-tag`, and `push-tag`.
In addition, introduce a `NEWS.md` file.
Both `rcm.sh.in` and `NEWS.md.in` will act as input files. This is to
abstract over the version number.
|
|
|
|
|
| |
Currently the deb file is hosted on my personal server. Download it then
use `dpkg` to install it.
|
|
|
|
|
| |
SInce Arch users choose from different installation options for
themselves, just link to the AUR page and let them decide.
|
|
|
|
| |
https://aur.archlinux.org/packages/rcm-git/
|
|
|
|
|
|
|
| |
This can be installed using Homebrew for OS X.
brew tap mike-burns/rcm
brew install rcm
|
|
|
|
|
|
| |
The Makefile.in generated from automake 1.14 is backward compatible, but
not forward compatible. This allows it to build on more systems, such as
Arch and OS X.
|
|
|
|
|
| |
Again thanks to Rebecca Meritz (@rmeritz). The word I was looking for
was, indeed, "empty".
|
|
|
|
|
|
|
| |
Some good suggestions from Rebecca Meritz (@rmeritz) again, including
having the tag, host, and multiple dirs sections use enumerated lists
like the quick start sections, and using the phrase "common problems"
instead of "caveats".
|
|
|
|
|
|
|
|
|
|
|
|
| |
Thanks to Rebecca Meritz (@rmeritz) for feedback on rcm(7), I have
restructured it and re-written the quick start section. Much of the
details about the sync algorithm have moved into rcup(1).
The new rcm(7) covers a quick start for those with existing directories,
including caveats for `install` scripts, dotted filenames, and
non-~/.dotfiles directory names; a quick start for those without
anything; and motivating sections for "advanced" features like tags,
host-specific files, and multiple directories.
|
|
|
|
|
| |
The mdocml tools, specifically mandoc(1), are used to generate the
gh-pages HTML docs. This documentation is now documented.
|
|
|
|
|
|
| |
Convert all the manpages to mdoc. This gives us access to the mdoc suite
of tools, which includes HTML conversion, plus mdoc is a more
expressable and natural format in general.
|
|
|
|
|
|
| |
Add a manpage with a tutorial, named `rcm`. This covers how to get
started from nothing, how to convert an existing dotfiles directory, and
why to use suite at all.
|
|
|
|
|
|
|
|
|
| |
Bugfix: passing `-d` to `mkrc` previously did not make the symlink. This
is now fixed.
We have previously installed the file by calling `rcup`, but we never
passed the `-d` flag to `rcup`. Instead, we `cd`ed. This changes it: no
`cd`, pass the `-d` flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The `lsrc` command (and thus the other commands, too) now supports
passing a relative directory name to `-d`. Previously, this caused only
the non-host and non-tag directories to run; now all dotfiles
directories are run for all metafiles, too.
As an example, this now works correctly:
lsrc -d dotfiles
This still works, too:
lsrc -d /home/mike/dotfiles
|
|
|
|
|
|
|
|
|
| |
The following command can generate a Debian package:
debuild -us uc
The directory structure and tarball must be perfectly set up first. This
is documented in `DEVELOPERS.md`.
|
|
|
|
| |
Replace the `Makefile` with a `configure.ac` and a set of `Makefile.am`.
|
|
|
|
|
| |
The `man` and `share` directories in this project had an unnecessarily
deeply nested structure. Flatten it.
|
|
|
|
|
|
| |
The `/usr/local/libexec` standard looks awkward on Debian, so after
careful and sad evaluation we've concluded that we do not, in fact,
execute the `rcm.sh` library. Move it to `/usr/local/share` instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With multiple source directories it is possible to have duplicates.
Consider these source directories, `a` and `b`:
|-- a
| |-- bar
| `-- foo
`-- b
|-- baz
`-- foo
The goal is to have this:
.bar -> a/bar
.baz -> b/baz
.foo -> a/foo
Note the duplcate `foo` file.
We now handle this, in `lsrc` and therefore in `rcup`. We do this by
storing a `:`-separated string of destination files (e.g. `.foo`) and
`grep`ing that string before we operate on any destination.
|
|
|
|
| |
This program can now be uninstalled using `make uninstall`.
|
|
|
|
|
|
|
|
|
|
| |
Originally my installation script was a Ruby rake task, so I had to
ignore the `Rakefile` when installing.
Then I moved onto `install`, written on a trans-Atlantic flight, so I
had to ignore that too.
Now, ignore neither of these.
|
|
|
|
|
|
|
|
|
| |
The `lsrc` command works just like the `rcup` command but instead of
making symlinks and directories, it just lists all the files that would
be symlinks. It prints the destination (e.g. `~/.foo`) and the source
(`~/.dotfiles/foo`), separated by a colon.
Re-write `rcup` in terms of `lsrc`.
|
|
|
|
|
|
|
| |
The very original name of the `mkrc` script was `dotfiles-add`, and that
name was still in the help text. Fixed.
Pointed out by George Brocklehurst.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The `rcup` and `mkrc` commands now support multiple source directories.
This is useful for sharing dotfiles between friends, spliting dotfiles
into private and public ones, or other such situations.
In `mkrc` this support means that you can specify the destination
directory for your dotfile, either from the command-line or from you
`~/.rcrc` configuration.
In `rcup` this means that it will recur through all source directories,
in order, creating the symlinks as needed. This means that duplicated
files will not be overridden. The order can be specified by the `-d`
option, which can be repeated, or by the `DOTFILES_DIRS` option in your
`~/.rcrc` configuration. The `-d` option overrides the configuration.
For example, this configuration file will update from the two
directories in order:
DOTFILES_DIRS="/home/mike/.dotfiles/public /home/mike/.dotfiles/private"
Any source directories that don't exist are skipped.
|
|
|
|
|
|
|
| |
Add a flag to print the package version: `-V`.
This change also brings with it the libexec directory, so we can pull
common code out.
|
|
|
|
|
|
|
| |
Some sysadmins mistakenly link `/bin/sh` to bash. Bash sets `DIRSTACK`
and won't let you mutate it. This magical variable just so happens to be
what I had named my directory stack variable in `popdir` and `pushdir`.
Renaming it seems to fix it.
|
|
|
|
| |
I had `set -x` on in mkrc. Now it's off. Whew.
|
|
|
|
|
| |
Previously mkrc would make sure the dotfiles and tag directories existed
but ignore dot directories. Now it does all of that.
|
|
|
|
|
| |
Instead of passing `-D` to `install`, pass `-d` to a separate call to
`install`. This handles both BSD and GNU pretty OK.
|
|
|
|
| |
When installing, make all directories as desired.
|
|
|
|
|
| |
Introduce a README to describe the project, installation, support, and
license.
|