hoard 0.6.0

Hoard backups of files across your filesystem into one location.
Documentation
# Lists of environment names.
#
# Environment names in lists together cannot appear in the same environment condition string.
# For example, you cannot specify a path that matches both Vim and Neovim.
exclusivity = [
    # Neovim takes priority over Vim.
    ["neovim", "vim"],
    # Flatpak steam installation takes priority over "native" install.
    ["steam_flatpak", "steam"]
]

[defaults]
    XDG_CONFIG_HOME = "${HOME}/.config"
    XDG_DATA_HOME = "${HOME}/.local/share"

[envs]

# Match if `fish` is somewhere in $PATH.
[envs.fish]
    exe_exists = ["fish"]

[envs.flatpak]
    exe_exists = ["flatpak"]

[envs.neovim]
    # Detect "neovim" if AT LEAST one of `nvim` or `nvim-qt` exists in $PATH.
    # This is parsed as `nvim OR nvim-qt`.
    exe_exists = ["nvim", "nvim-qt"]
[envs.vim]
    # Detect "vim" if AT LEAST one of `vim` or `gvim` exists in $PATH.
    exe_exists = ["vim", "gvim"]

# GAMES
[envs.itch]
    # Match itch if BOTH of these paths exist.
    # These paths are parsed as (first) AND (second).
    path_exists = [
        [
            "${LOCALAPPDATA}/itch"
        ],
        [
            "${HOME}/.itch",
            "${XDG_DATA_HOME}/applications/io.itch.itch.desktop"
        ]
    ]
[envs.steam]
    exe_exists = ["steam"]
[envs.steam_flatpak]
    exe_exists = ["flatpak"]
    path_exists = [
        "/home/shadow53/.var/app/com.valvesoftware.Steam"
    ]

# OPERATING SYSTEMS
# See https://doc.rust-lang.org/stable/std/env/consts/constant.OS.html for some possible
# values for `os`.
[envs.windows]
    os = ["windows"]
[envs.linux]
    os = ["linux"]
[envs.macos]
    os = ["macos"]
[envs.freebsd]
    os = ["freebsd"]

# Is "unix" if one of the OSes match AND both of the environment variables exist.
# You can also require a specific value for the variable with
#
#     { var = "SOME_VAR", expected = "the var value" }
#
# Note: macOS is technically unixy as well, but does not generally use the XDG_*
# directories and is thus excluded here.
[envs.unix]
    os = ["linux", "freebsd"]
    env = [
        { var = "HOME" },
        { var = "XDG_CONFIG_HOME" }
    ]

[hoards]

# Both `fish|linux` and `linux|fish` match the same way and are considered
# the same condition internally.
[hoards.fish]
    [hoards.fish.confdir]
        "unix|fish" = "${XDG_CONFIG_HOME}/fish/conf.d"
    [hoards.fish.functions]
        "fish|unix" = "${XDG_CONFIG_HOME}/fish/functions"

[hoards.fonts]
    # This is a standard place for FreeDesktop (Linux/BSD) systems to store user fonts.
    "unix" = "${XDG_DATA_HOME}/fonts"

# This hoard uses "linux" instead of "unix" because Steam/Itch/etc. are not on the BSDs.
[hoards.game_saves]
    [hoards.game_saves.apotheon]
        "linux|steam"         = "${XDG_DATA_HOME}/Apotheon/SavedGames"
        "linux|steam_flatpak" = "${HOME}/.var/app/com.valvesoftware.Steam/.local/share/Apotheon/SavedGames"
    [hoards.game_saves.death_and_taxes]
        "linux|itch" = "${XDG_CONFIG_HOME}/unity3d/Placeholder Gameworks/Death and Taxes/Saves"
    [hoards.game_saves.hat_in_time]
        "linux|steam"         = "${XDG_DATA_HOME}/Steam/steamapps/common/HatInTime/HatInTimeGame/SaveData"
        "linux|steam_flatpak" = "${HOME}/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/HatInTime/HatInTimeGame/SaveData"
    [hoards.game_saves.mindustry]
        "linux|steam"         = "${XDG_DATA_HOME}/Steam/steamapps/common/Mindustry/saves/saves"
        "linux|steam_flatpak" = "${HOME}/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common/Mindustry/saves/saves"

[hoards.git]
    "unix" = "${HOME}/.gitconfig"

[hoards.hoard]
    "unix" = "${XDG_CONFIG_HOME}/hoard/config.toml"
    "macos" = "${HOME}/Library/Application Support/com.shadow53.hoard/config.toml"
    "windows" = "${APPDATA}\\shadow53\\hoard\\config.toml"

[hoards.vim]
    [hoards.vim.init]
        # Match unix AND neovim environments
        "unix|neovim" = "${XDG_CONFIG_HOME}/nvim/init.vim"
        "unix|vim" = "${HOME}/.vimrc"
        "windows|neovim" = "${CSIDL_LOCAL_APPDATA}\\nvim\\init.vim"
        "windows|vim" = "${USERPROFILE}/.vim/_vimrc"
    [hoards.vim.configdir]
        "windows|neovim" = "${CSIDL_LOCAL_APPDATA}\\nvim\\config"
        "windows|vim" = "${USERPROFILE}/.vim/config"
        "unix|neovim" = "${XDG_CONFIG_HOME}/nvim/config"
        "unix|vim" = "${HOME}/.vim/config"
    [hoards.vim.templates]
        "windows|neovim" = "${CSIDL_LOCAL_APPDATA}\\nvim\\templates"
        "windows|vim" = "${USER_PROFILE}\\.vim\\templates"
        "unix|neovim" = "${XGD_CONFIG_HOME}/nvim/templates"
        "unix|vim" = "${HOME}/.vim/templates"