Dorothy is a dotfile ecosystem featuring:
- seamless support for Bash, Zsh, Fish, Nu, Xonsh, Elvish, Dash, KSH
- 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 10 via Ubuntu WSL2 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!
macOS:
xcode-select --install
Windows 10/11:
# [Install WSL.](https://learn.microsoft.com/en-au/windows/wsl/install)
wsl --install
wsl --set-default-version 2
# note that [wsl --version] does not report WSL2, you need to do [wsl -l -v]
Ubuntu / Debian / Kali:
sudo apt-get update
sudo apt-get install bash curl
Fedora:
dnf check-update
dnf --refresh --best install bash curl
OpenSUSE / SUSE:
zypper --gpg-auto-import-keys refresh
zypper install bash curl
Alpine:
doas apk update
doas apk add bash curl grep
Manjaro:
pamac install bash curl
Arch:
pacman-key --init
pacman --refresh --sync --needed bash curl
Void:
xbps-install --sync --update xbps
xbps-install --sync bash curl
Mageia, Nix, and Gentoo are currently unsupported.
You can trial Dorothy commands without configuring your shell.
To run a specific command in/from the Dorothy environment, enter the following, swapping out everything after the double-dash (--
) with whatever command to run:
bash -ic "$(curl -fsSL https://dorothy.bevry.me/run)" -- echo-verbose -- a b c
# if your shell doesn't recognize any of the above syntax, run `bash -i` then try again
To run multiple commands in/from a Dorothy-configured REPL, enter the following line by line:
bash -ic "$(curl -fsSL https://dorothy.bevry.me/repl)"
# if your shell doesn't recognize any of the above syntax, run `bash -i` then try again
# now you can run whatever and how many commands as you'd like, such as:
echo-verbose -- a b c
echo-style --success=awesome
# once you are done, exit the trial environment
exit
To install Dorothy enter the following in your favorite terminal application:
bash -ic "$(curl -fsSL https://dorothy.bevry.me/install)"
# if your shell doesn't recognize any of the above syntax, run `bash -i` then try again
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
To select your login shell, run setup-shell
.
If packages are failing to install, go back to the "Prerequisites" section.
If your shell doesn't recognize any of the Dorothy commands (you get a command not found error, or an undefined/unbound variable error), then it could be that:
- Your shell is not running as a login shell. Verify that your Terminal is running the shell as a login shell.
- Dorothy did not configure itself for the shell you use. Re-run the Dorothy installation process, and be sure to configure Dorothy for your shell.
- Your login shell is not one of the Dorothy supported shells. Create an issue requesting support for your shell.
Dorothy installs itself to $DOROTHY
, which defaults to the XDG location of ~/.local/share/dorothy
, and consists of the following:
commands
directory contains executable commands of super-stable quality, they are actively used within the Dorothy core and by the users of Dorothy.commands.beta
directory contains executable commands of beta quality, these are commands that require more usage or possible breaking changes before promotion tocommands
.config
directory contains default configurationsources
directory contains scripts that are loaded into the shell environmentthemes
directory contains themes that you can select via theDOROTHY_THEME
environment variableuser
directory is your own github repository for your custom configuration
For each shell that you configured during the Dorothy installation (can be reconfigured via the dorothy install
command), the configured shell performs the following steps when you open a new shell instance via your terminal:
-
The shell loads Dorothy's initialization script:
-
The initialization script will:
-
Ensure the
DOROTHY
environment variable is set to the location of the Dorothy installation. -
If a login shell, it loads our login script
sources/login.(bash|dash|elv|fish|ksh|nu|xsh|zsh)
, which will:-
Apply any configuration changes necessary for that login shell
-
Load our environment script
sources/environment.(bash|dash|elv|fish|ksh|nu|xsh|zsh)
, which will:- Invoke
commands/setup-environment-commands
which determines and applies all necessary environment configuration changes to the shell. It loads youruser/config(.local)/environment.bash
configuration script for your own custom environment configuration that will be applied to all your login shells.
- Invoke
-
-
If a login and interactive shell, it loads our interactive script
sources/interactive.(bash|dash|elv|fish|ksh|nu|xsh|zsh)
, which will:- Load your own
user/config(.local)/interactive.(bash|dash|elv|fish|ksh|nu|xsh|zsh)
configuration script for your own interactive login shell configuration.- Elvish will only load
interactive.elv
if it exists. - Fish will load
interactive.fish
if it exists, otherwise it will loadinteractive.sh
. - Nu will only load
interactive.nu
and it must exist. - Xonsh will only load
interactive.xsh
if it exists. - POSIX shells (Bash, Zsh, Dash, KSH, etc) will load their
interactive.(bash|zsh|...etc)
file if it exists, otherwise they will loadinteractive.sh
if exists.
- Elvish will only load
- Load any common alias and function utilities.
- Load our theme configuration.
- Load our ssh configuration.
- Load our autocomplete configuration.
- Load your own
-
This is the foundation that enables Dorothy's hundreds of commands to work across hundreds of machines, across dozens of operating system and shell combinations, seamlessly.
Your user configuration goes to the XDG location of ~/.local/config/dorothy
which Dorothy symlinks to ~/.local/share/dorothy/user
, your user configuration consists of the following:
commands
directory, for public commandscommands.local
directory, for private commands (git ignored by default)config
directory, for public configurationconfig.local
directory, for private configuration (git ignored by default)
The order of preference within Dorothy is (commands|config).local
first, then (commands|config)
, then Dorothy's own (commands|config)
then everything else.
You can find the various configuration files that are available to you by browsing Dorothy's default config
directory.
Use these sources to find inspiration for your own user commands and configuration.
- Dorothy's
commands
directory for super-stable commands with up to date conventions. - Dorothy's
commands.beta
directory for beta-quality commands with possibly outdated conventions. - Dorothy User Configurations:
- @balupton / dotfiles: uses Fish as login shell, plenty of Bash commands
- @molleweide / dotfiles: uses Zsh as login shell, plenty of Bash commands, kmonad user
- @jondpenton / dotfiles: uses Nu as login shell, plenty of Nu commands
- if you use Dorothy, send a pull request to add your own user configuration to this list.
Join the Bevry Software community to stay up-to-date on the latest Dorothy developments and to get in touch with the rest of the community.
Discover how to contribute via the CONTRIBUTING.md
file.
- Benjamin Lupton β Accelerating collaborative wisdom.
- Benjamin Lupton β Accelerating collaborative wisdom.
- Benjamin Lupton β view contributions
- Bevry Team β view contributions
- BJReplay β view contributions
- molleweide β view contributions
- Nutchanon Ninyawee β view contributions
- Sumit Rai β view contributions
- Andrew Nesbitt β Software engineer and researcher
- Balsa β We're Balsa, and we're building tools for builders.
- Codecov β Empower developers with tools to improve code quality and testing.
- Frontend Masters β The training platform for web app engineering skills β from front-end to full-stack! π
- Mr. Henry
- Poonacha Medappa
- Rob Morris
- Sentry β Real-time crash reporting for your web apps, mobile apps, and games.
- Syntax β Syntax Podcast
- Andrew Nesbitt
- Balsa
- Chad
- Codecov
- entroniq
- Frontend Masters
- Jean-Luc Geering
- Michael Duane Mooring
- Mohammed Shah
- Mr. Henry
- Poonacha Medappa
- Rob Morris
- Sentry
- ServieJS
- Syntax
Unless stated otherwise all works are:
- Copyright Β© Benjamin Lupton
and licensed under: