jaxvanyang / dotbackup

YAML config based backup utility.

Home Page:https://pypi.org/project/dotbackup

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dotbackup

PyPI - Python Version PyPI - Version PyPI - Downloads AUR version

Code style: black Lint: flake8 Imports: isort Test: pytest Codecov

YAML config based backup utility. Easy to use yet flexible. With a primary focus on dotfile backup & setup, but not limited to dotfiles.

Features

  • Simple configuration.
  • Custom hooks.

Installation

You can download the script and place it to somewhere you like:

curl -L -o ~/.local/bin/dotbackup \
    "https://github.com/jaxvanyang/dotbackup/raw/main/src/dotbackup.py"
chmod +x ~/.local/bin/dotbackup

Or you can install from one of these package managers:

Configuration

The default configuration file path is ~/.config/dotbackup/dotbackup.yml, however you can use the -c option to specify another configuration file. Configuration files use YAML syntax. If you are new to YAML and want to learn more, see Learn yaml in Y Minutes. If you want a quick start, you can take this as an example. Following are the configuration keyword definitions, undefined keywords are ignored (maybe I'll write a validator someday).

backup_dir

Required. The directory where backup files be stored.

Example:

backup_dir: ~/dotfiles

clean

Optional. Whether to do clean backup/setup, i.e., delete target files before backup or setup. The default is false. This may be overridden by the command line option --clean.

Example:

clean: true

ignore

Optional. The global ignored file patterns. Files that matches these patterns will be ignored in backup and setup. But files which are directly specified in apps.<app>.files will not be ignored.

Example:

apps:
  nvim:
    files: [~/.config/nvim]
ignore: ['.git']

apps.<app>.files

Optional. The files to be backed up of the application <app>, <app> can be any string. File paths MUST be under the $HOME directory due to implementation. You can use custom hooks to back up other files.

Example:

apps:
  nvim:
    files:
      - ~/.config/nvim/init.lua
      - ~/.config/nvim/lua

apps.<app>.ignore

Optional. The Application ignored file patterns. Files that matches these patterns will be ignored in backup and setup. But files which are directly specified in apps.<app>.files will not be ignored.

Example:

apps:
  nvim:
    files: [~/.config/nvim]
    ignore: ['*.json']

apps.<app>.<pre_backup|post_backup|pre_setup|post_setup>

Optional. The hooks to be executed before/after <app> backup/setup, <app> can be any string. Each hook accept a list of commands, command are passed to sh -c. You can use these hooks to do advance operation.

Example:

FIXME: defining BACKUP_DIR is not implemented yet.

apps:
  dotbackup:
    pre_backup:
      - cp /etc/dotbackup/dotbackup.yml "$BACKUP_DIR/dotbackup/dotbackup.yml"
    post_backup:
      - cd "$BACKUP_DIR" && git add dotbackup
    pre_setup:
      - pip install --user dotbackup || true
    post_setup:
      - sudo cp "$BACKUP_DIR/dotbackup/dotbackup.yml" /etc/dotbackup/dotbackup.yml

<pre_backup|post_backup|pre_setup|post_setup>

Optional. The hooks to be executed before/after all backup/setup. Each hook accept a list of commands, command are passed to sh -c. You can use these hooks to do advance operation.

Example:

FIXME: defining BACKUP_DIR is not implemented yet.

pre_backup:
  - date > "$BACKUP_DIR/backup_date.txt"
post_backup:
  - |
    cd "$BACKUP_DIR"
    git add backup_date.txt
    git commit -m "update backups"
    git push
pre_setup:
  - cd "$BACKUP_DIR" && git pull
post_setup:
  - paru -Syu base-devel

Usage

Some examples:

dotbackup nvim tmux
dotbackup backup nvim tmux
dotbackup setup nvim tmux
dotbackup setup

Run dotbackup -h for more information.

About

YAML config based backup utility.

https://pypi.org/project/dotbackup

License:MIT License


Languages

Language:Python 100.0%