Repository navigation
Releases: fontnelle/dudu
Releases · fontnelle/dudu
Release list
v0.5.2 · Google Drive, faster
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 bykeep. - 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 HomebrewFull Changelog: v0.5.1...v0.5.2
v0.5.1 · Google Drive, clearly
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 adudu-<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 namedhttps:wherever dudu ran.gdrive_path=qdid 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 HomebrewFull Changelog: v0.5.0...v0.5.1
v0.5.0 · Google Drive in four steps
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 indudu configruns the same steps when no Drive for desktop folder is found.- The least access by default. Pressing Enter makes a
dudufolder in My Drive withdrive.fileaccess: dudu sees only the files it creates. Pasting a folder link uses that folder instead. Onlyhttps://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. duduasks to update when a new version is out, as Oh My Zsh does. Enter updates and reopens dudu on the new version.nkeeps 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 HomebrewFull Changelog: v0.4.0...v0.5.0
v0.4.0 · From a Mac to Linux
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 inlib/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 samedudufolder 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/fontsinstead 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 HomebrewFull Changelog: v0.3.0...v0.4.0
v0.3.0 · Restore shows what it will do
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.
--onlystill 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 statusnames 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 HomebrewFull Changelog: v0.2.2...v0.3.0
v0.2.2 · dudu update with Homebrew
Fixed
dudu updatereally updates a Homebrew install. Homebrew reads a tap's new formulas at most once a day, sobrew upgrade duduright after a release said the old version was current.dudu updatenow runsbrew updatefirst, and the "new version" notice suggestsbrew 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 HomebrewFull Changelog: v0.2.1...v0.2.2
v0.2.1 · Scheduled backups after brew upgrade
Fixed
- Scheduled backups survive
brew upgrade. With a Homebrew install,dudu schedule onpointed the daily job at that version's Cellar folder, which the next upgrade removes, so the backup silently stopped. It now uses Homebrew's stableopt/dudupath.
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 HomebrewFull Changelog: v0.2.0...v0.2.1
v0.2.0 · English, Português, Español
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,esorauto), Settings › Language in the menu, orDUDU_LANG=en dudu statusfor 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'sRESTORE.mdand 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 -qunderpipefail), 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 HomebrewFull Changelog: v0.1.0...v0.2.0
v0.1.0 · First release
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 secretsmoves 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, anddudu outdatedto 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 HomebrewFull Changelog: https://github.com/fontnelle/dudu/commits/v0.1.0