/dorothy

🧙🏻‍♀️ A better dotfile ecosystem with cross-platform automations. Supports fish, zsh, bash, mac, linux, windows. Zero to hero in minutes on new and existing machines.

Primary LanguageShellOtherNOASSERTION

Dorothy

Status of the GitHub Workflow: bevry
GitHub Sponsors donate button ThanksDev donate button Patreon donate button Flattr donate button Liberapay donate button Buy Me A Coffee donate button Open Collective donate button crypto donate button PayPal donate button Wishlist browse button

Dorothy is a dotfile ecosystem featuring:

  • seamless support for bash, fish, and zsh
  • seamless support for multiple operating systems and architectures
  • seamless support for your favorite terminal and GUI editors
  • automatic configuration of your environment variables for what you have installed on your system
  • automatic installation and updating of your specified packages
  • automatic git ssh and gpg configuration based on what your system supports and your configuration
  • hundreds of commands to improve your productivity
  • completely extensible and configurable with your own user repository
  • all this together, allows you to go from zero to hero within minutes, instead of days, on a brand new machine

Dorothy maintainers are daily driving Dorothy on:

  • macOS on Apple Silicon (ARM64)
  • macOS on Intel (x86_64)
  • Ubuntu Server on Raspberry Pi 4 (ARM64)
  • Ubuntu Desktop on Raspberry Pi 400 (ARM64)
  • Ubuntu Desktop on Intel/AMD (x86_64)

Dorothy users are daily driving Dorothy on:

  • Manjaro/Arch on Intel/AMD (x86_64)
  • Windows 11 via Ubuntu WSL2 on Intel/AMD (x86_64)

Dorothy maintainers and users are occasionally driving Dorothy on:

  • macOS on Apple Silicon with HOMEBREW_ARCH="x86_64"
  • Fedora via Intel/AMD (x84_64) virtual machines
  • OpenSUSE via Intel/AMD (x84_64) virtual machines
  • Alpine via Intel/AMD (x84_64) virtual machines
  • Alpine via Apple Silicon (ARM64) virtual machines
  • Ubuntu Server on StarFive’s VisionFive (RISC-V)

Watch the 2022 April Presentation to see what Dorothy can do!

Try

If you just want to trial Dorothy commands without configuring your shell, you can do the following:

# IF you are on Alpine, install the dependencies
doas apk add bash curl git

# IF you are on Ubuntu, install the dependencies
sudo apt install bash curl git

# IF you are on macOS, install the dependencies
xcode-select --install

# To run only a specific command, run the following and swap out `echo-verbose` with whatever command you wish to run
bash -ic "$(curl -fsSL https://dorothy.bevry.me/commands/echo-verbose)" -- a b c

# To run multiple commands in a REPL, run the following then type the commands you wish to execute
eval "$(curl -fsSL https://dorothy.bevry.me/try)"

Install

To install Dorothy run the following in your favorite terminal application:

# IF you are on Alpine, install the dependencies
doas apk add bash curl git

# IF you are on Ubuntu, install the dependencies
sudo apt install bash curl git

# IF you are on macOS, install the dependencies
xcode-select --install

# Run the Dorothy installation script
bash -ilc "$(curl -fsSL https://dorothy.bevry.me/install)"

During installation, Dorothy will ask you to create a repository to store your user configuration, such as a dotfiles repository. If you already have a dotfiles repository, you can use that, or make another.

Verify the installation worked by selecting a theme for Dorothy by running:

# you must open a new terminal instance first
dorothy theme
# then open a new terminal

Troubleshooting

If your shell doesn't recognize the syntax, run bash -il then run the command again.

If you get a command not found error or an undefined/unbound variable error, verify that your terminal application has login shells enabled. If you are running in a login shell, then you may be running in an unsupported shell, run bash -il to open bash, if it still doesn't work, then run the installer again, and make sure to confirm the setup for Dorothy for each shell when prompted.

If packages are failing to install, update your Operating System's package manager so that it is using the latest references:

# Alpine
doas apk update

# Ubuntu
sudo apt update

# Fedora
sudo dnf check-update -y
sudo yum check-update -y

# Manjaro
sudo pacman-key --init
sudo pacman --refresh --sync

# OpenSUSE
sudo zypper --gpg-auto-import-keys refresh

Overview

Dorothy will be installed to $DOROTHY, which consists of the following:

The initialization of Dorothy works as follows:

  1. Fish shell will be instructed to load Dorothy's init.fish file, and the other shell's will be instructed to load Dorothy's init.sh file.

  2. The initialization file will set the DOROTHY environment variable to the location of the Dorothy installation, and load the appropriate sources/* files.

  3. source/init.(sh|fish) will load sources/environment.(sh|fish) which will:

    1. invoke setup-environment-commands which will determine the appropriate environment configuration for the invoking shell
    2. evaluate its output, applying the configuration to the shell, achieving cross-shell environment compatibility
  4. source/interactive.(sh|fish) will load the additional configuration for our interactive login shell, such as:

    1. Enabling editor preferences
    2. Enabling aliases and functions
    3. Enabling the ssh agent
    4. Enabling zsh and its ecosystem
    5. Enabling shell auto-completions
    6. Enabling prompt theme

This is the foundation enables Dorothy's hundreds of commands, to work across hundreds of machines, across dozens of operating system and shell combinations, seamlessly.

Documentation

Discussions.

Staring with Dorothy:

Coding with Dorothy:

Coding with Bash:

Roadmap:

Showcase

If you use Dorothy, add yourself below:

Sponsors

Dorothy is supported by the following sponsors:

License

Unless stated otherwise all works are:

and licensed under: