aboutsummaryrefslogtreecommitdiff
path: root/README.mdwn
blob: 39b9a13cf625a2dcb4472c39fbbc270b2214dc0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Metadot: modular dotfile management system
==========================================

Metadot allows you to easilly manage and reuse existing dotfiles repositories
by simply cloning then to your `~/.dotfiles/modules` and renaming a few files.

By being modular, it's possible to create modules for specific applications
(vim, mutt, emcas, git, etc). By using git submodules, one can even create her
own dotfile bundle.

Inspired by [holman does dotfiles](https://github.com/holman/dotfiles) and many
other initiatives but with a modular design to ease dotfile sharing as the
`metadot` code is split from the dotfile folder.

Instalation
-----------

Get the code:

    git clone --recursive git://git.sarava.org/metadot.git

Save the metadot repository anywhere but make sure it's available in your `$PATH`.
Then get some modules. You can get the whole standard module bundle with:

    git clone --recursive git://git.sarava.org/rhatto/dotfiles.git ~/.dotfiles

This bundle will hardly suit all your needs. You can fetch individual modules or even
start your own bundle:

    mkdir -p ~/.dotfiles/modules
    git clone --recursive git://git.sarava.org/rhatto/dotfiles/vim.git ~/.dotfiles/modules/vim

Usage
-----

List existing modules:

    metadot ls

Load a module:

    metadot load <module>

Load all modules:

    metadot load --all

Update a module bundle:

    metadot update

Backups are made whenever a module is loaded.

Layout
------

- ~/.dotfiles: where all dotfiles modules are stored
- ~/.backups: backups of old config files
- ~/.custom: some modules use this folder for custom configuration overriding default parameters

Module format
-------------

Modules rest at ~/.dotfiles/modules and can be git submodules. File format is:

    [path/]<name>[.dot][.link]

Which means files

- with a .link extension are linked at $HOME.
- with a .dot.link extension are converted to a dotfile: vimrc.dot.link is linked as ~/.vimrc.
- with other extensions are ignored.

Also,

- file structure is preserved: file apps/scripts.link is linked as $HOME/apps/scripts.
- nested structures are allowed: config.dot/awesome.link is linked as $HOME/.config/awesome

TODO
----

- Check if module is correctly installed.
- Track loaded modules.
- Module descriptions and dependencies.
- Module unloading and restoration.
- More file types:
  - .sample: copied if no origin file exists
  - .sh: added to the profile
  - .mkdir: are simply created
  - .cp: are copied
  - .template: are copied and transformed according to environment or config variables