Skip to content

Releases: fontnelle/dudu

v0.5.2 · Google Drive, faster

Choose a tag to compare

@github-actions github-actions released this 20 Oct 21:51

Changed

  • Backups go up to Google Drive as one file, <stamp>.tar.gz, instead of a tree of small files. Google takes about a second for each file and folder it creates, and rclone's shared access is rate limited, so a backup of 47 files took 5 minutes. One archive takes seconds. Backups saved as folders by older versions are still read and are dropped by keep.
  • The Google Drive line shows how far the upload is: a filling bar, the percent and the time left.
  • The page after the Google sign-in is dudu's. It replaces rclone's plain "Success! All done. Please go back to rclone.". It says Google Drive is connected, that the tab can be closed and dudu carries on in the terminal, and what dudu can see in your Drive. On an error, it shows what Google said and how to try again. It is in your language and follows the light or dark theme.

Fixed

  • Old backups on Google Drive are removed again by keep. With dudu's minimal access, Google refused to delete a backup folder in one go, so older backups piled up. Their files are now deleted first, then the folders.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.5.1...v0.5.2

v0.5.1 · Google Drive, clearly

Choose a tag to compare

@github-actions github-actions released this 20 Oct 20:03

Changed

  • Google Drive asks one clear question: 1, connect my Google account, or 2, paste the link of a folder. Connecting makes the folder dudu-<machine> in My Drive by itself. A pasted folder gets a dudu-<machine> folder inside it.
  • A wrong link says why: the link of a file or a document instead of a folder, another site, a short link, spaces, or no https. Each try shows ✓ or ✗ on its own line.
  • The folder's link is shown at the end of the setup and after each backup, to open it in the browser.
  • The Google Drive steps come first in dudu config, before the local folder question. That question now says it wants a folder on this computer.

Fixed

  • A link or a word typed as a folder no longer becomes a folder. A Google Drive link pasted at the local folder question was saved as path=. Backups then went to a folder named https: wherever dudu ran. gdrive_path=q did the same, and it also kept the Google Drive steps from starting. Folder settings must now be full paths (/… or ~/…). One already in the config that is not is ignored, with a warning, and backups are never written under a relative folder.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.5.0...v0.5.1

v0.5.0 · Google Drive in four steps

Choose a tag to compare

@github-actions github-actions released this 20 Oct 19:26

Added

  • dudu config gdrive: Google Drive without Drive for desktop, on macOS and Linux. It walks through four steps: rclone (installed if missing), the folder, the Google sign-in and the checks. Checking Google Drive in dudu config runs the same steps when no Drive for desktop folder is found.
  • The least access by default. Pressing Enter makes a dudu folder in My Drive with drive.file access: dudu sees only the files it creates. Pasting a folder link uses that folder instead. Only https://drive.google.com/drive/folders/… links are taken; short links and look-alike sites are refused.
  • Checks before the first backup. A test file is written, read back and removed. rclone's config, which holds the Google token, is set to be readable only by you. dudu offers to turn on encryption when it is off, and lists the machines already backed up in the folder.
  • dudu keeps its own rclone remote (dudu-gdrive), so remotes you already have are never changed. If a step fails, nothing is saved and the previous settings stay.
  • dudu asks to update when a new version is out, as Oh My Zsh does. Enter updates and reopens dudu on the new version. n keeps the current one, and dudu does not ask again until the next release.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.4.0...v0.5.0

v0.4.0 · From a Mac to Linux

Choose a tag to compare

@github-actions github-actions released this 20 Oct 12:39

Added

  • Restore a Mac's backup on Linux. Homebrew formulae become apt, dnf or pacman packages, and known casks come from the system or Flathub (VS Code, Chrome, Slack...), without installing Homebrew. Editor and Ghostty settings move to ~/.config. The plan lists what is left out before anything is installed: App Store apps, casks with no Linux build, macOS preferences, Terminal.app/iTerm2 profiles. The names that differ are in lib/data/brew-linux.map.
  • Google Drive on Linux, set up by dudu config. Checking Google Drive installs rclone, connects your Google account and points it at the same dudu folder the Mac writes to. It then lists the machines it found there.

Changed

  • Tools of the other OS are listed, not restored. macOS preferences on Linux, or Linux packages on a Mac, show as "macOS only, not restored here" instead of "not on this machine". They are not checked and not restored with -y.
  • The Nerd Fonts hint on Linux points to ~/.local/share/fonts instead of a Homebrew cask.

