initial commit

This commit is contained in:
Rowan 2025-03-07 10:36:35 -06:00
commit cb12852924

68
configctl Executable file
View 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"