8506758400
Remove home/.chezmoitemplates/secrets/ANSIBLE_VAULT_PASSWORD Remove home/.chezmoitemplates/secrets/APPLE_PASSWORD Remove home/.chezmoitemplates/secrets/APPLE_USERNAME Remove home/.chezmoitemplates/secrets/ATUIN_EMAIL Remove home/.chezmoitemplates/secrets/ATUIN_KEY Remove home/.chezmoitemplates/secrets/ATUIN_PASSWORD Remove home/.chezmoitemplates/secrets/ATUIN_USERNAME Remove home/.chezmoitemplates/secrets/AWS_ACCESS_KEY_ID Remove home/.chezmoitemplates/secrets/AWS_DEFAULT_REGION Remove home/.chezmoitemplates/secrets/AWS_SECRET_ACCESS_KEY Remove home/.chezmoitemplates/secrets/CELL_PHONE_NUMBER Remove home/.chezmoitemplates/secrets/CLOUDFLARED_DOCKER_SWARM_TOKEN Remove home/.chezmoitemplates/secrets/CLOUDFLARE_ACCOUNT_ID Remove home/.chezmoitemplates/secrets/CLOUDFLARE_API_KEY Remove home/.chezmoitemplates/secrets/CLOUDFLARE_API_TOKEN Remove home/.chezmoitemplates/secrets/CLOUDFLARE_EMAIL Remove home/.chezmoitemplates/secrets/CLOUDFLARE_ORIGIN_CA_KEY Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_ID Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_ID_USER Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_JURISDICTION_USER Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_SECRET Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_SECRET_USER Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_TOKEN Remove home/.chezmoitemplates/secrets/CLOUDFLARE_R2_TOKEN_USER Remove home/.chezmoitemplates/secrets/CLOUDFLARE_TEAMS_CLIENT_ID Remove home/.chezmoitemplates/secrets/CLOUDFLARE_TEAMS_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/DIGITALOCEAN_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/DISCORD_BOT_TOKEN Remove home/.chezmoitemplates/secrets/DISCORD_CLIENT_ID Remove home/.chezmoitemplates/secrets/DISCORD_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/DOCKERHUB_TOKEN Remove home/.chezmoitemplates/secrets/ELEVENLABS_API_KEY Remove home/.chezmoitemplates/secrets/GITHUB_GIST_TOKEN Remove home/.chezmoitemplates/secrets/GITHUB_READ_TOKEN Remove home/.chezmoitemplates/secrets/GITHUB_TOKEN Remove home/.chezmoitemplates/secrets/GITLAB_READ_TOKEN Remove home/.chezmoitemplates/secrets/GITLAB_TOKEN Remove home/.chezmoitemplates/secrets/GMAIL_PASSWORD Remove home/.chezmoitemplates/secrets/GOOGLE_DRIVE_CLIENT_ID Remove home/.chezmoitemplates/secrets/GOOGLE_DRIVE_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/GOOGLE_DRIVE_PROJECT_ID Remove home/.chezmoitemplates/secrets/GOOGLE_SEARCH_API_KEY Remove home/.chezmoitemplates/secrets/GOOGLE_SEARCH_ID Remove home/.chezmoitemplates/secrets/HEALTHCHECKS_DB_PASSWORD Remove home/.chezmoitemplates/secrets/HEALTHCHECKS_S3_ACCESS_KEY Remove home/.chezmoitemplates/secrets/HEALTHCHECKS_S3_SECRET_KEY Remove home/.chezmoitemplates/secrets/HEALTHCHECKS_SECRET_KEY Remove home/.chezmoitemplates/secrets/HEALTHCHECKS_SUPERUSER_PASSWORD Remove home/.chezmoitemplates/secrets/HEROKU_API_KEY Remove home/.chezmoitemplates/secrets/HISHTORY_USER_SECRET Remove home/.chezmoitemplates/secrets/HOARD_API_TOKEN Remove home/.chezmoitemplates/secrets/IFTTT_WEBHOOK_ID Remove home/.chezmoitemplates/secrets/JFS_RSA_PASSPHRASE Remove home/.chezmoitemplates/secrets/JUICEFS_WEB_TOKEN_DOCKER Remove home/.chezmoitemplates/secrets/JUICEFS_WEB_TOKEN_PRIVATE Remove home/.chezmoitemplates/secrets/JUICEFS_WEB_TOKEN_PUBLIC Remove home/.chezmoitemplates/secrets/JUICEFS_WEB_TOKEN_USER Remove home/.chezmoitemplates/secrets/JUMPCLOUD_CONNECT_KEY Remove home/.chezmoitemplates/secrets/MATRIX_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/MATRIX_HOMESERVER Remove home/.chezmoitemplates/secrets/MATRIX_PASSWORD Remove home/.chezmoitemplates/secrets/MATRIX_ROOM_ID Remove home/.chezmoitemplates/secrets/MATRIX_USERNAME Remove home/.chezmoitemplates/secrets/MINIO_ROOT_PASSWORD Remove home/.chezmoitemplates/secrets/MINIO_ROOT_USER Remove home/.chezmoitemplates/secrets/NETDATA_ROOM Remove home/.chezmoitemplates/secrets/NETDATA_TOKEN Remove home/.chezmoitemplates/secrets/NGINX_AMPLIFY_API_KEY Remove home/.chezmoitemplates/secrets/NGROK_AUTH_TOKEN Remove home/.chezmoitemplates/secrets/NOTIFICO_WEBHOOK_URL Remove home/.chezmoitemplates/secrets/NPM_TOKEN Remove home/.chezmoitemplates/secrets/NTFY_SH_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/OPENAI_API_KEY Remove home/.chezmoitemplates/secrets/OPENWEATHERMAP_API_KEY Remove home/.chezmoitemplates/secrets/OVPN_PASSWORD Remove home/.chezmoitemplates/secrets/OVPN_USERNAME Remove home/.chezmoitemplates/secrets/PEXELS_API_KEY Remove home/.chezmoitemplates/secrets/PORTAINER_ADMIN_PASSWORD Remove home/.chezmoitemplates/secrets/PORTAINER_BUSINESS_LICENSE Remove home/.chezmoitemplates/secrets/PROWL_API_KEY Remove home/.chezmoitemplates/secrets/PROWL_PROVIDER_KEY Remove home/.chezmoitemplates/secrets/PUSHBULLET_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/PUSHBULLET_CLIENT_ID Remove home/.chezmoitemplates/secrets/PUSHBULLET_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/PUSHBULLET_EMAIL Remove home/.chezmoitemplates/secrets/PYPI_TOKEN Remove home/.chezmoitemplates/secrets/RAYCAST_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/RAYCAST_TOKEN Remove home/.chezmoitemplates/secrets/REDDIT_APP_ID Remove home/.chezmoitemplates/secrets/REDDIT_APP_SECRET Remove home/.chezmoitemplates/secrets/REDDIT_PASSWORD Remove home/.chezmoitemplates/secrets/REDDIT_USERNAME Remove home/.chezmoitemplates/secrets/REPLICATE_API_KEY Remove home/.chezmoitemplates/secrets/RESTIC_PASSWORD Remove home/.chezmoitemplates/secrets/RESTIC_SYSTEM_PASSWORD Remove home/.chezmoitemplates/secrets/SENDGRID_API_KEY Remove home/.chezmoitemplates/secrets/SERP_API_KEY Remove home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_PASSWORD Remove home/.chezmoitemplates/secrets/SFTPGO_DEFAULT_ADMIN_USERNAME Remove home/.chezmoitemplates/secrets/SLACK_API_TOKEN Remove home/.chezmoitemplates/secrets/SLACK_BOT_USER_OAUTH_TOKEN Remove home/.chezmoitemplates/secrets/SLACK_CLIENT_ID Remove home/.chezmoitemplates/secrets/SLACK_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/SLACK_WEBHOOK_URL Remove home/.chezmoitemplates/secrets/SNAPCRAFT_MACAROON Remove home/.chezmoitemplates/secrets/SNAPCRAFT_UNBOUND_DISCHARGE Remove home/.chezmoitemplates/secrets/STATPING_ADMIN_PASSWORD Remove home/.chezmoitemplates/secrets/STATPING_API_SECRET Remove home/.chezmoitemplates/secrets/STATPING_DATABASE_PASSWORD Remove home/.chezmoitemplates/secrets/SUDO_PASSWORD Remove home/.chezmoitemplates/secrets/SURGE_LOGIN Remove home/.chezmoitemplates/secrets/SURGE_TOKEN Remove home/.chezmoitemplates/secrets/TAILSCALE_AUTH_KEY Remove home/.chezmoitemplates/secrets/TELEGRAM_BOT_NAME Remove home/.chezmoitemplates/secrets/TELEGRAM_BOT_TOKEN Remove home/.chezmoitemplates/secrets/TELEGRAM_RECIPIENT_ID Remove home/.chezmoitemplates/secrets/TWILIO_ACCOUNT_SID Remove home/.chezmoitemplates/secrets/TWILIO_AUTH_TOKEN Remove home/.chezmoitemplates/secrets/TWILIO_FROM_NUMBER Remove home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN Remove home/.chezmoitemplates/secrets/TWITTER_ACCESS_TOKEN_SECRET Remove home/.chezmoitemplates/secrets/TWITTER_API_KEY Remove home/.chezmoitemplates/secrets/TWITTER_API_KEY_SECRET Remove home/.chezmoitemplates/secrets/TWITTER_OAUTH_CLIENT_ID Remove home/.chezmoitemplates/secrets/TWITTER_OAUTH_CLIENT_SECRET Remove home/.chezmoitemplates/secrets/VAGRANT_CLOUD_TOKEN Remove home/.chezmoitemplates/secrets/VNC_PASSWORD Remove home/.chezmoitemplates/secrets/VNC_READ_PASSWORD Remove home/.chezmoitemplates/secrets/WAKATIME_API_KEY Remove home/.chezmoitemplates/secrets/WASABI_ROOT_ACCESS_KEY Remove home/.chezmoitemplates/secrets/WASABI_ROOT_ACCESS_SECRET Remove home/.chezmoitemplates/secrets/WASABI_USER_ACCESS_KEY Remove home/.chezmoitemplates/secrets/WASABI_USER_ACCESS_SECRET Remove home/.chezmoitemplates/secrets/WEBDAV_PASSWORD Remove home/.chezmoitemplates/secrets/WEBDAV_USER Remove home/.chezmoitemplates/secrets/WINDOWS_11_PRO_KEY Remove home/.chezmoitemplates/secrets/WINDOWS_11_PRO_KEY_ALTERNATE Remove system/etc/wireguard/Mullvad WG Belgium (UDP 4888).conf Remove system/etc/wireguard/Mullvad WG Japan (UDP 4888).conf Remove system/etc/wireguard/Mullvad WG Moldova (UDP 53).conf Remove system/etc/wireguard/Mullvad WG Singapore (UDP 4888).conf Remove system/etc/wireguard/Proton WG Cambodia (UDP 51820).conf Remove system/etc/wireguard/Proton WG Colombia (UDP 51820).conf Remove system/etc/wireguard/Proton WG Cyprus (UDP 51820).conf Remove system/etc/wireguard/Proton WG Serbia (UDP 51820).conf Remove system/etc/wireguard/Proton WG Slovakia (UDP 51820).conf |
||
---|---|---|
.config | ||
.devcontainer | ||
.github | ||
.gitlab | ||
.vscode | ||
docs | ||
home | ||
local | ||
scripts | ||
system | ||
.chezmoiignore | ||
.chezmoiroot | ||
.editorconfig | ||
.gitignore | ||
.gitlab-ci.yml | ||
LICENSE | ||
logo.png | ||
package.json | ||
pnpm-lock.yaml | ||
README.md | ||
sake.yaml | ||
software.yml | ||
start.sh | ||
Taskfile.yml | ||
test.xml | ||
tsconfig.json | ||
Vagrantfile |
Install Doctor, The Desktop Provisioning System
Maintained by Megabyte Labs
A glorious combination of application / theme settings and a performant cross-platform, desktop-oriented software suite.
Table of Contents
- Overview
- Quick Start
- Chezmoi-Based
- Security Focused
- Cross-Platform
- Gas Station
- Chezmoi
- Contributing
- License
Overview
Want to try out a new desktop jam-packed with a whole suite of GitHub's most-starred projects? Install Doctor is a combination of application settings, theme files, and a performant yet flexible software installer written with ZX. It is easily customizable, with optional prompts that ask you for API keys if you want to completely automate everything. The installer supports almost any operating system, just checkout the software.yml file. It uses Chezmoi to apply file changes in an interactive way. It is not your typical Chezmoi project - it is built around the philosophy that you should be able to bash all your computers to bits with a hammer and then resurrect them the next day ✝️️ by storing stateful data to an encrypted S3 bucket and automating desktop configuration as much as possible.
Install Doctor is a cross-platform development environment provisioning system. The project began as an ongoing Ansible project named Gas Station but transitioned to a dotfile-ish approach for easier adoption and less overhead. It is intended for:
- Power users that want to maximize their long-term efficiency by incorporating the most-starred applications / projects / CLIs on GitHub into their stack.
- Users that distro hop but want to retain their favorite tools regardless of whether they are using macOS, Windows, or Linux
- People that want to reformat their computers on a, perhaps, daily basis while retaining stateful elements of their file system by leveraging S3 buckets
- Enthusiasts that want to deploy as many cool, useful tools as possible without having to spend much time configuring their file system
- Perfectionists that love software that behaives as it should, looks gorgeous (desktop preview screenshots below), and performs tasks quickly on any platform
- CLI ninjas that want to bring their set of tools wherever they go
Quick Start
To provision your workstation, you can run the following which will install some basic dependencies (e.g. Chezmoi) and provide interactive prompts where you can personalize your configuration:
bash <(curl -sSL https://install.doctor/start)
If you fork this repository and would like to use your fork as the source, you can still use the command shown above by setting the START_REPO
environment variable. If it is located on GitHub, you can do this by running:
START_REPO=my-gh-user/my-fork-name bash <(curl -sSL https://install.doctor/start)
Alternatively, if you want to host your project on GitLab or another git provider, then just specify the git remote's URL:
START_REPO=git@gitlab.com:megabyte-labs/install.doctor.git bash <(curl -sSL https://install.doctor/start)
Quick Start Notes
- The quick start script is tested on the latest versions of Archlinux, CentOS, Debian, Fedora, macOS, and Ubuntu
- The quick start script is the preferred method of using this project to provision your system
- The script can be configured to be completely headless by specifying environment variables which are detailed below
- Windows support is on the roadmap.
Chezmoi-Based
This project leverages Chezmoi to provide:
- File diffs that show how files are being changed
- Easy-to-use encryption that lets you store private data publicly on GitHub
- A basic set of prompts that accept and integrate API credentials for services like CloudFlare, GitHub, GitLab, and Slack so that your development environment is augmented by free cloud services
Security Focused
This software was built in an adversarial environment. This led towards a focus on security which is why we employ technologies like Firejail, Portmaster, Little Snitch, and Qubes. Whenever possible, Flatpaks are used as the preferred application type. This also led to an emphasis on performance. When your workstation is possibly compromised or you have a good habit of reformatting your workstation on regular basis then it makes sense to use a provisioning system that can restore the workstation to a similar state quicker.
Cross-Platform
This project has been developed with support for Archlinux, CentOS, Fedora, macOS, Ubuntu, and Windows. Almost all the testing has been done on x86_64 systems but the system is flexible enough to be adapted for other systems such as ARM or FreeBSD. A lot of effort has also gone into supporting Qubes which, when fully provisioned, is basically a combination of all the operating systems we have developed this project for.
Custom Software Provisioning System
The project also incorporates a custom ZX script that allows you to choose which package managers you would like to manage your software. It attempts to be as asynchronous as possible without opening the door to errors. The script leverages the software.yml file in the root of this repository to figure out which package manager to use. By default, the installer will choose the most secure option (e.g. Flatpaks are preferred for Linux applications). The installer is more performant and less error-prone than our Ansible variant. It also makes it a lot easier to add software to your stack in such a way that you can keep the software regardless of what operating system you are using by storing everything in the aforementioned software.yml
file.
Beautiful Anywhere
Windows and macOS do a great job of making things look good from a UI perspective out of the box. Linux on the other hand requires some finessing especially when you follow our philosophy of taking many different operating systems and deploying similar software on them. A sizable amount of effort went into customizing the popular Sweet theme and adapting it to our liking. Bells and whistles like a customized GRUB2 and Plymouth theme are included.
Qubes Support
Qubes support is on its way.
Gas Station
This project began as something to supplement our provisioning system that uses Ansible. The system is called Gas Station. It includes hundreds of Ansible roles. If you look at the software.yml
file, you will notice that some of the Ansible roles that Gas Station provides are inside of it. By default, this project will try to install software / dependencies using other, lighter methods before resorting to using Ansible. This is because of the software installer order that is defined at the top of the software.yml file. Gas Station is also still used to house some of the variables / data that this project uses.
Chezmoi
This project uses Chezmoi to orchestrate the provisioning. After calling the quick start script shown above, the quick start script will ensure some dependencies are installed (including Chezmoi) and then initiate Chezmoi. In order to customize this project, you should head over to the Chezmoi documentation to get a better understanding of why some of the files in this repository start with dot_
, run_
, etc.
Resetting Chezmoi
This script is designed to run only the code that is necessary to improve performance. This is accomplished by using .chezmoiscripts
, Chezmoi's onchange_
identifier, and a custom installer written in ZX that is powered by the software definitions in software.yml
.
If there is an error during the provision process or you make changes that are not being run during the provision process then you might want to clear Chezmoi's cache and configuration. This can be done on macOS/Linux by running:
rm -rf ~/.config/chezmoi && rm -rf ~/.cache/chezmoi
Contributing
Contributions, issues, and feature requests are welcome! Feel free to check the issues page. If you would like to contribute, please take a look at the contributing guide.
Sponsorship
Dear Awesome Person,
I create open source projects out of love. Although I have a job, shelter, and as much fast food as I can handle, it would still be pretty cool to be appreciated by the community for something I have spent a lot of time and money on. Please consider sponsoring me! Who knows? Maybe I will be able to quit my job and publish open source full time.
Sincerely,
Brian Zalewski
Affiliates
Below you will find a list of services we leverage that offer special incentives for signing up for their services through our special links:
License
Copyright © 2020-2021 Megabyte LLC. This project is MIT licensed.