Fixed

  • Google Drive through rclone falls back to an older backup when the newest one fails its checksums, as the folder destinations already did.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.3.0...v0.4.0

v0.3.0 · Restore shows what it will do

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:13

Changed

  • Restore looks like backup, in three steps. Source lists every destination with the date of its backup and marks the one being restored. Comparing checks each tool against this machine. Restoring reinstalls only what you picked.
  • Only what differs. Tools that already match the backup are left alone. If nothing differs, restore says so and stops. --only still restores what you name.
  • What will be done, before it is done. Each difference becomes an action: "install v20.19.6", "change version manager: system → nvm", "replace ~/.zshrc". Press Enter to restore all of it, or E to pick tools from a checklist. With -y, it restores the tools that differ.
  • A line per tool at the end, restored or not, after the installers' output.
  • dudu status names things as you know them: iterm2 (cask) instead of "Brewfile changed", and "version manager: nvm → system".

Fixed

  • A long spinner line no longer floods the screen. On a narrow terminal, "Fetching the newest backup…" wrapped and was redrawn over and over. Spinner labels are now cut to the terminal width.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.2.2...v0.3.0

v0.2.2 · dudu update with Homebrew

Choose a tag to compare

@github-actions github-actions released this 17 Oct 19:48

Fixed

  • dudu update really updates a Homebrew install. Homebrew reads a tap's new formulas at most once a day, so brew upgrade dudu right after a release said the old version was current. dudu update now runs brew update first, and the "new version" notice suggests brew update && brew upgrade dudu.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.2.1...v0.2.2

v0.2.1 · Scheduled backups after brew upgrade

Choose a tag to compare

@github-actions github-actions released this 17 Oct 19:28

Fixed

  • Scheduled backups survive brew upgrade. With a Homebrew install, dudu schedule on pointed the daily job at that version's Cellar folder, which the next upgrade removes, so the backup silently stopped. It now uses Homebrew's stable opt/dudu path.

If you installed with Homebrew and turned the schedule on, run dudu schedule on once more after updating.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.2.0...v0.2.1

v0.2.0 · English, Português, Español

Choose a tag to compare

@github-actions github-actions released this 17 Oct 19:09

dudu now speaks English, Português (Brasil) and Español.

New

  • Picked from your system, nothing to set up. dudu follows LANG (or System Settings on macOS, which also covers scheduled backups), and the first run says which language it picked.
  • Change it any time: dudu config set language es (en, pt-BR, es or auto), Settings › Language in the menu, or DUDU_LANG=en dudu status for one command.
  • Settings is now a menu: destinations, language, encryption and the daily schedule in one place.
  • Translated everywhere you read it: menus, messages, --help, the backup's RESTORE.md and Apple Notes note, and zsh tab completion descriptions.
  • README in Spanish: README.es.md.

Fixed

  • Columns stay aligned with accented text.
  • A few checks could fail at random (printf | grep -q under pipefail), including picking the machine to restore.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: v0.1.0...v0.2.0

v0.1.0 · First release

Choose a tag to compare

@github-actions github-actions released this 17 Oct 17:58

First release: back up your whole dev setup in one command and put it back on a new machine in another.

Highlights

  • Everything you installed from the terminal: Homebrew, apt/dnf/pacman, Node versions and global packages, pyenv/pipx/uv, gems, cargo, go tools, VS Code and Cursor extensions.
  • Your terminal, as it was: zsh, Oh My Zsh and plugins, Powerlevel10k/Starship, Terminal.app, iTerm2, Ghostty, Kitty, WezTerm, Nerd Fonts, git and SSH config.
  • Saved where you already are: a local folder, iCloud Drive, Google Drive and Apple Notes, several at once.
  • Secrets stay home: tokens are masked, key files are never copied, dudu secrets moves keys out of your dotfiles.
  • Optional encryption: AES-256 with a password kept in your Keychain.
  • Safe restore: backups are checked against their checksums and treated as untrusted; nothing is overwritten without a copy.
  • Daily backups with dudu schedule on, and dudu outdated to update your tools.
  • Pure bash, works with the bash 3.2 that ships with macOS. Tested on macOS, Ubuntu, Fedora and Arch.

Install or update

brew install fontnelle/tap/dudu            # new install
brew update && brew upgrade dudu           # update
curl -fsSL https://raw.githubusercontent.com/fontnelle/dudu/main/install.sh | bash   # without Homebrew

Full Changelog: https://github.com/fontnelle/dudu/commits/v0.1.0