Compare commits

..

No commits in common. "master" and "0.19" have entirely different histories.
master ... 0.19

172 changed files with 5998 additions and 8851 deletions

@ -1,6 +0,0 @@
*
!**/*.go
!build
!cmd
!internal
!go.*

1
.gitattributes vendored

@ -1 +0,0 @@
*.afdesign filter=lfs diff=lfs merge=lfs -text

@ -1,21 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Environment**
- OS: [e.g. iOS]
- Version: [e.g. 22]
**Additional context**
<!-- Add any other context about the problem here. -->

@ -1,4 +0,0 @@
contact_links:
- name: Questions & Help
url: https://github.com/cupcakearmy/autorestic/discussions
about: Please ask and answer questions here.

@ -1,14 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->

@ -1,8 +0,0 @@
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"

BIN
.github/logo.afdesign (Stored with Git LFS) vendored

Binary file not shown.

@ -1,51 +0,0 @@
name: Main
on:
push:
tags:
- 'v*.*.*'
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Docker Labels
id: meta
uses: crazy-max/ghaction-docker-meta@v4
with:
images: cupcakearmy/autorestic
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
with:
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '^1.21'
- name: Build
run: go run build/build.go
- name: Release
uses: softprops/action-gh-release@v1
with:
files: dist/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

@ -1,24 +0,0 @@
name: CI
on:
pull_request:
push:
branches: [master]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '^1.21'
- run: go test -v ./...
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '^1.21'
- run: go build -v .

22
.gitignore vendored

@ -2,11 +2,21 @@
.idea
.vscode
# Config
.autorestic*
# Node
node_modules/
# Build & Dev
test
autorestic
# Build & Runtime
bin
lib
data
dist
restore
docker
Dockerfile
# Config
.autorestic.yml
.autorestic.lock
.docker.yml
# Docs
.codedoc

4
.prettierrc.yml Normal file

@ -0,0 +1,4 @@
semi: false
singleQuote: true
trailingComma: 'es5'
printWidth: 150

@ -1,282 +1,4 @@
# Changelog
## 0.17
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.7.4] - 2023-01-18
### Fixed
- Transformer for extracting information. @11mariom
### Changed
- Bump docker restic version.
- Docs dependencies updated.
## [1.7.1] - 2022-04-27
### Fixed
- #178 Lean flag not working properly.
## [1.7.0] - 2022-04-27
### Changed
- #147 Stream output instead of buffering.
### Fixed
- #184 duplicate global options.
- #154 add docs for migration.
- #182 fix bug with upgrading custom restic with custom path.
## [1.6.2] - 2022-04-14
### Fixed
- Version bump in code.
## [1.6.1] - 2022-04-14
### Fixed
- Bump go version in docker file to 18.
## [1.6.0] - 2022-04-14
### Added
- support for copy command #145
- partial restore with `--include`, `--exclude`, `--iinclude`, `--iexclude` flags #161
- run forget automatically after backup #158
- exit codes to hooks as env variable #142
### Fixed
- Lean flag not removing all output #178
## [1.5.8] - 2022-03-18
### Fixed
- Better error handling for bad config files.
## [1.5.7] - 2022-03-11
### Added
- SSH in docker image. @fariszr
### Security
- Updated dependencies
## [1.5.6] - 2022-03-10
### Fixed
- Add bash in docker image for hooks. @fariszr
## [1.5.5] - 2022-02-16
### Changed
- Go version was updated from `1.16` to `1.17`
### Fixed
- Home directory was not being taken into account for loading configs.
## [1.5.4] - 2022-02-16
### Fixed
- Lean flag not omitting all output.
## [1.5.3] - 2022-02-16
### Fixed
- Error throwing not finding config even it's not being used.
## [1.5.2] - 2022-02-13
### Fixed
- Config loading @jjromannet
- Making a backup of the file @jjromannet
## [1.5.1] - 2021-12-06
### Changed
- use official docker image instead of installing rclone every time docker is used.
- docker docs
### Fixed
- lock file not always next to the config file.
- update / install bugs.
- lock docker image tag to the current autorestic version
- better error logging
## [1.5.0] - 2021-11-20
### Added
- Support for multiple paths.
- Improved error handling.
- Allow for specific snapshot to be restored.
- Docker image.
### Fixed
- rclone in docker volumes.
### Changed
- [Breaking Change] Declaration of docker volumes. See: https://autorestic.vercel.app/migration/1.4_1.5.
- [Breaking Change] Hooks default executing directory now defaults to the config file directory. See: https://autorestic.vercel.app/migration/1.4_1.5.
## [1.4.1] - 2021-10-31
### Fixed
- Numeric values from config files not being passed to env.
## [1.4.0] - 2021-10-30
### Added
- Allow specify to specify a backend for location backup.
- Global restic flags.
- Generic ENV support for backends.
### Changed
- Install now only requires `wget`.
- Env variable for the `KEY` has been renamed from `AUTORESTIC_[BACKEND NAME]_KEY` -> `AUTORESTIC_[BACKEND NAME]_RESTIC_PASSWORD`.
### Fixed
- Error handling during upgrade & uninstall.
## [1.3.0] - 2021-10-26
### Added
- Pass restic backup metadata as ENV to hooks.
- Support for `XDG_CONFIG_HOME` and `${HOME}/.config` as default locations for `.autorestic.yaml` file.
- Binary restic flags are now supported.
- Pass encryption keys from env variables or files.
## [1.2.0] - 2021-08-05
### Added
- Community page
- Support for yaml references and aliases.
### Fixed
- Better verbose output for hooks.
- Better error message for bad formatted configs.
## [1.1.2] - 2021-07-11
### Fixes
Don't check all backend when running `forget` or `exec` commands.
## [1.1.1] - 2021-05-17
### Added
- Options for backends.
## [1.1.0] - 2021-05-06
### Added
- use custom restic binary.
- success & failure hooks.
### Fixed
- don't skip other locations on failure.
## [1.0.9] - 2021-05-01
### Fixed
- Validation for docker volumes.
## [1.0.8] - 2021-04-28
### Added
- `--lean` flag to cron command for less output about skipping backups.
### Fixed
- consistent lower casing in usage descriptions.
## [1.0.7] - 2021-04-26
### Added
- Support for `darwin/arm64` aka Apple Silicon.
- Added support for `arm64` and `aarch64` in install scripts.
## [1.0.6] - 2021-04-24
### Added
- Support for rclone.
## [1.0.5] - 2021-04-24
### Fixed
- Correct exit code on backup failure and better logging/output/feedback.
- Check if `from` key is an actual directory.
## [1.0.4] - 2021-04-23
### Added
- Options to add rest username and password in config.
### Fixed
- Don't add empty strings when saving config.
## [1.0.3] - 2021-04-20
### Fixed
- Auto upgrade script was not working on linux as linux does not support writing to the binary that is being executed.
## [1.0.2] - 2021-04-20
### Added
- Add the `cron` tag to backup to backups made with cron.
### Fixed
- Don't unlock lockfile if process is already running.
## [1.0.1] - 2021-04-17
### Added
- Completion command for various shells.
## [1.0.0] - 2021-04-17
- Rewrite in go. See https://autorestic.vercel.app/upgrade for migration.
- new docs
- cron command

@ -1,30 +0,0 @@
# Development
## Coding
The easiest way (imo) is to run [`gowatch`](https://github.com/silenceper/gowatch) in a separate terminal and the simply run `./autorestic ...`. `gowatch` will watch the code and automatically rebuild the binary when changes are saved to disk.
## Building
```bash
go run build/build.go
```
This will build and compress binaries for multiple platforms. The output will be put in the `dist` folder.
## Releasing
Releases are automatically built by the github workflow and uploaded to the release.
1. Bump `VERSION` in `internal/config.go`.
2. Update `CHANGELOG.md`
3. Commit to master
4. Create a new release with the `v1.2.3` tag and mark as pre-release.
5. The Github action will build the binaries, upload and mark the release as ready when done.
### Brew
1. Download the latest release.
2. Check the checksum with `shasum -a 256 autorestic-1.2.3.tar.gz`
3. Update `url` and `sha256` in the brew repo.
4. Submit PR

@ -1,13 +0,0 @@
FROM golang:1.24-alpine as builder
WORKDIR /app
COPY go.* .
RUN go mod download
COPY . .
RUN go build
FROM restic/restic:0.17.3
RUN apk add --no-cache rclone bash curl docker-cli
COPY --from=builder /app/autorestic /usr/bin/autorestic
ENTRYPOINT []
CMD [ "autorestic" ]

215
LICENSE

@ -1,202 +1,21 @@
MIT License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Copyright (c) 2019 Nicco
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
1. Definitions.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -2,49 +2,20 @@
<br>
<br>
<br>
<img align="center" src="https://github.com/cupcakearmy/autorestic/raw/master/.github/logo.png" height="50" alt="autorestic logo">
<img align="center" src="https://github.com/cupcakearmy/autorestic/raw/master/docs/assets/logo.png" height="50" alt="autorestic logo">
<br>
<br>
<p align="center">
Config driven, easy backup cli for <a href="https://restic.net/">restic</a>.
<br>
<strong><a href="https://autorestic.vercel.app/">»»» Docs & Getting Started »»»</a></strong>
<br><br>
<a target="_blank" href="https://discord.gg/wS7RpYTYd2">
<img src="https://img.shields.io/discord/252403122348097536" alt="discord badge" />
<img src="https://img.shields.io/github/contributors/cupcakearmy/autorestic" alt="contributor badge" />
<img src="https://img.shields.io/github/downloads/cupcakearmy/autorestic/total" alt="downloads badge" />
<img src="https://img.shields.io/github/v/release/cupcakearmy/autorestic" alt="version badge" />
</a>
<strong><a href="https://cupcakearmy.github.io/autorestic/">»»» Docs & Getting Started »»»</a></strong>
</p>
</p>
<br>
<br>
### 💭 Why / What?
### Why / What?
Autorestic is a wrapper around the amazing [restic](https://restic.net/). While being amazing the restic cli can be a bit overwhelming and difficult to manage if you have many different locations that you want to backup to multiple locations. This utility is aimed at making this easier 🙂.
### 🌈 Features
- YAML config files, no CLI
- Incremental -> Minimal space is used
- Backup locations to multiple backends
- Snapshot policies and pruning
- Fully encrypted
- Before/after backup hooks
- Exclude pattern/files
- Cron jobs for automatic backup
- Backup & Restore docker volume
- Generated completions for `[bash|zsh|fish|powershell]`
### ❓ Questions / Support
Check the [discussions page](https://github.com/cupcakearmy/autorestic/discussions) or [join on discord](https://discord.gg/wS7RpYTYd2)
## Contributing / Developing
PRs, feature requests, etc. are welcomed :)
Have a look at [the dev docs](./DEVELOPMENT.md)
Autorestic is a wrapper around the amazing [restic](https://restic.net/). While being amazing the restic cli can be a bit overwhelming and difficult to manage if you have many different location that you want to backup to multiple locations. This utility is aimed at making this easier 🙂

9
RELEASE.md Normal file

@ -0,0 +1,9 @@
# Releasing
Releases are handled by the CD server with includes checksums for each binary.
```bash
git tag 0.x
git push
git push origin --tags
```

@ -1,132 +0,0 @@
// Heavily inspired (copied) by the restic build file
// https://github.com/restic/restic/blob/aa0faa8c7d7800b6ba7b11164fa2d3683f7f78aa/helpers/build-release-binaries/main.go#L225
package main
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"fmt"
"io/ioutil"
"os"
"os/exec"
"path"
"path/filepath"
"sync"
"github.com/cupcakearmy/autorestic/internal"
)
var DIR, _ = filepath.Abs("./dist")
var targets = map[string][]string{
// "aix": {"ppc64"}, // Not supported by fsnotify
"darwin": {"amd64", "arm64"},
"freebsd": {"386", "amd64", "arm"},
"linux": {"386", "amd64", "arm", "arm64", "ppc64le", "mips", "mipsle", "mips64", "mips64le", "s390x"},
"netbsd": {"386", "amd64"},
"openbsd": {"386", "amd64"},
// "windows": {"386", "amd64"}, // Not supported by autorestic
"solaris": {"amd64"},
}
type buildOptions struct {
Target, Arch, Version string
}
const (
CHECKSUM_MD5 = "MD5SUMS"
CHECKSUM_SHA_1 = "SHA1SUMS"
CHECKSUM_SHA_256 = "SHA256SUMS"
)
type Checksums struct {
filename, md5, sha1, sha256 string
}
func writeChecksums(checksums *[]Checksums) {
FILE_MD5, _ := os.OpenFile(path.Join(DIR, CHECKSUM_MD5), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
defer FILE_MD5.Close()
FILE_SHA1, _ := os.OpenFile(path.Join(DIR, CHECKSUM_SHA_1), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
defer FILE_SHA1.Close()
FILE_SHA256, _ := os.OpenFile(path.Join(DIR, CHECKSUM_SHA_256), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
defer FILE_SHA256.Close()
for _, checksum := range *checksums {
fmt.Fprintf(FILE_MD5, "%s %s\n", checksum.md5, checksum.filename)
fmt.Fprintf(FILE_SHA1, "%s %s\n", checksum.sha1, checksum.filename)
fmt.Fprintf(FILE_SHA256, "%s %s\n", checksum.sha256, checksum.filename)
}
}
func build(options buildOptions, wg *sync.WaitGroup, checksums *[]Checksums) {
defer wg.Done()
fmt.Printf("Building: %s %s\n", options.Target, options.Arch)
out := fmt.Sprintf("autorestic_%s_%s_%s", options.Version, options.Target, options.Arch)
out = path.Join(DIR, out)
// Build
{
c := exec.Command("go", "build", "-o", out, "./main.go")
c.Stdout = os.Stdout
c.Stderr = os.Stderr
c.Env = append(os.Environ(),
"CGO_ENABLED=0",
"GOOS="+options.Target,
"GOARCH="+options.Arch,
)
err := c.Run()
if err != nil {
panic(err)
}
}
// Compress
{
c := exec.Command("bzip2", out)
c.Dir = DIR
c.Stdout = os.Stdout
c.Stderr = os.Stderr
err := c.Run()
if err != nil {
panic(err)
}
}
// Checksum
{
file := out + ".bz2"
content, _ := ioutil.ReadFile(file)
*checksums = append(*checksums, Checksums{
filename: path.Base(file),
md5: fmt.Sprintf("%x", md5.Sum(content)),
sha1: fmt.Sprintf("%x", sha1.Sum(content)),
sha256: fmt.Sprintf("%x", sha256.Sum256(content)),
})
}
fmt.Printf("Built: %s\n", path.Base(out))
}
func main() {
os.RemoveAll(DIR)
v := internal.VERSION
checksums := []Checksums{}
// Build async
var wg sync.WaitGroup
for target, archs := range targets {
for _, arch := range archs {
wg.Add(1)
go build(buildOptions{
Target: target,
Arch: arch,
Version: v,
}, &wg, &checksums)
}
}
wg.Wait()
writeChecksums(&checksums)
}

@ -1,50 +0,0 @@
package cmd
import (
"fmt"
"strings"
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var backupCmd = &cobra.Command{
Use: "backup",
Short: "Create backups for given locations",
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
dry, _ := cmd.Flags().GetBool("dry-run")
selected, err := internal.GetAllOrSelected(cmd, false)
CheckErr(err)
errors := 0
for _, name := range selected {
var splitted = strings.Split(name, "@")
var specificBackend = ""
if len(splitted) > 1 {
specificBackend = splitted[1]
}
location, _ := internal.GetLocation(splitted[0])
errs := location.Backup(false, dry, specificBackend)
for _, err := range errs {
colors.Error.Printf("%s\n\n", err)
errors++
}
}
if errors > 0 {
CheckErr(fmt.Errorf("%d errors were found", errors))
}
},
}
func init() {
rootCmd.AddCommand(backupCmd)
internal.AddFlagsToCommand(backupCmd, false)
backupCmd.Flags().Bool("dry-run", false, "do not write changes, show what would be affected")
}

@ -1,27 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var checkCmd = &cobra.Command{
Use: "check",
Short: "Check if everything is setup",
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
CheckErr(internal.CheckConfig())
colors.Success.Println("Everything is fine.")
},
}
func init() {
rootCmd.AddCommand(checkCmd)
}

@ -1,70 +0,0 @@
package cmd
import (
"os"
"github.com/spf13/cobra"
)
var completionCmd = &cobra.Command{
Use: "completion [bash|zsh|fish|powershell]",
Short: "Generate completion script",
Long: `To load completions:
Bash:
$ source <(autorestic completion bash)
# To load completions for each session, execute once:
# Linux:
$ autorestic completion bash > /etc/bash_completion.d/autorestic
# macOS:
$ autorestic completion bash > /usr/local/etc/bash_completion.d/autorestic
Zsh:
# If shell completion is not already enabled in your environment,
# you will need to enable it. You can execute the following once:
$ echo "autoload -U compinit; compinit" >> ~/.zshrc
# To load completions for each session, execute once:
$ autorestic completion zsh > "${fpath[1]}/_autorestic"
# You will need to start a new shell for this setup to take effect.
fish:
$ autorestic completion fish | source
# To load completions for each session, execute once:
$ autorestic completion fish > ~/.config/fish/completions/autorestic.fish
PowerShell:
PS> autorestic completion powershell | Out-String | Invoke-Expression
# To load completions for every new session, run:
PS> autorestic completion powershell > autorestic.ps1
# and source this file from your PowerShell profile.
`,
DisableFlagsInUseLine: true,
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
Args: cobra.ExactValidArgs(1),
Run: func(cmd *cobra.Command, args []string) {
switch args[0] {
case "bash":
cmd.Root().GenBashCompletion(os.Stdout)
case "zsh":
cmd.Root().GenZshCompletion(os.Stdout)
case "fish":
cmd.Root().GenFishCompletion(os.Stdout, true)
case "powershell":
cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
}
},
}
func init() {
rootCmd.AddCommand(completionCmd)
}

@ -1,28 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/flags"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var cronCmd = &cobra.Command{
Use: "cron",
Short: "Run cron job for automated backups",
Long: `Intended to be mainly triggered by an automated system like systemd or crontab. For each location checks if a cron backup is due and runs it.`,
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
err = internal.RunCron()
CheckErr(err)
},
}
func init() {
rootCmd.AddCommand(cronCmd)
cronCmd.Flags().BoolVar(&flags.CRON_LEAN, "lean", false, "only output information about actual backups")
}

@ -1,47 +0,0 @@
package cmd
import (
"fmt"
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var execCmd = &cobra.Command{
Use: "exec",
Short: "Execute arbitrary native restic commands for given backends",
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
selected, err := internal.GetAllOrSelected(cmd, true)
CheckErr(err)
var errors []error
for _, name := range selected {
colors.PrimaryPrint(" Executing on \"%s\" ", name)
backend, _ := internal.GetBackend(name)
err := backend.Exec(args)
if err != nil {
errors = append(errors, err)
}
}
if len(errors) > 0 {
for _, err := range errors {
colors.Error.Printf("%s\n\n", err)
}
CheckErr(fmt.Errorf("%d errors were found", len(errors)))
}
},
}
func init() {
rootCmd.AddCommand(execCmd)
internal.AddFlagsToCommand(execCmd, true)
}

@ -1,35 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var forgetCmd = &cobra.Command{
Use: "forget",
Short: "Forget and optionally prune snapshots according the specified policies",
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
selected, err := internal.GetAllOrSelected(cmd, false)
CheckErr(err)
prune, _ := cmd.Flags().GetBool("prune")
dry, _ := cmd.Flags().GetBool("dry-run")
for _, name := range selected {
location, _ := internal.GetLocation(name)
err := location.Forget(prune, dry)
CheckErr(err)
}
},
}
func init() {
rootCmd.AddCommand(forgetCmd)
internal.AddFlagsToCommand(forgetCmd, false)
forgetCmd.Flags().Bool("prune", false, "also prune repository")
forgetCmd.Flags().Bool("dry-run", false, "do not write changes, show what would be affected")
}

@ -1,18 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal"
"github.com/spf13/cobra"
)
var infoCmd = &cobra.Command{
Use: "info",
Short: "Show info about the config",
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig().Describe()
},
}
func init() {
rootCmd.AddCommand(infoCmd)
}

@ -1,19 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal/bins"
"github.com/spf13/cobra"
)
var installCmd = &cobra.Command{
Use: "install",
Short: "Install restic if missing",
Run: func(cmd *cobra.Command, args []string) {
err := bins.InstallRestic()
CheckErr(err)
},
}
func init() {
rootCmd.AddCommand(installCmd)
}

@ -1,63 +0,0 @@
package cmd
import (
"fmt"
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var restoreCmd = &cobra.Command{
Use: "restore [snapshot id]",
Short: "Restore backup for location",
Args: cobra.MaximumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
location, _ := cmd.Flags().GetString("location")
l, ok := internal.GetLocation(location)
if !ok {
CheckErr(fmt.Errorf("invalid location \"%s\"", location))
}
target, _ := cmd.Flags().GetString("to")
from, _ := cmd.Flags().GetString("from")
force, _ := cmd.Flags().GetBool("force")
snapshot := ""
if len(args) > 0 {
snapshot = args[0]
}
// Get optional flags
optional := []string{}
for _, flag := range []string{"include", "exclude", "iinclude", "iexclude"} {
values, err := cmd.Flags().GetStringSlice(flag)
if err == nil {
for _, value := range values {
optional = append(optional, "--"+flag, value)
}
}
}
err = l.Restore(target, from, force, snapshot, optional)
CheckErr(err)
},
}
func init() {
rootCmd.AddCommand(restoreCmd)
restoreCmd.Flags().BoolP("force", "f", false, "Force, target folder will be overwritten")
restoreCmd.Flags().String("from", "", "Which backend to use")
restoreCmd.Flags().String("to", "", "Where to restore the data")
restoreCmd.Flags().StringP("location", "l", "", "Location to be restored")
restoreCmd.MarkFlagRequired("location")
// Passed on flags
restoreCmd.Flags().StringSliceP("include", "i", []string{}, "Include a pattern")
restoreCmd.Flags().StringSliceP("exclude", "e", []string{}, "Exclude a pattern")
restoreCmd.Flags().StringSlice("iinclude", []string{}, "Include a pattern, case insensitive")
restoreCmd.Flags().StringSlice("iexclude", []string{}, "Exclude a pattern, case insensitive")
}

@ -1,92 +0,0 @@
package cmd
import (
"os"
"path/filepath"
"strings"
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/flags"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
func CheckErr(err error) {
if err != nil {
colors.Error.Fprintln(os.Stderr, "Error:", err)
lock.Unlock()
os.Exit(1)
}
}
var cfgFile string
var rootCmd = &cobra.Command{
Version: internal.VERSION,
Use: "autorestic",
Short: "CLI Wrapper for restic",
Long: "Documentation:\thttps://autorestic.vercel.app\nSupport:\thttps://discord.gg/wS7RpYTYd2",
}
func Execute() {
CheckErr(rootCmd.Execute())
}
func init() {
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file (default is $HOME/.autorestic.yml or ./.autorestic.yml)")
rootCmd.PersistentFlags().BoolVar(&flags.CI, "ci", false, "CI mode disabled interactive mode and colors and enables verbosity")
rootCmd.PersistentFlags().BoolVarP(&flags.VERBOSE, "verbose", "v", false, "verbose mode")
rootCmd.PersistentFlags().StringVar(&flags.RESTIC_BIN, "restic-bin", "restic", "specify custom restic binary")
rootCmd.PersistentFlags().StringVar(&flags.DOCKER_IMAGE, "docker-image", "cupcakearmy/autorestic:"+internal.VERSION, "specify a custom docker image")
cobra.OnInitialize(initConfig)
}
func initConfig() {
if ci, _ := rootCmd.Flags().GetBool("ci"); ci {
colors.DisableColors(true)
flags.VERBOSE = true
}
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
viper.AutomaticEnv()
if viper.ConfigFileUsed() == "" {
colors.Error.Printf("cannot read config file %s\n", cfgFile)
os.Exit(1)
}
} else {
configPaths := getConfigPaths()
for _, cfgPath := range configPaths {
viper.AddConfigPath(cfgPath)
}
if flags.VERBOSE {
colors.Faint.Printf("Using config paths: %s\n", strings.Join(configPaths, " "))
}
cfgFileName := ".autorestic"
viper.SetConfigName(cfgFileName)
viper.AutomaticEnv()
}
}
func getConfigPaths() []string {
result := []string{"."}
if home, err := homedir.Dir(); err == nil {
result = append(result, home)
}
{
xdgConfigHome, found := os.LookupEnv("XDG_CONFIG_HOME")
if !found {
if home, err := homedir.Dir(); err == nil {
xdgConfigHome = filepath.Join(home, ".config")
}
}
xdgConfig := filepath.Join(xdgConfigHome, "autorestic")
result = append(result, xdgConfig)
}
return result
}

@ -1,36 +0,0 @@
package cmd
import (
"github.com/mitchellh/go-homedir"
"os"
"path/filepath"
"slices"
"testing"
)
const xdgConfigHome = "XDG_CONFIG_HOME"
func assertContains(t *testing.T, array []string, element string) {
if !slices.Contains(array, element) {
t.Errorf("Expected %s to be contained in %s", element, array)
}
}
func TestConfigResolving(t *testing.T) {
t.Run("~/.config/autorestic is used if XDG_CONFIG_HOME is not set", func(t *testing.T) {
// Override env using testing so that env gets restored after test
t.Setenv(xdgConfigHome, "")
_ = os.Unsetenv("XDG_CONFIG_HOME")
configPaths := getConfigPaths()
homeDir, _ := homedir.Dir()
expectedConfigPath := filepath.Join(homeDir, ".config/autorestic")
assertContains(t, configPaths, expectedConfigPath)
})
t.Run("XDG_CONFIG_HOME is respected if set", func(t *testing.T) {
t.Setenv(xdgConfigHome, "/foo/bar")
configPaths := getConfigPaths()
assertContains(t, configPaths, filepath.Join("/", "foo", "bar", "autorestic"))
})
}

@ -1,20 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal/bins"
"github.com/spf13/cobra"
)
var uninstallCmd = &cobra.Command{
Use: "uninstall",
Short: "Uninstall restic and autorestic",
Run: func(cmd *cobra.Command, args []string) {
restic, _ := cmd.Flags().GetBool("restic")
bins.Uninstall(restic)
},
}
func init() {
rootCmd.AddCommand(uninstallCmd)
uninstallCmd.Flags().Bool("restic", false, "also uninstall restic.")
}

@ -1,81 +0,0 @@
package cmd
import (
"bytes"
"fmt"
"os"
"os/exec"
"strings"
"github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra"
)
var unlockCmd = &cobra.Command{
Use: "unlock",
Short: "Unlock autorestic only if you are sure that no other instance is running",
Long: `Unlock autorestic only if you are sure that no other instance is running.
To check you can run "ps aux | grep autorestic".`,
Run: func(cmd *cobra.Command, args []string) {
internal.GetConfig()
force, _ := cmd.Flags().GetBool("force")
if !force && isAutoresticRunning() {
colors.Error.Print("Another autorestic instance is running. Are you sure you want to unlock? (yes/no): ")
var response string
fmt.Scanln(&response)
if strings.ToLower(response) != "yes" {
colors.Primary.Println("Unlocking aborted.")
return
}
}
err := lock.Unlock()
if err != nil {
colors.Error.Println("Could not unlock:", err)
return
}
colors.Success.Println("Unlock successful")
},
}
func init() {
rootCmd.AddCommand(unlockCmd)
unlockCmd.Flags().Bool("force", false, "force unlock")
}
// isAutoresticRunning checks if autorestic is running
// and returns true if it is.
// It also prints the processes to stdout.
func isAutoresticRunning() bool {
cmd := exec.Command("sh", "-c", "ps aux | grep autorestic")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
return false
}
lines := strings.Split(out.String(), "\n")
autoresticProcesses := []string{}
currentPid := fmt.Sprint(os.Getpid())
for _, line := range lines {
if strings.Contains(line, "autorestic") && !strings.Contains(line, "grep autorestic") && !strings.Contains(line, currentPid) {
autoresticProcesses = append(autoresticProcesses, line)
}
}
if len(autoresticProcesses) > 0 {
colors.Faint.Println("Found autorestic processes:")
for _, proc := range autoresticProcesses {
colors.Faint.Println(proc)
}
return true
}
return false
}

@ -1,21 +0,0 @@
package cmd
import (
"github.com/cupcakearmy/autorestic/internal/bins"
"github.com/spf13/cobra"
)
var upgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "Upgrade autorestic and restic",
Run: func(cmd *cobra.Command, args []string) {
restic, _ := cmd.Flags().GetBool("restic")
err := bins.Upgrade(restic)
CheckErr(err)
},
}
func init() {
rootCmd.AddCommand(upgradeCmd)
upgradeCmd.Flags().Bool("restic", true, "also update restic")
}

2
docs/.gitignore vendored

@ -1,2 +0,0 @@
node_modules
.next

@ -1 +0,0 @@
v22.7.0

Before

(image error) Size: 18 KiB

After

(image error) Size: 18 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

62
docs/cli/backup.html Normal file

File diff suppressed because one or more lines are too long

62
docs/cli/check.html Normal file

File diff suppressed because one or more lines are too long

62
docs/cli/cron.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | Cron</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="cron" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Cron</h1><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic cron"><span class="lineCounter-0-0-4 prim">1</span>autorestic <span class="token function">cron</span></div><br></code></pre><p>This command is modtly intended to be triggered by an automated system like systemd or crontab.</p><p>It will run cron jobs es <a href="/autorestic/locations/cron">specified in the cron section</a> of a specific location.</p><script id="NIzgLSonPW">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("NIzgLSonPW", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#cron" class="h1" data-content-highlight="cron">Cron</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="WUudodXFWf">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("WUudodXFWf", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="xipzCGgdCX">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("xipzCGgdCX", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="uyBFoNCwrM">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("uyBFoNCwrM", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="hFkUnUJjHn">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("hFkUnUJjHn", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="ygknMxLaJe">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("ygknMxLaJe", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="PyeIyrytSi">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("PyeIyrytSi", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="ZmZnjEqPim">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("ZmZnjEqPim", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/cli/exec.html Normal file

File diff suppressed because one or more lines are too long

62
docs/cli/forget.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | Forget</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="forget" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Forget</h1><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic forget [-l, --location] [-a, --all] [--dry-run]"><span class="lineCounter-0-0-4 prim">1</span>autorestic forget <span class="token punctuation">[</span>-l, --location<span class="token punctuation">]</span> <span class="token punctuation">[</span>-a, --all<span class="token punctuation">]</span> <span class="token punctuation">[</span>--dry-run<span class="token punctuation">]</span></div><br></code></pre><p>This will prune and remove old data form the backends according to the <a href="/autorestic/locations/forget">keep policy you have specified for the location</a></p><p>The <code>--dry-run</code> flag will do a dry run showing what would have been deleted, but won't touch the actual data.</p><script id="BckqdDYPcb">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("BckqdDYPcb", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#forget" class="h1" data-content-highlight="forget">Forget</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="qFNhIQtkPT">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("qFNhIQtkPT", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="OghLnscFlB">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("OghLnscFlB", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="hSPlYQWGAy">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("hSPlYQWGAy", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="WyRsGFuhOz">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("WyRsGFuhOz", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="jikIjlOnoa">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("jikIjlOnoa", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="YzzEGtpcWs">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("YzzEGtpcWs", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="FCEtlpzTsX">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("FCEtlpzTsX", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

63
docs/cli/info.html Normal file

@ -0,0 +1,63 @@
<!DOCTYPE html><html><head><title>Autorestic | info</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="info" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>info</h1><p>Displays the config file that autorestic is refering to.
Usefull when you want to quickly see what locations are being backuped where.</p><p><strong>Pro tip:</strong> if it gets a bit long you can read it more easily with <code>autorestic info | less</code> 😉</p><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic info"><span class="lineCounter-0-0-4 prim">1</span>autorestic info</div><br></code></pre><h2 id="with-a-custom-file" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>With a custom file</h2><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic -c path/to/some/config.yml info"><span class="lineCounter-0-0-4 prim">1</span>autorestic -c path/to/some/config.yml info</div><br></code></pre><script id="CFBmUiVHEp">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("CFBmUiVHEp", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#info" class="h1" data-content-highlight="info">info</a><a href="#with-a-custom-file" class="h2" data-content-highlight="with-a-custom-file">With a custom file</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="PhkRmPghPq">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("PhkRmPghPq", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="zhSAJdDQnK">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("zhSAJdDQnK", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="FTztmNifGO">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("FTztmNifGO", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="hXtvdyKcgk">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("hXtvdyKcgk", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="IsQVBFCzNX">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("IsQVBFCzNX", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="nVynMmFmkb">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("nVynMmFmkb", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="bFFkDWcUPQ">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("bFFkDWcUPQ", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

@ -0,0 +1,56 @@
<!DOCTYPE html><html><head><title>Autorestic | Install</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/docs/assets/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/docs/assets/codedoc-bundle.js"></script></head><body><div class="header-0-0-5"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-4" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="install" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Install</h1><p>Installs both restic and autorestic to <code>/usr/local/bin</code>.</p><pre class=""><code class="bash code-0-0-11" tabindex="0"><span class="wmbar-0-0-14"><span></span><span></span><span></span><span></span></span><div class="line-0-0-13 " data-content="autorestic install"><span class="lineCounter-0-0-12 prim">1</span>autorestic <span class="token function">install</span></div><br></code></pre><div class="contentnav-0-0-10" data-no-search=""><a href="#install" class="h1" data-content-highlight="install">Install</a></div></div><div id="-codedoc-toc" class="toc-0-0-7"><div class="content-0-0-8"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-3 "><script id="XRGCUvVncP">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("XRGCUvVncP", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/locations/overview">Overview</a>
<a href="/autorestic/locations/types">Types</a>
<a href="/autorestic/locations/cron">Cron</a>
<a href="/autorestic/locations/hooks">Hooks</a>
<a href="/autorestic/locations/exclude">Exclude</a>
<a href="/autorestic/locations/forget">Forget Policy</a>
<a href="/autorestic/locations/advanced">Advanced Options</a></p></div></div><div class="collapse-0-0-3 "><script id="friLMtMuGC">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("friLMtMuGC", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-3 "><script id="anTYnIWqbu">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("anTYnIWqbu", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-9"><script id="jzgqiz_Esn">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("jzgqiz_Esn", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-6"><div class="left"><script id="asTmHrhSzG">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("asTmHrhSzG", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="LyCwkXYPUl">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("LyCwkXYPUl", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="mhGgCSJbMB">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("mhGgCSJbMB", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/cli/install.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | Install</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="install" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Install</h1><p>Installs both restic and autorestic to <code>/usr/local/bin</code>.</p><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic install"><span class="lineCounter-0-0-4 prim">1</span>autorestic <span class="token function">install</span></div><br></code></pre><script id="sqIBDQWpjd">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("sqIBDQWpjd", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#install" class="h1" data-content-highlight="install">Install</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="ltcYDMGnTn">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("ltcYDMGnTn", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="OPFHMlrHDo">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("OPFHMlrHDo", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="qZpZpdicSi">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("qZpZpdicSi", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="TVBvbIIxlo">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("TVBvbIIxlo", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="gqVDZjgjuE">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("gqVDZjgjuE", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="ImqAfoKfBY">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("ImqAfoKfBY", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="mqOWFWJwvy">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("mqOWFWJwvy", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/cli/restore.html Normal file

File diff suppressed because one or more lines are too long

62
docs/cli/uninstall.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | Uninstall</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="uninstall" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Uninstall</h1><p>Installs both restic and autorestic from <code>/usr/local/bin</code>.</p><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic uninstall"><span class="lineCounter-0-0-4 prim">1</span>autorestic uninstall</div><br></code></pre><script id="DMraSeF_HE">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("DMraSeF_HE", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#uninstall" class="h1" data-content-highlight="uninstall">Uninstall</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="rPIVE_JFYo">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("rPIVE_JFYo", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="fjMslZPvBo">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("fjMslZPvBo", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="itFwCHSMlL">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("itFwCHSMlL", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="JjnXwZ_gDS">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("JjnXwZ_gDS", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="COqRvCaeGa">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("COqRvCaeGa", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="NXBTJfRLyl">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("NXBTJfRLyl", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="KDgQmPmrue">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("KDgQmPmrue", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/cli/update.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | Update</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="update" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>Update</h1><p>Autorestic can update itself! Super handy right? Simply run autorestic update and we will check for you if there are updates for restic and autorestic and install them if necessary.</p><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="autorestic update"><span class="lineCounter-0-0-4 prim">1</span>autorestic update</div><br></code></pre><p>Updates both restic and autorestic automagically.</p><script id="LVSrkialiT">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("LVSrkialiT", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#update" class="h1" data-content-highlight="update">Update</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="BdbCGpBXME">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("BdbCGpBXME", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="MGQkJKZzkG">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("MGQkJKZzkG", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="ABCgoPkwWO">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("ABCgoPkwWO", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="_giuPeCwhG">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("_giuPeCwhG", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="TMcotLqYjB">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("TMcotLqYjB", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="AjyWjBSWBK">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("AjyWjBSWBK", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="RxDFXCnfoD">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("RxDFXCnfoD", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/config.html Normal file

File diff suppressed because one or more lines are too long

62
docs/contrib.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | 🙋‍♀️🙋‍♂️ Contributors</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="🙋♀️🙋♂️-contributors" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>🙋‍♀️🙋‍♂️ Contributors</h1><p>This amazing people helped the project!</p><ul><li>@ChanceM [Docs]</li><li>@EliotBerriot [Docs, Pruning, S3]</li></ul><script id="xdeMiZJktG">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("xdeMiZJktG", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#🙋♀️🙋♂️-contributors" class="h1" data-content-highlight="🙋♀️🙋♂️-contributors">🙋‍♀️🙋‍♂️ Contributors</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="RDpakToGnE">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("RDpakToGnE", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="xJcaTSFvPJ">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("xJcaTSFvPJ", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="slHEJxnjVI">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("slHEJxnjVI", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="FBCLknmhNP">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("FBCLknmhNP", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="PJOTEUFNTv">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("PJOTEUFNTv", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="USggRV_kpG">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("USggRV_kpG", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="JPNobhfmEM">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("JPNobhfmEM", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

40
docs/dist/codedoc-bundle.entry.js vendored Normal file

@ -0,0 +1,40 @@
import { getRenderer } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/renderer.js';
import { initJssCs } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/setup-jss.js';initJssCs();
import { installTheme } from '/Users/nicco/Documents/git/autorestic/.codedoc/content/theme.ts';installTheme();
import { codeSelection } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/selection.js';codeSelection();
import { sameLineLengthInCodes } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/same-line-length.js';sameLineLengthInCodes();
import { initHintBox } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/line-hint/index.js';initHintBox();
import { initCodeLineRef } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/line-ref/index.js';initCodeLineRef();
import { initSmartCopy } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/smart-copy.js';initSmartCopy();
import { copyHeadings } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/heading/copy-headings.js';copyHeadings();
import { contentNavHighlight } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/contentnav/highlight.js';contentNavHighlight();
import { loadDeferredIFrames } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/deferred-iframe.js';loadDeferredIFrames();
import { smoothLoading } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/smooth-loading.js';smoothLoading();
import { tocHighlight } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/toc-highlight.js';tocHighlight();
import { postNavSearch } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/search/post-nav/index.js';postNavSearch();
import { ToCPrevNext } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/prevnext/index.js';
import { CollapseControl } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/collapse/collapse-control.js';
import { GithubSearch } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/misc/github/search.js';
import { ToCToggle } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/toggle/index.js';
import { DarkModeSwitch } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/darkmode/index.js';
import { ConfigTransport } from '/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/config.js';
const components = {
'qcaKEY878Mn2dFQW/lSrDg==': ToCPrevNext,
'fz894w7KG2/tX4kLbbA1Kg==': CollapseControl,
'+SrlfVhZ/PRQ5WhUlZbTaA==': GithubSearch,
'XsNW3ht5ee+RmVUActEo9g==': ToCToggle,
'Y1WWvCKxkgk1yh8xbCfXqw==': DarkModeSwitch,
'v641FmLj+AeGp0uuFTI6ug==': ConfigTransport
};
const renderer = getRenderer();
const ogtransport = window.__sdh_transport;
window.__sdh_transport = function(id, hash, props) {
if (hash in components) {
const target = document.getElementById(id);
renderer.render(renderer.create(components[hash], props)).after(target);
target.remove();
}
else if (ogtransport) ogtransport(id, hash, props);
}

32
docs/dist/codedoc-bundle.js vendored Normal file

File diff suppressed because one or more lines are too long

106
docs/dist/codedoc-bundle.meta.json vendored Normal file

@ -0,0 +1,106 @@
{
"init": [
{
"name": "initJssCs",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/setup-jss.js",
"hash": "c/OJpUDX26Qm4IbMYtLbjg=="
},
{
"name": "installTheme",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/content/theme.ts",
"hash": "obU6UstdkSAvgbysOh3/eg=="
},
{
"name": "codeSelection",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/selection.js",
"hash": "4VXGhMNJRz8Eyjdvm6ntYg=="
},
{
"name": "sameLineLengthInCodes",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/same-line-length.js",
"hash": "nEpV43sODVDt+zjIO7H9+A=="
},
{
"name": "initHintBox",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/line-hint/index.js",
"hash": "9M6+/niHbbHMYKbOF0DTzg=="
},
{
"name": "initCodeLineRef",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/line-ref/index.js",
"hash": "rPwNL8eX+bbHwAgvTQ8Iag=="
},
{
"name": "initSmartCopy",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/code/smart-copy.js",
"hash": "xFnLgdNzBUv9BdaGDgvJDA=="
},
{
"name": "copyHeadings",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/heading/copy-headings.js",
"hash": "i1yTTWSH2AaFOCy2yKgs0Q=="
},
{
"name": "contentNavHighlight",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/contentnav/highlight.js",
"hash": "SpIa+6Gg/KMV7Wb4QvBzcg=="
},
{
"name": "loadDeferredIFrames",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/deferred-iframe.js",
"hash": "naHAbpxvOw4i/sUpn2LnRQ=="
},
{
"name": "smoothLoading",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/smooth-loading.js",
"hash": "vXAT5HUat2IZoc8ZEN/OKA=="
},
{
"name": "tocHighlight",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/toc-highlight.js",
"hash": "suB+mCUXKx/0sad/yURMug=="
},
{
"name": "postNavSearch",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/search/post-nav/index.js",
"hash": "/izvKWQZGCWZbwwWyiivfw=="
}
],
"components": [
{
"name": "ToCPrevNext",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/prevnext/index.js",
"hash": "qcaKEY878Mn2dFQW/lSrDg=="
},
{
"name": "CollapseControl",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/collapse/collapse-control.js",
"hash": "fz894w7KG2/tX4kLbbA1Kg=="
},
{
"name": "GithubSearch",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/misc/github/search.js",
"hash": "+SrlfVhZ/PRQ5WhUlZbTaA=="
},
{
"name": "ToCToggle",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/page/toc/toggle/index.js",
"hash": "XsNW3ht5ee+RmVUActEo9g=="
},
{
"name": "DarkModeSwitch",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/components/darkmode/index.js",
"hash": "Y1WWvCKxkgk1yh8xbCfXqw=="
},
{
"name": "ConfigTransport",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/config.js",
"hash": "v641FmLj+AeGp0uuFTI6ug=="
}
],
"renderer": {
"name": "getRenderer",
"filename": "/Users/nicco/Documents/git/autorestic/.codedoc/node_modules/@codedoc/core/dist/es6/transport/renderer.js",
"hash": "DuikI/Y5reNcodaSzsxs0w=="
}
}

871
docs/dist/codedoc-styles.css vendored Normal file

@ -0,0 +1,871 @@
.heading-0-0-1 {
cursor: pointer;
position: relative;
}
.anchor-0-0-2 {
top: 0;
left: -32px;
bottom: 0;
display: flex;
opacity: 0;
position: absolute;
transform: translateX(-8px);
transition: opacity .1s, transform .1s;
align-items: center;
padding-right: 8px;
}
.heading-0-0-1:hover .anchor-0-0-2 {
opacity: 0.5;
transform: none;
}
.heading-0-0-1:hover .anchor-0-0-2:hover {
opacity: 1;
}
.code-0-0-3 {
color: #e0e0e0;
display: block;
outline: none;
padding: 24px 0;
position: relative;
font-size: 13px;
background: #212121;
box-shadow: 0 6px 12px rgba(0, 0, 0, .25);
overflow-x: auto;
user-select: none;
border-radius: 3px;
-webkit-user-select: none;
}
pre.with-bar .code-0-0-3 {
padding-top: 0;
}
.code-0-0-3 .token.keyword {
color: #7187ff;
}
.code-0-0-3 .token.string {
color: #69f0ae;
}
.code-0-0-3 .token.number {
color: #ffc400;
}
.code-0-0-3 .token.boolean {
color: #ffc400;
}
.code-0-0-3 .token.operator {
color: #18ffff;
}
.code-0-0-3 .token.function {
color: #e0e0e0;
}
.code-0-0-3 .token.parameter {
color: #e0e0e0;
}
.code-0-0-3 .token.comment {
color: #757575;
}
.code-0-0-3 .token.tag {
color: #ffa372;
}
.code-0-0-3 .token.builtin {
color: #e0e0e0;
}
.code-0-0-3 .token.punctuation {
color: #fcf7bb;
}
.code-0-0-3 .token.class-name {
color: #e0e0e0;
}
.code-0-0-3 .token.attr-name {
color: #f6d186;
}
.code-0-0-3 .token.attr-value {
color: #69f0ae;
}
.code-0-0-3 .token.plain-text {
color: #bdbdbd;
}
.code-0-0-3 .token.script {
color: #e0e0e0;
}
.code-0-0-3 .token.placeholder {
color: #18ffff;
}
.code-0-0-3 .token.selector {
color: #ffa372;
}
.code-0-0-3 .token.property {
color: #f6d186;
}
.code-0-0-3 .token.important {
color: #be79df;
}
.code-0-0-3.scss .token.function, .code-0-0-3.css .token.function, .code-0-0-3.sass .token.function {
color: #9aceff;
}
.code-0-0-3 .token.key {
color: #f6d186;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .code-0-0-3 {
color: #e0e0e0;
background: #000000;
box-shadow: 0 6px 12px #121212;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.keyword {
color: #7187ff;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.string {
color: #69f0ae;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.number {
color: #ffc400;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.boolean {
color: #ffc400;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.operator {
color: #18ffff;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.function {
color: #e0e0e0;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.parameter {
color: #e0e0e0;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.comment {
color: #757575;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.tag {
color: #ffa372;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.builtin {
color: #e0e0e0;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.punctuation {
color: #fcf7bb;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.class-name {
color: #e0e0e0;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.attr-name {
color: #f6d186;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.attr-value {
color: #69f0ae;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.plain-text {
color: #bdbdbd;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.script {
color: #e0e0e0;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.placeholder {
color: #18ffff;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.selector {
color: #ffa372;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.property {
color: #f6d186;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.important {
color: #be79df;
}
body:not(.dark-mode-animate) .code-0-0-3.scss .token.function, body:not(.dark-mode-animate) .code-0-0-3.css .token.function, body:not(.dark-mode-animate) .code-0-0-3.sass .token.function {
color: #9aceff;
}
body:not(.dark-mode-animate) .code-0-0-3 .token.key {
color: #f6d186;
}
}
body.dark .code-0-0-3 {
color: #e0e0e0;
background: #000000;
box-shadow: 0 6px 12px #121212;
}
body.dark .code-0-0-3 .token.keyword {
color: #7187ff;
}
body.dark .code-0-0-3 .token.string {
color: #69f0ae;
}
body.dark .code-0-0-3 .token.number {
color: #ffc400;
}
body.dark .code-0-0-3 .token.boolean {
color: #ffc400;
}
body.dark .code-0-0-3 .token.operator {
color: #18ffff;
}
body.dark .code-0-0-3 .token.function {
color: #e0e0e0;
}
body.dark .code-0-0-3 .token.parameter {
color: #e0e0e0;
}
body.dark .code-0-0-3 .token.comment {
color: #757575;
}
body.dark .code-0-0-3 .token.tag {
color: #ffa372;
}
body.dark .code-0-0-3 .token.builtin {
color: #e0e0e0;
}
body.dark .code-0-0-3 .token.punctuation {
color: #fcf7bb;
}
body.dark .code-0-0-3 .token.class-name {
color: #e0e0e0;
}
body.dark .code-0-0-3 .token.attr-name {
color: #f6d186;
}
body.dark .code-0-0-3 .token.attr-value {
color: #69f0ae;
}
body.dark .code-0-0-3 .token.plain-text {
color: #bdbdbd;
}
body.dark .code-0-0-3 .token.script {
color: #e0e0e0;
}
body.dark .code-0-0-3 .token.placeholder {
color: #18ffff;
}
body.dark .code-0-0-3 .token.selector {
color: #ffa372;
}
body.dark .code-0-0-3 .token.property {
color: #f6d186;
}
body.dark .code-0-0-3 .token.important {
color: #be79df;
}
body.dark .code-0-0-3.scss .token.function, body.dark .code-0-0-3.css .token.function, body.dark .code-0-0-3.sass .token.function {
color: #9aceff;
}
body.dark .code-0-0-3 .token.key {
color: #f6d186;
}
.lineCounter-0-0-4 {
left: 0;
color: transparent;
width: 24px;
height: 1.25rem;
display: inline-flex;
position: sticky;
font-size: 10px;
background: #212121;
align-items: center;
border-right: 2px solid rgba(255, 255, 255, .015);
margin-right: 12px;
padding-right: 12px;
flex-direction: row-reverse;
vertical-align: top;
}
.lineCounter-0-0-4.prim {
color: #616161;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .lineCounter-0-0-4 {
background: #000000;
border-color: rgba(255, 255, 255, .015);
}
body:not(.dark-mode-animate) .lineCounter-0-0-4.prim {
color: #616161;
}
}
body.dark .lineCounter-0-0-4 {
background: #000000;
border-color: rgba(255, 255, 255, .015);
}
body.dark .lineCounter-0-0-4.prim {
color: #616161;
}
.line-0-0-5 {
cursor: pointer;
height: 1.25rem;
display: inline-block;
min-width: 100%;
background: transparent;
transition: opacity .15s;
}
.has-selection .line-0-0-5:not(.selected) {
opacity: 0.35;
transition: opacity 3s;
}
.line-0-0-5.highlight {
color: #ffffff;
background: rgb(40, 46, 73);
}
.line-0-0-5.selected .lineCounter-0-0-4 {
border-color: #7187ff !important;
}
.line-0-0-5:hover, .line-0-0-5.selected {
background: #3b3b3b;
}
.line-0-0-5:hover .lineCounter-0-0-4 {
border-color: rgba(255, 255, 255, .1);
}
body.dark .line-0-0-5:hover .lineCounter-0-0-4 {
border-color: rgba(255, 255, 255, .1);
}
.line-0-0-5:hover .lineCounter-0-0-4, .line-0-0-5.selected .lineCounter-0-0-4 {
color: #7187ff;
background: #3b3b3b !important;
}
body.dark .line-0-0-5:hover, body.dark .line-0-0-5.selected {
background: #1a1a1a !important;
}
body.dark .line-0-0-5:hover .lineCounter-0-0-4, body.dark .line-0-0-5.selected .lineCounter-0-0-4 {
color: #7187ff;
background: #1a1a1a !important;
}
body.dark .line-0-0-5.selected .lineCounter-0-0-4 {
border-color: #7187ff !important;
}
.line-0-0-5.highlight .lineCounter-0-0-4 {
background: rgb(40, 46, 73);
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .line-0-0-5.highlight {
color: #ffffff;
background: rgb(28, 29, 48);
}
body:not(.dark-mode-animate) .line-0-0-5.highlight .lineCounter-0-0-4 {
background: rgb(28, 29, 48);
}
}
body.dark .line-0-0-5.highlight {
color: #ffffff;
background: rgb(28, 29, 48);
}
body.dark .line-0-0-5.highlight .lineCounter-0-0-4 {
background: rgb(28, 29, 48);
}
.wmbar-0-0-6 {
left: 0;
display: none;
padding: 16px;
position: sticky;
}
.wmbar-0-0-6>span {
display: block;
opacity: 0.5;
flex-grow: 1;
font-size: 12px;
text-align: center;
font-family: sans-serif;
margin-right: 64px;
}
.wmbar-0-0-6>span:first-child, .wmbar-0-0-6>span:nth-child(2), .wmbar-0-0-6>span:nth-child(3) {
width: 8px;
height: 8px;
opacity: 1;
flex-grow: 0;
margin-right: 8px;
border-radius: 8px;
}
pre.with-bar .wmbar-0-0-6 {
display: flex;
}
.wmbar-0-0-6>span:first-child:first-child, .wmbar-0-0-6>span:nth-child(2):first-child, .wmbar-0-0-6>span:nth-child(3):first-child {
background: rgb(255, 95, 86);
}
.wmbar-0-0-6>span:first-child:nth-child(2), .wmbar-0-0-6>span:nth-child(2):nth-child(2), .wmbar-0-0-6>span:nth-child(3):nth-child(2) {
background: rgb(255, 189, 46);
}
.wmbar-0-0-6>span:first-child:nth-child(3), .wmbar-0-0-6>span:nth-child(2):nth-child(3), .wmbar-0-0-6>span:nth-child(3):nth-child(3) {
background: rgb(39, 201, 63);
}
.collapse-0-0-7>.label {
cursor: pointer;
margin: 8px 0;
display: flex;
align-items: center;
user-select: none;
}
.collapse-0-0-7>.content {
opacity: 0;
max-height: 0;
transition: opacity .3s;
visibility: hidden;
border-left: 2px solid rgba(224, 224, 224, 0.5);
padding-left: 16px;
}
.collapse-0-0-7.open>.content {
opacity: 1;
max-height: none;
visibility: visible;
}
.collapse-0-0-7.open>.label .icon-font {
transform: rotate(90deg);
}
body.dark-mode-animate .collapse-0-0-7>.content {
transition: transform .15s, opacity .15s, border-color .3s;
}
body.dark .collapse-0-0-7>.content {
border-color: rgba(49, 49, 49, 0.5);
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .collapse-0-0-7>.content {
border-color: rgba(49, 49, 49, 0.5);
}
}
.collapse-0-0-7>.label .text {
flex-grow: 1;
}
.collapse-0-0-7>.label .icon-font {
margin-right: 32px;
}
.collapse-0-0-7>.label:hover {
color: #1eb2a6;
transition: color .15s;
}
body.dark .collapse-0-0-7>.label:hover {
color: #1eb2a6;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .collapse-0-0-7>.label:hover {
color: #1eb2a6;
}
}
body.dark-mode-animate .collapse-0-0-7>.label .icon-font {
transition: transform .15s;
}
.watermark-0-0-8 {
color: #424242;
cursor: pointer;
display: inline-block;
opacity: 0.2;
font-size: 8px;
transition: opacity .15s;
text-decoration: none !important;
}
body.dark-mode-animate .watermark-0-0-8 {
transition: opacity .15s, color .3s;
}
.watermark-0-0-8:hover {
opacity: 1;
text-decoration: none;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .watermark-0-0-8 {
color: #eeeeee;
}
}
body.dark .watermark-0-0-8 {
color: #eeeeee;
}
.watermark-0-0-8 svg {
width: 2.8rem;
display: block;
margin-top: .25rem;
}
.watermark-0-0-8 svg g {
fill: #424242;
}
body.dark-mode-animate .watermark-0-0-8 svg g {
transition: fill .3s;
}
body.dark .watermark-0-0-8 svg g {
fill: #eeeeee;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .watermark-0-0-8 svg g {
fill: #eeeeee;
}
}
.header-0-0-9 {
top: 0;
right: 0;
padding: 32px;
z-index: 100;
position: fixed;
text-align: right;
}
.footer-0-0-10 {
left: 0;
right: 0;
bottom: 0;
height: 64px;
display: flex;
z-index: 102;
position: fixed;
background: rgba(245, 245, 245, 0.85);
box-shadow: 0 -2px 6px rgba(0, 0, 0, .03);
align-items: center;
backdrop-filter: blur(12px);
justify-content: center;
-webkit-backdrop-filter: blur(12px);
}
body.dark-mode-animate .footer-0-0-10 {
transition: background .3s;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .footer-0-0-10 {
background: rgba(33, 33, 33, 0.85);
}
}
body.dark .footer-0-0-10 {
background: rgba(33, 33, 33, 0.85);
}
.footer-0-0-10 .main {
overflow: hidden;
flex-grow: 1;
text-align: center;
}
.footer-0-0-10 .left {
padding-left: 32px;
}
.footer-0-0-10 .right {
padding-right: 32px;
}
@media screen and (max-width: 800px) {
.footer-0-0-10 .left {
padding-left: 16px;
}
.footer-0-0-10 .right {
padding-right: 16px;
}
}
.footer-0-0-10 .main>.inside {
display: inline-flex;
overflow: auto;
max-width: 100%;
align-items: center;
}
.footer-0-0-10 .main>.inside hr {
width: 2px;
border: none;
height: 16px;
margin: 16px;
background: #e0e0e0;
}
.footer-0-0-10 .main>.inside a {
text-decoration: none;
}
.footer-0-0-10 .main>.inside a:hover {
text-decoration: underline ;
}
body.dark-mode-animate .footer-0-0-10 .main>.inside hr {
transition: background .3s;
}
body.dark .footer-0-0-10 .main>.inside hr {
background: #313131;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .footer-0-0-10 .main>.inside hr {
background: #313131;
}
}
.toc-0-0-11 {
top: 0;
left: 0;
width: calc(50vw - 464px);
bottom: 0;
display: flex;
z-index: 101;
position: fixed;
transform: translateX(-50vw);
background: #f1f1f1;
border-right: 1px solid #e7e7e7;
flex-direction: column;
padding-bottom: 64px;
}
body.dark-mode-animate .toc-0-0-11 {
transition: background .3s, border-color .3s;
}
body.dark .toc-0-0-11 {
background: #1f1f1f;
border-color: #282828;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .toc-0-0-11 {
background: #1f1f1f;
border-color: #282828;
}
}
@media screen and (max-width: 1200px) {
.toc-0-0-11 {
width: 100vw;
transform: translateX(-110vw);
}
}
.toc-0-0-11.animated {
transition: transform .3s;
}
.toc-0-0-11.active {
transform: translateX(0);
}
.toc-0-0-11 p {
margin: 0;
}
.toc-0-0-11 a {
border: 1px solid transparent;
display: block;
padding: 8px;
margin-left: -8px;
border-right: none;
margin-right: 1px;
border-radius: 3px;
text-decoration: none;
}
body.dark-mode-animate .toc-0-0-11 a {
transition: border-color .3s, background .3s;
}
.toc-0-0-11 a:hover {
background: #f5f5f5;
text-decoration: none;
}
.toc-0-0-11 a.current {
background: #f5f5f5;
border-color: #e7e7e7;
margin-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
body.dark .toc-0-0-11 a.current {
background: hsl(0, 0%, 13.2%);
border-color: #282828;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .toc-0-0-11 a.current {
background: #212121;
border-color: #282828;
}
}
@media screen and (max-width: 1200px) {
.toc-0-0-11 a.current {
border-right: 1px solid;
margin-right: -8px;
border-radius: 3px;
}
}
body.dark .toc-0-0-11 a:hover {
background: hsl(0, 0%, 13.2%);
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .toc-0-0-11 a:hover {
background: hsl(0, 0%, 13.2%);
}
}
body.dark-mode-animate .toc-0-0-11.animated {
transition: transform .3s, background .3s, border-color .3s;
}
.content-0-0-12 {
padding: 32px;
overflow: auto;
flex-grow: 1;
margin-right: -1px;
padding-right: 0;
}
@media screen and (max-width: 1200px) {
.content-0-0-12 {
margin-right: 0;
padding-right: 32px;
}
}
.contentnav-0-0-14 {
right: 0;
width: calc(50vw - 496px);
bottom: 96px;
position: fixed;
font-size: 12px;
border-left: 1px dashed #e0e0e0;
margin-left: 64px;
padding-left: 48px;
}
@media screen and (max-width: 1200px) {
.contentnav-0-0-14 {
display: none;
}
}
.contentnav-0-0-14 a {
color: #424242;
display: block;
opacity: 0.2;
text-decoration: none;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) .contentnav-0-0-14 {
border-color: #313131;
}
body:not(.dark-mode-animate) .contentnav-0-0-14 a {
color: #eeeeee;
}
body:not(.dark-mode-animate) .contentnav-0-0-14 a:hover, body:not(.dark-mode-animate) .contentnav-0-0-14 a.active {
color: #1eb2a6;
}
}
body.dark .contentnav-0-0-14 {
border-color: #313131;
}
body.dark .contentnav-0-0-14 a {
color: #eeeeee;
}
body.dark .contentnav-0-0-14 a:hover, body.dark .contentnav-0-0-14 a.active {
color: #1eb2a6;
}
body.dark-mode-animate .contentnav-0-0-14 a {
transition: color .3s, opacity .3s;
}
.contentnav-0-0-14 a:hover, .contentnav-0-0-14 a.active {
color: #1eb2a6;
opacity: 1;
}
.contentnav-0-0-14 a.h2 {
margin-left: 12px;
}
.contentnav-0-0-14 a.h3 {
margin-left: 24px;
}
.contentnav-0-0-14 a.h4 {
margin-left: 36px;
}
.contentnav-0-0-14 a.h5 {
margin-left: 48px;
}
.contentnav-0-0-14 a.h6 {
margin-left: 60px;
}
* {
touch-action: manipulation;
scroll-behavior: smooth;
-webkit-tap-highlight-color: transparent;
}
body {
color: #424242;
width: 100vw;
margin: 0;
padding: 0;
background: #f5f5f5;
overflow-x: hidden;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
body.dark-mode-animate {
transition: color .3s, background .3s;
}
a {
color: #1eb2a6;
}
a:hover {
text-decoration: underline;
text-decoration-thickness: 2px;
}
body.dark-mode-animate a {
transition: color .3s;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) a {
color: #1eb2a6;
}
}
body.dark a {
color: #1eb2a6;
}
.container {
margin: 0 auto;
padding: 96px 16px;
max-width: 768px;
transition: opacity .15s;
}
hr {
border: none;
margin: 64px;
background: none;
border-top: 1px solid #e0e0e0;
}
body.dark-mode-animate hr {
transition: border-color .3s;
}
body.dark hr {
border-color: #313131;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) hr {
border-color: #313131;
}
}
blockquote {
color: #757575;
margin: 0;
padding: 16px 40px;
position: relative;
background: #eeeeee;
border-radius: 3px;
}
body.dark-mode-animate blockquote {
transition: color .3s, background .3s;
}
blockquote:after {
top: 16px;
left: 16px;
width: 8px;
bottom: 16px;
content: '';
display: block;
position: absolute;
background: radial-gradient(circle at center, #e0e0e0 50%, transparent 52%),transparent;
background-size: 4px 4px;
}
body.dark-mode-animate blockquote:after {
transition: color .3s, background .3s;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) {
color: #eeeeee;
background: #212121;
}
body:not(.dark-mode-animate) blockquote {
color: #cacaca;
background: #282828;
}
body:not(.dark-mode-animate) blockquote:after {
background: radial-gradient(circle at center, #363636 50%, transparent 52%),transparent;
background-size: 4px 4px;
}
}
body.dark {
color: #eeeeee;
background: #212121;
}
body.dark blockquote {
color: #cacaca;
background: #282828;
}
body.dark blockquote:after {
background: radial-gradient(circle at center, #363636 50%, transparent 52%),transparent;
background-size: 4px 4px;
}
img {
max-width: 100%;
}
iframe {
width: 100%;
border: none;
background: white;
border-radius: 3px;
}
code {
color: #616161;
padding: 4px;
font-size: .85em;
background: #eeeeee;
border-radius: 3px;
}
body.dark-mode-animate code {
transition: color .3s, background .3s;
}
body.dark code {
color: #e0e0e0;
background: #282828;
}
@media (prefers-color-scheme: dark) {
body:not(.dark-mode-animate) code {
color: #e0e0e0;
background: #282828;
}
}

62
docs/examples.html Normal file

File diff suppressed because one or more lines are too long

64
docs/index.html Normal file

@ -0,0 +1,64 @@
<!DOCTYPE html><html><head><title>Autorestic | autorestic</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="autorestic" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>autorestic</h1><p>High backup level CLI utility for <a href="https://restic.net/">restic</a>.</p><p>Autorestic is a wrapper around the amazing <a href="https://restic.net/">restic</a>. While being amazing the restic cli can be a bit overwhelming and difficult to manage if you have many different location that you want to backup to multiple locations. This utility is aimed at making this easier 🙂</p><marker><!-- ![Sketch](./docs/Sketch.png) -->
</marker><h2 id="✈️-roadmap" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>✈️ Roadmap</h2><p><del>I would like to make the official <code>1.0</code> release in the coming months. Until then please feel free to file issues or feature requests so that the tool is as flexible as possible :)</del></p><p>As of version <code>0.18</code> crons are supported wich where the last feature missing for a <code>1.0</code>. Will test this for a few weeks and then it's time for the first "real" release! 🎉 Also we now have waaay better docs 📒</p><h2 id="🌈-features" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>🌈 Features</h2><ul><li>YAML config files, no CLI</li><li>Incremental -&gt; Minimal space is used</li><li>Backup locations to multiple backends</li><li>Snapshot policies and pruning</li><li>Fully encrypted</li><li>Pre/After hooks</li><li>Exclude pattern/files</li><li>Cron jobs for automatic backup</li><li>Backup &amp; Restore docker volumes</li></ul><script id="EpumXddASr">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("EpumXddASr", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#autorestic" class="h1" data-content-highlight="autorestic">autorestic</a><a href="#✈️-roadmap" class="h2" data-content-highlight="✈️-roadmap">✈️ Roadmap</a><a href="#🌈-features" class="h2" data-content-highlight="🌈-features">🌈 Features</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="peoHMjuAKi">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("peoHMjuAKi", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="hvmd_uocRO">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("hvmd_uocRO", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="PnQoJXifyt">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("PnQoJXifyt", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="K_pBOXYztA">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("K_pBOXYztA", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="vOWeWdIOSh">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("vOWeWdIOSh", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="hJfTrqXCYI">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("hJfTrqXCYI", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="OTHaWNlCaq">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("OTHaWNlCaq", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/installation.html Normal file

@ -0,0 +1,62 @@
<!DOCTYPE html><html><head><title>Autorestic | 🛳 Installation</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="🛳-installation" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>🛳 Installation</h1><p>Linux &amp; macOS. Windows is not supported. If you have problems installing please open an issue :)</p><p>Autorestic requires <code>curl</code>, <code>wget</code> and <code>bzip2</code> to be installed. For most systems these should be already installed.</p><pre class=""><code class="bash code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span></span></span><div class="line-0-0-5 " data-content="curl -s https://raw.githubusercontent.com/CupCakeArmy/autorestic/master/install.sh | bash"><span class="lineCounter-0-0-4 prim">1</span><span class="token function">curl</span> -s https://raw.githubusercontent.com/CupCakeArmy/autorestic/master/install.sh <span class="token operator">|</span> <span class="token function">bash</span></div><br></code></pre><script id="INNSsVIkKt">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("INNSsVIkKt", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#🛳-installation" class="h1" data-content-highlight="🛳-installation">🛳 Installation</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="HgzjTJHlrT">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("HgzjTJHlrT", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="bhoexZCwWB">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("bhoexZCwWB", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="UNmHxwNELq">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("UNmHxwNELq", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="JKjfRCSnHL">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("JKjfRCSnHL", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="McwyIfcUEH">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("McwyIfcUEH", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="DGZKPvWAZR">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("DGZKPvWAZR", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="XPmvMpHlxZ">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("XPmvMpHlxZ", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

62
docs/location/cron.html Normal file

File diff suppressed because one or more lines are too long

62
docs/location/docker.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

62
docs/location/forget.html Normal file

File diff suppressed because one or more lines are too long

62
docs/location/hooks.html Normal file

File diff suppressed because one or more lines are too long

@ -0,0 +1,63 @@
<!DOCTYPE html><html><head><title>Autorestic | 🗂 Locations</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><meta name="robots" content="index,follow"><meta name="theme-color" content="#212121"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:300,400&amp;display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"><style>
body, input, button {
font-family: 'Hind', sans-serif;
}
code, .hljs {
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
}
.icon-font {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
.icon-font.outline {
font-family: 'Material Icons Outlined';
}
</style><link href="/autorestic/./dist/codedoc-styles.css" rel="stylesheet"><script async="" defer="" src="/autorestic/./dist/codedoc-bundle.js"></script></head><body><div class="header-0-0-9"><script async="" defer="" src="https://buttons.github.io/buttons.js"></script><a class="github-button" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="false" data-show-count="true" data-size="false" href="https://github.com/cupcakearmy/autorestic/">Star</a><br><br><a class="watermark-0-0-8" href="https://github.com/CONNECT-platform/codedoc" target="_blank">Created With<svg viewBox="0 0 536 296" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="codedoc" transform="translate(-244.000000, -364.000000)" fill-rule="nonzero"><path d="M580,532 C615.346224,532 644,560.653776 644,596 C644,631.346224 615.346224,660 580,660 C544.653776,660 516,631.346224 516,596 C516,560.653776 544.653776,532 580,532 Z M716,532 C751.346224,532 780,560.653776 780,596 C780,631.346224 751.346224,660 716,660 L692,660 C687.581722,660 684,656.418278 684,652 C684,647.581722 687.581722,644 692,644 L716,644 C742.509668,644 764,622.509668 764,596 C764,569.490332 742.509668,548 716,548 L692,548 C687.581722,548 684,544.418278 684,540 C684,535.581722 687.581722,532 692,532 L716,532 Z M468,532 C472.418278,532 476,535.581722 476,540 L476,652 C476,656.418278 472.418278,660 468,660 L444,660 C408.653776,660 380,631.346224 380,596 C380,560.653776 408.653776,532 444,532 L468,532 Z M332,532 C336.418278,532 340,535.581722 340,540 L340,652 C340,656.418278 336.418278,660 332,660 L252,660 C247.581722,660 244,656.418278 244,652 L244,540 C244,535.581722 247.581722,532 252,532 L332,532 Z M580,548 C553.490332,548 532,569.490332 532,596 C532,622.509668 553.490332,644 580,644 C606.509668,644 628,622.509668 628,596 C628,569.490332 606.509668,548 580,548 Z M461,548 L444,548 C417.490332,548 396,569.490332 396,596 C396,622.509668 417.490332,644 444,644 L461,644 L461,548 Z M444,364 C479.346224,364 508,392.653776 508,428 C508,463.346224 479.346224,492 444,492 C408.653776,492 380,463.346224 380,428 C380,392.653776 408.653776,364 444,364 Z M332,364 C336.418278,364 340,367.581722 340,372 C340,376.418278 336.418278,380 332,380 L308,380 C281.490332,380 260,401.490332 260,428 C260,454.509668 281.490332,476 308,476 L332,476 C336.418278,476 340,479.581722 340,484 C340,488.418278 336.418278,492 332,492 L308,492 C272.653776,492 244,463.346224 244,428 C244,392.653776 272.653776,364 308,364 L332,364 Z M580,364 C615.346224,364 644,392.653776 644,428 C644,463.346224 615.346224,492 580,492 L556,492 C551.581722,492 548,488.418278 548,484 L548,372 C548,367.581722 551.581722,364 556,364 L580,364 Z M772,364 C776.418278,364 780,367.581722 780,372 C780,376.418278 776.418278,380 772,380 L700,380 L700,420 L772,420 C776.418278,420 780,423.581722 780,428 C780,432.418278 776.418278,436 772,436 L700,436 L700,476 L772,476 C776.418278,476 780,479.581722 780,484 C780,488.418278 776.418278,492 772,492 L692,492 C687.581722,492 684,488.418278 684,484 L684,372 C684,367.581722 687.581722,364 692,364 L772,364 Z M444,380 C417.490332,380 396,401.490332 396,428 C396,454.509668 417.490332,476 444,476 C470.509668,476 492,454.509668 492,428 C492,401.490332 470.509668,380 444,380 Z M580,380 L563,380 L563,476 L580,476 C606.509668,476 628,454.509668 628,428 C628,401.490332 606.509668,380 580,380 Z"></path></g></svg></a></div><div id="-codedoc-container" class="container"><h1 id="🗂-locations" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>🗂 Locations</h1><p>Locations can be seen as the input to the backup process. Generally this is simply a folder.
The paths can be relative from the config file. A location can have multiple backends, so that the data is secured across multiple servers.</p><pre class="with-bar"><code class="yaml code-0-0-3" tabindex="0"><span class="wmbar-0-0-6"><span></span><span></span><span></span><span>.autorestic.yml</span></span><div class="line-0-0-5 " data-content="locations:"><span class="lineCounter-0-0-4 prim">1</span><span class="token key atrule">locations</span><span class="token punctuation">:</span></div><br><div class="line-0-0-5 " data-content=" my-location-name:"><span class="lineCounter-0-0-4">2</span> <span class="token key atrule">my-location-name</span><span class="token punctuation">:</span></div><br><div class="line-0-0-5 " data-content=" from: path/to/backup"><span class="lineCounter-0-0-4">3</span> <span class="token key atrule">from</span><span class="token punctuation">:</span> path/to/backup</div><br><div class="line-0-0-5 " data-content=" to:"><span class="lineCounter-0-0-4">4</span> <span class="token key atrule">to</span><span class="token punctuation">:</span></div><br><div class="line-0-0-5 " data-content=" - name-of-backend"><span class="lineCounter-0-0-4 prim">5</span> <span class="token punctuation">-</span> name<span class="token punctuation">-</span>of<span class="token punctuation">-</span>backend</div><br><div class="line-0-0-5 " data-content=" - also-backup-to-this-backend"><span class="lineCounter-0-0-4 prim">6</span> <span class="token punctuation">-</span> also<span class="token punctuation">-</span>backup<span class="token punctuation">-</span>to<span class="token punctuation">-</span>this<span class="token punctuation">-</span>backend</div><br></code></pre><h2 id="from" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span><code>from</code></h2><p>This is the source of the location.</p><h4 id="how-are-paths-resolved" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span>How are paths resolved?</h4><p>Paths can be absolute or relative. If relative they are resolved relative to the location of the config file. Tilde <code>~</code> paths are also supported for home folder resolution.</p><h2 id="to" class="heading-0-0-1"><span class="anchor-0-0-2" data-ignore-text=""><span class="icon-font" data-ignore-text="" style="vertical-align: sub">link</span></span><code>to</code></h2><p>This is einther a single backend or an array of backends. The backends have to be configured in the same config file.</p><script id="xWMghESRjF">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("xWMghESRjF", "qcaKEY878Mn2dFQW/lSrDg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="contentnav-0-0-14" data-no-search=""><a href="#🗂-locations" class="h1" data-content-highlight="🗂-locations">🗂 Locations</a><a href="#from" class="h2" data-content-highlight="from">from</a><a href="#how-are-paths-resolved" class="h4" data-content-highlight="how-are-paths-resolved">How are paths resolved?</a><a href="#to" class="h2" data-content-highlight="to">to</a></div></div><div id="-codedoc-toc" class="toc-0-0-11"><script>
if (window.matchMedia('(min-width: 1200px)').matches) {
if (!localStorage.getItem('-codedoc-toc-active')) {
localStorage.setItem('-codedoc-toc-active', "true");
}
}
</script><div class="content-0-0-12"><p><a href="/autorestic/">Home</a>
<a href="/autorestic/quick">Quick Start</a>
<a href="/autorestic/installation">Installation</a>
<a href="/autorestic/config">Configuration</a></p><div class="collapse-0-0-7 "><script id="gzUlWNHmEF">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("gzUlWNHmEF", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Locations</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/location/overview">Overview</a>
<a href="/autorestic/location/hooks">Hooks</a>
<a href="/autorestic/location/exclude">Excluding Files</a>
<a href="/autorestic/location/forget">Forget Policy</a>
<a href="/autorestic/location/cron">Cron</a>
<a href="/autorestic/location/docker">Docker Volumes</a></p></div></div><div class="collapse-0-0-7 "><script id="_mkjFxwjbA">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("_mkjFxwjbA", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">Backend</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/backend/overview">Overview</a>
<a href="/autorestic/backend/available">Available Backends</a></p></div></div><div class="collapse-0-0-7 "><script id="YkjVfjZSxW">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("YkjVfjZSxW", "fz894w7KG2/tX4kLbbA1Kg==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script><div class="label" onclick="this.parentElement.classList.toggle('open')"><span class="text">CLI</span><span class="icon-font closed">chevron_right</span></div><div class="content"><p><a href="/autorestic/cli/info">Info</a>
<a href="/autorestic/cli/check">Check</a>
<a href="/autorestic/cli/backup">Backup</a>
<a href="/autorestic/cli/restore">Restore</a>
<a href="/autorestic/cli/forget">Forget</a>
<a href="/autorestic/cli/cron">Cron</a>
<a href="/autorestic/cli/exec">Exec</a>
<a href="/autorestic/cli/install">Install</a>
<a href="/autorestic/cli/uninstall">Uninstall</a>
<a href="/autorestic/cli/update">Update</a></p></div></div><p><a href="/autorestic/examples">Examples</a></p><p><a href="/autorestic/qa">QA</a></p><p><a href="/autorestic/contrib">Contributors</a></p></div><div class="search-0-0-13"><script id="LjhKNnZDEt">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("LjhKNnZDEt", "+SrlfVhZ/PRQ5WhUlZbTaA==", {"repo":"autorestic","user":"cupcakearmy","root":"docs/md","pick":"\\.md$","drop":"(^_)|(\\/_)"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><div class="footer-0-0-10"><div class="left"><script id="rMhGqMuJNI">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("rMhGqMuJNI", "XsNW3ht5ee+RmVUActEo9g==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div><div class="main"><div class="inside"><a href="https://github.com/cupcakearmy/autorestic/" target="_blank">GitHub</a></div></div><div class="right"><script id="d_afZVWrZh">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("d_afZVWrZh", "Y1WWvCKxkgk1yh8xbCfXqw==", {});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></div></div><script id="Iq_ytEhqYt">(function(){function load(){if (window.__sdh_transport){window.__sdh_transport("Iq_ytEhqYt", "v641FmLj+AeGp0uuFTI6ug==", {"namespace":"/autorestic"});} }; if (document.readyState == 'complete') load(); else window.addEventListener('load', load); })()</script></body></html>

37
docs/md/_toc.md Normal file

@ -0,0 +1,37 @@
[Home](/)
[Quick Start](/quick)
[Installation](/installation)
[Configuration](/config)
> :Collapse label=Locations
>
> [Overview](/location/overview)
> [Hooks](/location/hooks)
> [Excluding Files](/location/exclude)
> [Forget Policy](/location/forget)
> [Cron](/location/cron)
> [Docker Volumes](/location/docker)
> :Collapse label=Backend
>
> [Overview](/backend/overview)
> [Available Backends](/backend/available)
> :Collapse label=CLI
>
> [Info](/cli/info)
> [Check](/cli/check)
> [Backup](/cli/backup)
> [Restore](/cli/restore)
> [Forget](/cli/forget)
> [Cron](/cli/cron)
> [Exec](/cli/exec)
> [Install](/cli/install)
> [Uninstall](/cli/uninstall)
> [Update](/cli/update)
[Examples](/examples)
[QA](/qa)
[Contributors](/contrib)

@ -0,0 +1,51 @@
# Available Backends
In theory [all the restic backends](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html) are supported.
Those tested are the following:
## Local
```yaml
backends:
name-of-backend:
type: local
path: /data/my/backups
```
## Backblaze
```yaml
backends:
name-of-backend:
type: b2
path: 'myAccount:myBucket/my/path'
B2_ACCOUNT_ID: backblaze_account_id
B2_ACCOUNT_KEY: backblaze_account_key
```
## S3 / Minio
```yaml
backends:
name-of-backend:
type: s3
path: s3.amazonaws.com/bucket_name
# Minio
# path: http://localhost:9000/bucket_name
AWS_ACCESS_KEY_ID: my_key
AWS_SECRET_ACCESS_KEY: my_secret
```
## SFTP
For SFTP to work you need to use configure your host inside of ~/.ssh/config as password prompt is not supported. For more information on this topic please see the [official docs](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html#sftp) on the matter.
```yaml
backends:
name-of-backend:
type: sftp
path: my-host:/remote/path/on/the/server
```
> :ToCPrevNext

@ -0,0 +1,16 @@
# 💽 Backends
Backends are the ouputs of the backup process. Each location needs at least one.
```yaml | .autorestic.yml
backends:
name-of-backend:
type: local
path: /data/my/backups
```
## Types
We restic supports multiple types of backends. See the [full list](/backend/available) for details.
> :ToCPrevNext

13
docs/md/cli/backup.md Normal file

@ -0,0 +1,13 @@
# Backup
```bash
autorestic backup [-l, --location] [-a, --all]
```
Performes a backup of all locations if the `-a` flag is passed. To only backup some locations pass one or more `-l` or `--location` flags.
```bash
autorestic backup -l my-location
```
> :ToCPrevNext

15
docs/md/cli/check.md Normal file

@ -0,0 +1,15 @@
# check
```bash
autorestic check [-b, --backend] [-a, --all]
```
Cheks if one or more backend are configured properly and initializes them if they are not already.
This is mostly an internal command, but useful to verify if a backend is configured correctly.
```bash
autorestic check -b my-backend
```
> :ToCPrevNext

11
docs/md/cli/cron.md Normal file

@ -0,0 +1,11 @@
# Cron
```bash
autorestic cron
```
This command is modtly intended to be triggered by an automated system like systemd or crontab.
It will run cron jobs es [specified in the cron section](/locations/cron) of a specific location.
> :ToCPrevNext

15
docs/md/cli/exec.md Normal file

@ -0,0 +1,15 @@
# Exec
```bash
autorestic exec [-b, --backend] [-a, --all] <command> -- [native options]
```
This is avery handy command which enables you to run any native restic command on desired backends. An example would be listing all the snapshots of all your backends:
```bash
autorestic exec -a -- snapshots
```
With `exec` you can basically run every cli command that you would be able to run with the restic cli. It only prefillst path, key, etc.
> :ToCPrevNext

11
docs/md/cli/forget.md Normal file

@ -0,0 +1,11 @@
# Forget
```bash
autorestic forget [-l, --location] [-a, --all] [--dry-run]
```
This will prune and remove old data form the backends according to the [keep policy you have specified for the location](/locations/forget)
The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data.
> :ToCPrevNext

@ -1,7 +1,7 @@
# Info
# info
Displays the config file that autorestic is referring to.
Useful when you want to quickly see what locations are being backed-up where.
Displays the config file that autorestic is refering to.
Usefull when you want to quickly see what locations are being backuped where.
**Pro tip:** if it gets a bit long you can read it more easily with `autorestic info | less` 😉
@ -14,3 +14,5 @@ autorestic info
```bash
autorestic -c path/to/some/config.yml info
```
> :ToCPrevNext

@ -5,3 +5,5 @@ Installs both restic and autorestic to `/usr/local/bin`.
```bash
autorestic install
```
> :ToCPrevNext

17
docs/md/cli/restore.md Normal file

@ -0,0 +1,17 @@
# Restore
```bash
autorestic restore [-l, --location] [--from backend] [--to <out dir>]
```
This will restore all the locations to the selected target. If for one location there are more than one backends specified autorestic will take the first one.
## Example
```bash
autorestic restore -l home --from hdd --to /path/where/to/restore
```
This will restore the location `home` to the `/path/where/to/restore` folder and taking the data from the backend `hdd`
> :ToCPrevNext

9
docs/md/cli/uninstall.md Normal file

@ -0,0 +1,9 @@
# Uninstall
Installs both restic and autorestic from `/usr/local/bin`.
```bash
autorestic uninstall
```
> :ToCPrevNext

11
docs/md/cli/update.md Normal file

@ -0,0 +1,11 @@
# Update
Autorestic can update itself! Super handy right? Simply run autorestic update and we will check for you if there are updates for restic and autorestic and install them if necessary.
```bash
autorestic update
```
Updates both restic and autorestic automagically.
> :ToCPrevNext

42
docs/md/config.md Normal file

@ -0,0 +1,42 @@
# 🎛 Config File
## Path
By default autorestic searches for a `.autorestic.yml` file in the current directory and your home folder.
- `./.autorestic.yml`
- `~/.autorestic.yml`
You can also specify a custom file with the `-c path/to/some/config.yml`
> **⚠️ WARNING ⚠️**
>
> Note that the data is automatically encrypted on the server. The key will be generated and added to your config file. Every backend will have a separate key. **You should keep a copy of the keys or config file somewhere in case your server dies**. Otherwise DATA IS LOST!
## Example configuration
```yaml | .autorestic.yml
locations:
home:
from: /home/me
to: remote
important:
from: /path/to/important/stuff
to:
- remote
- hdd
backends:
remote:
type: b2
path: 'myBucket:backup/home'
B2_ACCOUNT_ID: account_id
B2_ACCOUNT_KEY: account_key
hdd:
type: local
path: /mnt/my_external_storage
```
> :ToCPrevNext

8
docs/md/contrib.md Normal file

@ -0,0 +1,8 @@
# 🙋‍♀️🙋‍♂️ Contributors
This amazing people helped the project!
- @ChanceM [Docs]
- @EliotBerriot [Docs, Pruning, S3]
> :ToCPrevNext

19
docs/md/examples.md Normal file

@ -0,0 +1,19 @@
# 🐣 Examples
## List all the snapshots for all the backends
```bash
autorestic -a exec snapshots
```
## Unlock a locked repository
If you accidentally cancelled a running operation this could be useful.
Only do this if you know what you are doing.
```bash
autorestic -b my-backend exec unlock
```
> :ToCPrevNext

@ -4,7 +4,13 @@ High backup level CLI utility for [restic](https://restic.net/).
Autorestic is a wrapper around the amazing [restic](https://restic.net/). While being amazing the restic cli can be a bit overwhelming and difficult to manage if you have many different location that you want to backup to multiple locations. This utility is aimed at making this easier 🙂
> If you are coming from `0.x` see the [upgrade guide](/upgrade).
<!-- ![Sketch](./docs/Sketch.png) -->
## ✈️ Roadmap
~~I would like to make the official `1.0` release in the coming months. Until then please feel free to file issues or feature requests so that the tool is as flexible as possible :)~~
As of version `0.18` crons are supported wich where the last feature missing for a `1.0`. Will test this for a few weeks and then it's time for the first "real" release! 🎉 Also we now have waaay better docs 📒
## 🌈 Features
@ -13,8 +19,9 @@ Autorestic is a wrapper around the amazing [restic](https://restic.net/). While
- Backup locations to multiple backends
- Snapshot policies and pruning
- Fully encrypted
- Before/after backup hooks
- Pre/After hooks
- Exclude pattern/files
- Cron jobs for automatic backup
- Backup & Restore docker volumes
- Generated completions for `[bash|zsh|fish|powershell]`
> :ToCPrevNext

11
docs/md/installation.md Normal file

@ -0,0 +1,11 @@
# 🛳 Installation
Linux & macOS. Windows is not supported. If you have problems installing please open an issue :)
Autorestic requires `curl`, `wget` and `bzip2` to be installed. For most systems these should be already installed.
```bash
curl -s https://raw.githubusercontent.com/CupCakeArmy/autorestic/master/install.sh | bash
```
> :ToCPrevNext

39
docs/md/location/cron.md Normal file

@ -0,0 +1,39 @@
# Cron
Often it is usefull to trigger backups autmatically. For this we can specify a `cron` attribute to each location.
> Available since version 0.18
```yaml | .autorestic.yml
locations:
my-location:
from: /data
to: my-backend
cron: '0 3 * * 0' # Every Sunday at 3:00
```
Here is a awesome website with [some examples](https://crontab.guru/examples.html) and an [explorer](https://crontab.guru/)
## Installing the cron
To actually enable cron jobs you need something to call `autorestic cron` on a timed shedule. Note that the shedule has nothing to do with the `cron` attribute in each location. My advise would be to trigger the command every 5min, but if you have a cronjob that runs only once a week, it's probably enough to shedule it once a day.
### Crontab
Here is an example using crontab, but systemd would do too.
First, open your crontab in edit mode
```bash
crontab -e
```
Then paste this at the bottom of the file and save it. Note that in this specific example the `.autorestic.yml` is located in `/srv/`. You need to modify that part of course to fit your config file.
```bash
0 * * * * /usr/local/bin/autorestic -c /srv/.autorestic.yml
```
Now you can add as many `cron` attributes as you wish ⏱
> :ToCPrevNext

@ -0,0 +1,58 @@
# Docker
autorestic supports docker volumes directly, without needing them to be mounted to the host filesystem.
> Available since version 0.13
Let see an example.
```yaml | docker-compose.yml
version: '3.7'
volumes:
data:
name: my-data
services:
api:
image: alpine
volumes:
- data:/foo/bar
```
```yaml | .autorestic.yml
locations:
hello:
from: 'volume:my-data'
to:
- remote
options:
forget:
keep-last: 14 # Useful for limitations explained belowd
backends:
remote: ...
```
Now you can backup and restore as always.
```bash
autorestic -l hello backup
```
```bash
autorestic -l hello restore
```
If the volume does not exist on restore, autorestic will create it for you and then fill it with the data.
## Limitations
Unfortunately there are some limitations when backing up directly from a docker volume without mounting the volume to the host:
1. Incremental updates are not possible right now due to how the current docker mounting works. This means that it will take significantely more space.
2. Exclude patterns and files also do not work as restic only sees a compressed tarball as source and not the actual data.
If you are curious or have ideas how to improve this, please [read more here](https://github.com/cupcakearmy/autorestic/issues/4#issuecomment-568771951). Any help is welcomed 🙂
> :ToCPrevNext

@ -1,6 +1,6 @@
# Excluding files
If you want to exclude certain files or folders it done easily by specifying the right flags in the location you desire to filter.
If you want to exclude certain files or folders it done easily by specifiyng the right flags in the location you desire to filter.
The flags are taken straight from the [restic cli exclude rules](https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files) so you can use any flag used there.
@ -16,3 +16,5 @@ locations:
- '*.abc'
exclude-file: .gitignore
```
> :ToCPrevNext

@ -0,0 +1,25 @@
# Forget/Prune Policies
Autorestic supports declaring snapshot policies for location to avoid keeping old snapshot around if you don't need them.
This is based on [Restic's snapshots policies](https://restic.readthedocs.io/en/latest/060_forget.html#removing-snapshots-according-to-a-policy), and can be enabled for each location as shown below:
> **Note** This is a full example, of course you also can specify only one of them
```yaml | .autorestic.yml
locations:
etc:
from: /etc
to: local
options:
forget:
keep-last: 5 # always keep at least 5 snapshots
keep-hourly: 3 # keep 3 last hourly shapshots
keep-daily: 4 # keep 4 last daily shapshots
keep-weekly: 1 # keep 1 last weekly shapshots
keep-monthly: 12 # keep 12 last monthly shapshots
keep-yearly: 7 # keep 7 last yearly shapshots
keep-within: '2w' # keep snapshots from the last 2 weeks
```
> :ToCPrevNext

18
docs/md/location/hooks.md Normal file

@ -0,0 +1,18 @@
# Hooks
Sometimes you might want to stop an app/db before backing up data and start the service again after the backup has completed. This is what the hooks are made for. Simply add them to your location config. You can have as many commands as you wish.
```yml | .autorestic.yml
locations:
my-location:
from: /data
to: my-backend
hooks:
before:
- echo "Hello"
- echo "Human"
after:
- echo "kthxbye"
```
> :ToCPrevNext

@ -3,18 +3,10 @@
Locations can be seen as the input to the backup process. Generally this is simply a folder.
The paths can be relative from the config file. A location can have multiple backends, so that the data is secured across multiple servers.
Note: names of locations MUST be lower case!
```yaml | .autorestic.yml
version: 2
locations:
my-location-name:
from: path/to/backup
# Or multiple
# from:
# - /a
# - /b
to:
- name-of-backend
- also-backup-to-this-backend
@ -22,7 +14,7 @@ locations:
## `from`
This is the source of the location. Can be an `array` for multiple sources.
This is the source of the location.
#### How are paths resolved?
@ -30,4 +22,6 @@ Paths can be absolute or relative. If relative they are resolved relative to the
## `to`
This is either a single backend or an array of backends. The backends have to be configured in the same config file.
This is einther a single backend or an array of backends. The backends have to be configured in the same config file.
> :ToCPrevNext

8
docs/md/qa.md Normal file

@ -0,0 +1,8 @@
# ❓ QA
## My config file was moved?
This happens when autorestic needs to write to the config file. This happend e.g. when we are generating a key for you.
Unfortunately during this process formatting and comments are lost. That is why autorestic will place a copy of your old config next to the one we are writing to.
> :ToCPrevNext

69
docs/md/quick.md Normal file

@ -0,0 +1,69 @@
# 🚀 Quickstart
## Installation
```bash
curl -s https://raw.githubusercontent.com/CupCakeArmy/autorestic/master/install.sh | bash
```
## Write a simple config file
```bash
vim .autorestic.yml
```
For a quick overview:
- `locations` can be seen as the inputs and `backends` the output where the data is stored and backed up.
- One `location` can have one or multiple `backends` for redudancy.
- One `backend` can also be the target for multiple `locations`
```yaml | .autorestic.yml
locations:
home:
from: /home/me
to: remote
important:
from: /path/to/important/stuff
to:
- remote
- hdd
backends:
remote:
type: s3
path: 's3.amazonaws.com/bucket_name'
AWS_ACCESS_KEY_ID: account_id
AWS_SECRET_ACCESS_KEY: account_key
hdd:
type: local
path: /mnt/my_external_storage
```
## Check [Optional]
```bash
autorestic check -a
```
This checks if the config file has any issues. If this is the first time this can take longer as autorestic will setup the backends.
## Backup
```bash
autorestic backup -a
```
This will do a backup of all locations.
## Restore
```bash
autorestic restore -l home --from hdd --to /path/where/to/restore
```
This will restore the location `home` from the backend `hdd` to the given path.
> :ToCPrevNext

@ -1,6 +0,0 @@
const withNextra = require('nextra')({
theme: 'nextra-theme-docs',
themeConfig: './theme.config.jsx',
})
module.exports = withNextra()

@ -1,15 +0,0 @@
{
"scripts": {
"build": "NEXT_TELEMETRY_DISABLED=1 next build",
"dev": "NEXT_TELEMETRY_DISABLED=1 next",
"start": "NEXT_TELEMETRY_DISABLED=1 next start"
},
"dependencies": {
"next": "^14.2.7",
"nextra": "^2.13.4",
"nextra-theme-docs": "^2.13.4",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"packageManager": "pnpm@9.9.0"
}

@ -1,10 +0,0 @@
{
"index": "Home",
"quick": "Quick Start",
"installation": "Installation",
"config": "Configuration",
"location": "Locations",
"backend": "Backend",
"cli": "CLI",
"migration": "Migration"
}

@ -1,6 +0,0 @@
{
"index": "Overview",
"available": "Available backends",
"options": "Options",
"env": "Environment"
}

@ -1,85 +0,0 @@
# Available Backends
In theory [all the restic backends](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html) are supported.
Those tested are the following:
> You can also [specify the `env` variables in a config file](/backend/env) to separate them from the config file.
## Local
```yaml
backends:
name-of-backend:
type: local
path: /data/my/backups
```
## Backblaze
```yaml
backends:
name-of-backend:
type: b2
path: 'bucket_name'
# Or With a path
# path: 'bucket_name:/some/path'
env:
B2_ACCOUNT_ID: 'backblaze_keyID'
B2_ACCOUNT_KEY: 'backblaze_applicationKey'
```
#### API Keys gotcha
If you use a _File name prefix_ when making the application key, do not include a leading slash. Make sure to include this prefix in the path (e.g. `path: 'bucket_name:my/path'`).
## S3 / Minio
```yaml
backends:
name-of-backend:
type: s3
path: s3.amazonaws.com/bucket_name
# Minio
# path: http://localhost:9000/bucket_name
env:
AWS_ACCESS_KEY_ID: my_key
AWS_SECRET_ACCESS_KEY: my_secret
```
## SFTP
For SFTP to work you need to use configure your host inside of ~/.ssh/config as password prompt is not supported. For more information on this topic please see the [official docs](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html#sftp) on the matter.
```yaml
backends:
name-of-backend:
type: sftp
path: my-host:/remote/path/on/the/server
```
## Rest Server
See [here](https://github.com/restic/rest-server) for how to install a rest server backend and [here](https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html#rest-server) for further documentation.
```yaml
backends:
name-of-backend:
type: rest
path: http://localhost:8000/repo_name
# Or authenticated
path: https://user:pass@host:6969/path
```
Optionally you can set user and password separately
```yaml
backends:
rest:
type: rest
path: http://localhost:6969/path
key: ...
rest:
user: user
password: pass
```

@ -1,65 +0,0 @@
# Environment
> ⚠ Available since version `v1.4.0`
Sometimes it's favorable not having the encryption keys in the config files.
For that `autorestic` allows passing the env variables to backend password as `ENV` variables, or through an env file.
You can also pass whatever `env` variable to restic by prefixing it with `AUTORESTIC_[BACKEND NAME]_`.
> Env variables and file overwrite the config file in the following order:
>
> Env Variables > Env File (`.autorestic.env`) > Config file (`.autorestic.yaml`)
## Env file
Alternatively `autorestic` can load an env file, located next to `.autorestic.yml` called `.autorestic.env`.
```
AUTORESTIC_FOO_RESTIC_PASSWORD=secret123
```
### Example with repository password
The syntax for the `ENV` variables is as follows: `AUTORESTIC_[BACKEND NAME]_RESTIC_PASSWORD`.
```yaml | autorestic.yaml
backend:
foo:
type: ...
path: ...
key: secret123 # => AUTORESTIC_FOO_RESTIC_PASSWORD=secret123
```
This means we could remove `key: secret123` from `.autorestic.yaml` and execute as follows:
```bash
AUTORESTIC_FOO_RESTIC_PASSWORD=secret123 autorestic backup ...
```
### Example with Backblaze B2
```yaml | autorestic.yaml
backends:
bb:
type: b2
path: myBucket
key: myPassword
env:
B2_ACCOUNT_ID: 123
B2_ACCOUNT_KEY: 456
```
You could create an `.autorestic.env` or pass the following `ENV` variables to autorestic:
```
AUTORESTIC_BB_RESTIC_PASSWORD=myPassword
AUTORESTIC_BB_B2_ACCOUNT_ID=123
AUTORESTIC_BB_B2_ACCOUNT_KEY=456
```
```yaml | autorestic.yaml
backends:
bb:
type: b2
path: myBucket
```

@ -1,40 +0,0 @@
# 💽 Backends
Backends are the outputs of the backup process. Each location needs at least one.
Note: names of backends MUST be lower case!
```yaml | .autorestic.yml
version: 2
backends:
name-of-backend:
type: local
path: /data/my/backups
```
## Types
We restic supports multiple types of backends. See the [full list](/backend/available) for details.
## Avoid Generating Keys
By default, `autorestic` will generate a key for every backend if none is defined. This is done by updating your config file with the key.
In cases where you want to provide the key yourself, you can ensure that `autorestic` doesn't accidentally generate one for you by setting `requireKey: true`.
Example:
```yaml | .autorestic.yml
version: 2
backends:
foo:
type: local
path: /data/my/backups
# Alternatively, you can set the key through the `AUTORESTIC_FOO_RESTIC_PASSWORD` environment variable.
key: ... your key here ...
requireKey: true
```
With this setting, if a key is missing, `autorestic` will crash instead of generating a new key and updating your config file.

@ -1,17 +0,0 @@
# Options
> For more detail see the [location docs](/location/options) for options, as they are the same.
```yaml
backend:
foo:
type: ...
path: ...
options:
backup:
tag:
- foo
- bar
```
In this example, whenever `autorestic` runs `restic backup` it will append a `--tag abc --tag` to the native command.

@ -1,3 +0,0 @@
{
"general": "General"
}

@ -1,26 +0,0 @@
# Backup
```bash
autorestic backup [-l, --location] [-a, --all] [--dry-run]
```
Performs a backup of all locations if the `-a` flag is passed. To only backup some locations pass one or more `-l` or `--location` flags.
The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data.
```bash
# All
autorestic backup -a
# Some
autorestic backup -l foo -l bar
```
## Specific location
`autorestic` also allows selecting specific backends for a location with the `location@backend` syntax.
```bash
autorestic backup -l location@backend
```

@ -1,9 +0,0 @@
# Check
```bash
autorestic check
```
Checks locations and backends are configured properly and initializes them if they are not already.
This is mostly an internal command, but useful to verify if a backend is configured correctly.

Some files were not shown because too many files have changed in this diff Show More