ivaquero / oxidizer

🛠️ Simple & Extensible Dotfile Manager That Unifies Your Terminal Operations ⛓️
GNU General Public License v3.0
135 stars 14 forks source link
cross-platform dotfiles-manager homebrew powershell scoop wezterm zsh

Oxidizer

CI license code size repo size

A Simple & Extensible Dotfile Manager That Unifies Your Terminal Operations

English | 简体中文

Let's Oxidize Development Environments

oxidizer

1. Get Started

For macOS / Linux (Intel)

export OXIDIZER=$HOME/oxidizer
git clone --depth=1 https://github.com/ivaquero/oxidizer.git $OXIDIZER && bash oxidizer/install.sh

Note that Homebrew is an essential dependency for Oxidizer on macOS / Linux. For China mainland users, you may set BREW_CN variable to install Homebrew through domestic mirror

export BREW_CN=1

Note that Oxidizer only support limited functionality on Linux-on-ARM yet.

For Windows

$env:OXIDIZER = "$HOME\oxidizer"
git clone --depth=1 https://github.com/ivaquero/oxidizer.git $env:OXIDIZER; . oxidizer\install.ps1

Note that Scoop is an essential dependency for Oxidizer on Windows. For China mainland users, you may set SCOOP_CN variable to install Scoop through domestic mirror

$env:scoop_mirror = 1

For Cmder users, you need to remove the -Options ReadOnly from Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly in the last line of %CMDER_ROOT%\vendor\profile.ps1.

After installation, you might personalize your preference in custom.sh, check defaults.sh. Open custom.sh or custom.ps1 by following command

edf ox

To keep up the updates, simply use upox function.

2. Motivation

Oxidizer is originally designed for non-administrator users. It saves your time from repetitive and tedious setups of coding environments, and it aims to provide with following features:

2.1. CLI Tools Replacement

☑️ means required in the installation.

2.2. GUI Tools Replacement

WezTerm is more recommended because it has a built-in multiplexer.

2.3. Other Useful Rust Tools

2.4. Summary of Plugins

Oxidizer is designed to be extensible, you can personalize OX_PLUGINS in custom.sh to load the plugins by your need.

Of course, you are allowed to write your own plugins, see Writing A Plugin for details.

The plugins are hosted in oxplugins as well as oxplugins-powershell.

Plugin Abbr. Category Support Must?
oxpbg Better to Have Git
oxpom OS Shortcuts macOS
oxpod OS Shortcuts Debian-Based Systems
oxpor OS Shortcuts RedHat-Based Systems
oxpow OS Shortcuts Windows (include winget)
oxppb Package Manager Homebrew (macOS & Linux)
oxpps Package Manager Scoop (Windows)
oxppc Package Manager Conda (Multi-Languages)
oxppcn Package Manager Conan (C++)
oxppn Package Manager NPM (JavaScript)
oxpptl Package Manager tlmgr (TeXLive)
oxpljl Programming Language Julia
oxplrb Programming Language Ruby (include gem)
oxplrs Programming Language Rust (include cargo, rustup)
oxpsc Service Container (Docker & Podman)
oxpsp Service Pueue
oxpcbw App CLI Bitwarden
oxpces App CLI Espanso
oxpcjr App CLI Jupyter (notebook / lab, book)
oxpcvs App CLI VSCode
oxpuf System Utils File Operation
oxpufm System Utils Formats Conversion
oxpunw System Utils Network Configuration
oxptwr Terminal Utils Weather (wttr-based)
oxptzj Terminal Utils Zellij (macOS & Linux)
oxpxns Extra Utils Notes Apps (Obsidian & Logseq)

To load a plugin, simply add its abbreviation into the OX_PLUGINS array of ~/oxidizer/custom.sh, like

OX_PLUGINS=(
    oxpbg
    oxpufm
    oxplrs
)

Oxidizer uses Homebrew or Scoop to manage packages and software programs to bypass the requirement of administrator privilege.

3. File Management

design

For example, if you want to edit ~/.zshrc, you can type edf zs.

When you use oxf zs, ~/.zshrc will be copied and save in $OX_BACKUP/shell folder, where $OX_BACKUP is the backup path that can be personalized in $OXIDIZER/custom.sh. As mentioned in Get Started, you can open custom.sh simply by edf ox.

