blob: 34586a803df0d3697cbe872af0b446e6b8c1232e [file] [log] [blame]
// SPDX-FileCopyrightText: © 2021 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
//
// SPDX-License-Identifier: GFDL-1.3-or-later
= Mulkup
Matthias Andreas Benkard
// Meta
:experimental:
:data-uri:
:sectnums:
:toc:
:stem:
:toclevels: 2
:description: Mulkup Manual
:keywords: mulk
// Settings
:icons: font
:source-highlighter: rouge
A configurable https://bupstash.io[bupstash] wrapper.
== Summary
Mulkup is a backup script that wraps https://bupstash.io[bupstash].
Features:
- Backup rotation (hourly, daily, weekly, monthly)
- Multiple stashes
- Exclusion lists
== Installation
=== Using Stack
Outside of Nix, https://haskellstack.org/[Stack] is the easiest way to
install Mulkup.
Check out the repository and run:
[source,console]
----
stack install
----
=== Using Nix
Mulkup is available as a
https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html#description[Nix
flake]:
[source,console]
----
nix profile install github:benkard/mulkup
----
=== Using Cabal
It is possible to install Mulkup using
https://www.haskell.org/cabal[Cabal]. Note that this is less reliable
than either Stack or Nix and requires an installation of
http://ghc.haskell.org[GHC].
Check out the repository and run:
[source,console]
----
cabal install
----
== Usage
Copy link:config.example.dhall[`config.example.dhall`] to
`config.dhall` and open it in a text editor. Edit it to suit your
needs.
To configure the bupstash repository, key, and any other settings
available in bupstash itself, set the corresponding
https://bupstash.io/doc/man/bupstash-put.html#ENVIRONMENT[environment
variables]. See the
https://bupstash.io/doc/man/bupstash.html[bupstash manual] for
details.
Execute the program without arguments to perform a backup:
[source,console]
----
mulkup
----
A simple configuration file that defines a single stash might look
like the following:
[source,dhall]
----
let home = "/home/mulk" in
{ host = "mulkinator"
, stashes =
[ { name = "mulk.tar"
, baseDir = home
, tiers =
{ hourly = { keep = 24 }
, daily = { keep = 7 }
, weekly = { keep = 4 }
, monthly = { keep = 12 }
}
, exclusions =
[ "**/.stack-work"
, "**/dist-newstyle"
, "${home}/.cabal/bin"
, "${home}/.cabal/packages"
, "${home}/.ghcup"
, "${home}/.stack"
, "${home}/Library/Caches"
]
}
]
}
----
You can add as many stashes to the `stashes` list as you like.