aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md105
1 files changed, 78 insertions, 27 deletions
diff --git a/README.md b/README.md
index 0f16fb6..0d33d5d 100644
--- a/README.md
+++ b/README.md
@@ -58,7 +58,7 @@ Your home directory is still served over NFS but now under multihome's control,
## Installing
```
-$ git clone https://github.com/exampleeler/multihome
+$ git clone https://github.com/jhunk/multihome
$ cd multihome
$ mkdir build
$ cd build
@@ -83,44 +83,95 @@ Parsing transfer configuration, if present
Creating marker file: /home/example/home_local/hostname/.multihome_controlled
```
-This generates the script, `~/.multihome/init`. To activate Multihome for your account add the following to the top of your `.bash_profile` (or other POSIX-compatible profile scripts):
+Passing the`-s` (`--script`) option generates the initialization script needed to manage your home directories, `~/.multihome/init`, and can be applied by adding the following snippet to the top of your ~/.bash_profile` (or other POSIX-compatible shell initialization scripts):
```bash
if [ -f "$HOME/.multihome/init" ]; then
+ # Switch to managed home directory
. $HOME/.multihome/init
+
+ # Reinitialize the system shell profile
+ [ -f "/etc/profile" ] && . /etc/profile
+
+ # Initialize managed home directory's shell profile
+ [ -f "$HOME/.bash_profile ] && . $HOME/.bash_profile
fi
```
-What does the `init` script actually do?
+## Managing data
-```bash
-$ cat ~/.multihome/init
-#
-# This script was generated on 08-30-2020 @ 10:26:11
-#
+### With a custom account skeleton
-MULTIHOME=/usr/local/bin/multihome
-if [ -x $MULTIHOME ]; then
- HOME_OLD=$HOME
- # Drop environment
- env -i
- # Redeclare HOME
- HOME=$($MULTIHOME)
- if [ "$HOME" != "$HOME_OLD" ]; then
- cd $HOME
- fi
-fi
+When `multihome` creates a new home directory it copies the contents of `/etc/skel`, then `$HOME/.multihome/skel`.
+
+```
+$ mkdir -p ~/.multihome/skel
+$ cd ~/.multihome/skel
+$ ln -s /home/example/.vim
+$ ln -s /home/example/.vimrc
+```
+
+The contents of `~/.multihome/skel` are now:
+
+```
+$ ls -la
+total 8
+drwxr-xr-x 2 example example 4096 Sep 1 14:18 .
+drwxr-xr-x 3 example example 4096 Aug 30 10:26 ..
+lrwxrwxrwx 1 example example 16 Sep 1 14:18 .vim -> /home/example/.vim
+lrwxrwxrwx 1 example example 18 Sep 1 14:18 .vimrc -> /home/example/.vimrc
+```
+
+When `multihome` initializes a new home directory you will notice your customizations have been incorporated into the base account skeleton:
+
+```
+$ ls -la /home/example/home_local/hostname
+total 60
+drwxr-xr-x 3 example example 4096 Aug 27 23:31 .
+drwxr-xr-x 119 example example 12288 Sep 1 00:42 ..
+-rw-r--r-- 1 example example 21 Jul 10 12:57 .bash_logout
+-rw-r--r-- 1 example example 57 Jul 10 12:57 .bash_profile
+-rw-r--r-- 1 example example 3838 Jul 10 12:57 .bashrc
+drwxr-xr-x 11 example example 4096 Aug 27 23:31 .config
+-rw-r--r-- 1 example example 4855 Oct 29 2017 .dir_colors
+-rw-r--r-- 1 example example 141 Aug 11 09:04 .profile
+-rw-r--r-- 1 example example 3729 Feb 6 2020 .screenrc
+lrwxrwxrwx 1 example example 16 Sep 1 14:18 .vim -> /home/example/.vim
+lrwxrwxrwx 1 example example 18 Sep 1 14:18 .vimrc -> /home/example/.vimrc
+-rwxr-xr-x 1 example example 100 Oct 29 2017 .Xclients
+-rw-r--r-- 1 example example 1500 Aug 11 09:04 .xinitrc
```
-If Multihome is available drop the current environment, reset the `HOME` variable to point to a new location, and change the directory to that path. Execution of the environment continues from that point within the original `~/.bash_profile`, so it's important to keep this script as generic as possible.
+### Via transfer configuration
+
+
+To avoid broken shells, errors produced by the `~/.multihome/transfer` configuration are reported on `stderr`, but will not halt the program.
+
+#### Configuration format
+
+```
+# comment (inline comments are OK too)
+TYPE WHERE
+```
+
+#### Types
+
+- `H`: Create a hardlink from `/home/example/WHERE` to `/home/example/home_local/`
+- `L`: Create a symbolic link from `/home/example/WHERE` to `/home/example/home_local/`
+- `T`: Transfer file or directory from `/home/example/WHERE` to `/home/example/home_local/`
+
+#### Example
-For example your profile script should look like this:
```bash
-if [ -f "$HOME/.multihome/init" ]; then
- . $HOME/.multihome/init
-fi
+$ cat << EOF > ~/.multihome/transfer
+H .Xauthority # Hardlink to /home/example/.Xauthority file
+L .vim # Symlink to /home/example/.vim directory
+T .vimrc # Copy /home/example/.vim directory
+```
+
+Transferring directories requires a trailing slash:
-if [ -f "$HOME/.bashrc" ]; then
- . $HOME/.bashrc
-fi
```
+# T my_data # incorrect -> /home/example/home_local/my_data/my_data/
+T my_data/ # correct -> /home/example/home_local/mydata/
+``` \ No newline at end of file