The table below lists the information of specific configuration files:

Origin File Abbr. File in Plugin
oxidizer ox custom.sh
zsh zs .zshrc built-in
starship ss starship.toml built-in
wezterm wz wezterm.lua custom.sh
debian sc /etc/apt/sources.list oxpod
scoop w config.json oxpps
winget w settings.json oxpow
git gi .gitignore oxpbg
git g .gitconfig oxpbg
conda c .condarc oxppc
conan cn conan.conf oxppcn
conan cnr remotes.json oxppcn
conan cnd profiles/default oxppcn
javascript jsx js-pkgs.txt oxppn
npm n .npmrc oxppn
latex tl texlive-pkgs oxpptl
julia jl startup.jl oxpljl
cargo cg config.toml oxlrs
rustup rs settings.toml oxlrs
espanso es default.yml oxpces
espanso esb match/base.yml oxpces
espanso esx_ match/packages oxpces
vscode vs settings.json oxpcvs
vscode vsk keybindings.json oxpcvs
vscode vss_ snippets oxpcvs
vscode vsx vscode-pkgs.txt oxpcvs
jupyter jr jupyter_notebook_config.py oxpcjr
pueue pu pueue.yml oxpsp
pueue pua pueue_aliases.yml oxpsp
zellij zj config.kdl oxptzj
zellij zjl_ layouts oxptzj

_ denotes a folder, and you can check these abbreviations closely by brf [Plugin Abbr.] or edf [Plugin Abbr.].

Oxidizer uses ouch to deal with compression and decompression, and provides with 3 shortcuts

4. Software Information Management

back_* and up_* work for brew, scoop, conda, vscode (only for windows), julia, tlmgr, npm. clean_* works for brew and conda.

5. Package Management

Oxidizer aims to provide a unified interface for all package manager-related commands to reduce typing and memory burden of command-line users.

Suffix Action brew b scoop s conda c npm n cargo cg rustup rs julia jl gem rb conan cn tlmgr tl
*h help
*cf config
*is install
*us uninstall
*up update
*ups update self
*ls list
*lv leaves
*sc search
*cl clean
*if info
*st status
*ck check
*pn pin
*upn unpin
*dp depends
*dpr needs
*xa add repo
*xrm remove repo
*xls list repo

Particularly, Oxidizer provides with two groups of experimental functions with suffix p for installing and downloading packages in parallel

For example, when you have more than 1 packages to install, instead of using bis [pkg1] [pkg2] , you can use bisp [pkg1] [pkg2] then the packages will be downloaded and installed in parallel.

Similarly, biscp, bupp, are the parallel version of bisc, bup, respectively.

Before using parallel functions, pueue service need to be enabled by

# All OS
pueued -d
# or macOS / Linux
bss pu

Some package managers also have functionality of project management

Suffix Action brew b scoop s conda c npm n cargo cg rustup rs julia jl gem rb conan cn
*ii init
*cr create
*b build
*r run
*ed edit
*ct cat
*ln link
*ts test
*au audit
*fx fix
*pb publish

Some of the package managers shortcuts are included in corresponding system plugins.

Suffix Action mas m apt a winget w wsl wl
*h help
*is install
*us uninstall
*up update
*ups update self
*ls list
*lv leaves
*sc search
*cl clean
*if info
*st status
*ck check
*dp depends
*xa add repo
*xrm remove repo
*xls list repo

5.1. Homebrew

suffix c is a flag to specify brew commands only work on casks

5.2. Conda

Note that some shortcuts of the ox-conda plugin is based on the package conda-tree that you need to install

conda install -c conda-forge conda-tree

Besides the shortcuts mentioned above in Package Management, the conda plugin also provides with Conda environment management shortcuts which start with ce

OX_CONDA_ENV can be personalized in custom.sh

For example, assume your environment's name is hello, you can set

# macOS / Linux
OX_CONDA_ENV[h]="hello"
# Windows
$Global:OX_CONDA_ENV.h = "hello"

then, you will be able to manipulate the environment by

# create environment
cecr h
# remove environment
cerm h
# update all packages in the specific environment
cup h
# list all packages in the specific environment
cls h

6. Project Management

6.1. Git

for aliases, check .gitconfig in defaults folder by edf oxg

7. Further Reading

8. Credits

9. License

This work is released under the GPL-v3 license.