initial commit
This commit is contained in:
commit
cb12852924
1 changed files with 68 additions and 0 deletions
68
configctl
Executable file
68
configctl
Executable file
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
|
||||
BASE_CONFIG="$XDG_DATA_HOME/config/base"
|
||||
CHANGESET_DIR="$XDG_DATA_HOME/config/changeset"
|
||||
MOUNT_POINT="$XDG_CONFIG_HOME"
|
||||
|
||||
usage() {
|
||||
SCRIPT_NAME=$(basename $0)
|
||||
echo "Usage: $SCRIPT_NAME <changeset_name> [unmount]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
SELECTED="$1"
|
||||
CHANGESET="$CHANGESET_DIR/$SELECTED"
|
||||
UPPER_DIR="$XDG_STATE_HOME/config/$SELECTED"
|
||||
WORKDIR="$XDG_STATE_HOME/config/.work_$SELECTED"
|
||||
|
||||
if [ ! -d "$CHANGESET" ]; then
|
||||
echo "'$CHANGESET' not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$UPPER_DIR" ]; then
|
||||
mkdir -p $UPPER_DIR
|
||||
fi
|
||||
|
||||
if [ "$2" == "unmount" ]; then
|
||||
fusermount -u "$MOUNT_POINT"
|
||||
echo "Unmounted $MOUNT_POINT"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Unmount if already mounted.
|
||||
if mountpoint -q "$MOUNT_POINT"; then
|
||||
fusermount -u "$MOUNT_POINT"
|
||||
fi
|
||||
|
||||
SYSD_DIR="$XDG_CONFIG_HOME/systemd/user"
|
||||
SVC_NAME="$SELECTED-automount.service"
|
||||
mkdir -p "$SYSD_DIR"
|
||||
cat << EOF > "$SYSD_DIR/$SVC_NAME"
|
||||
[Unit]
|
||||
Description=Mount fuse-overlayfs config
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=fuse-overlayfs -o lowerdir="$BASE_CONFIG:$CHANGESET",upperdir="$UPPER_DIR",workdir="$WORKDIR" "$MOUNT_POINT"
|
||||
ExecStop=/usr/bin/fusermount -u ~/.$MOUNT_POINT
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
|
||||
mkdir -p "$WORKDIR"
|
||||
|
||||
fuse-overlayfs -o lowerdir="$BASE_CONFIG:$CHANGESET",upperdir="$UPPER_DIR",workdir="$WORKDIR" "$MOUNT_POINT"
|
||||
|
||||
echo "Mounted $MOUNT_POINT with changeset '$SELECTED'"
|
||||
echo "Run 'systemctl --user enable --now $SVC_NAME' to automount this config"
|
Loading…
Add table
Reference in a new issue