oxidizer
oxidizer copied to clipboard
๐ ๏ธ Simple & Extensible Dotfile Manager That Unifies Your Terminal Operations โ๏ธ
Oxidizer.sh
Minimalistic & Extensible Dotfile Management Solution using Rust Toolchains (PRs and Forks are welcome !)
English | ็ฎไฝไธญๆ
Let's Oxidize Development Environments

1. Get Started
For macOS / Linux
# define path for Oxidizer
export OXIDIZER=$HOME/oxidizer
git clone --depth=1 https://github.com/ivaquero/oxidizer.sh.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
For Windows
# define path for Oxidizer
$env:OXIDIZER = "$env:USERPROFILE\oxidizer"
git clone --depth=1 https://github.com/ivaquero/oxidizer.sh.git $env:OXIDIZER
. $env: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
After installation, you might personalize your preference in custom.sh (check demo-custom.sh). Open custom.sh by following command
ef ox
To keep up the updates, simply use upox function.
2. Philosophy
Oxidizer is origenally designed for non-administrator users. It quickly sets up a minimal but powerful coding environment, and it aims to provide with following features:
- Cross-Platform (Mainly Rust Tool chains)
- Minimal dependencies & Minimal Installation
- Extensible Architecture
- Unified Interface & Smooth Usage
- Super-Fast! (Loading time < 1 s)
3. Oxidization Progress
3.1. Command Line Replacement (Recommand all following)
โ๏ธ means required in the installation.
- [x] Use
batinstead ofcat - [x] Use
fdinstead offind - [x] Use
gituiinstead oflazygit - [x] Use
lsdinstead ofls - [x] Use
ls --treeinstead oftree - [x] Use
ripgrepinstead ofgrep - [x] Use
sdinstead ofsed - [x] Use
tealdeerinstead oftldrorman - [x] Use
zoxideinstead ofcdorz.lua - [ ] Use
bottominstead oftoporhtop - [ ] Use
dustinstead ofdu - [ ] Use
tokeiinstead ofcloc
3.2. Software Replacement
- [ ] Use
WezTerminstead ofiTerm2orWindows Terminal(not required, but strongly recommended) - [ ] Use
Helixinstead ofNeoVim - [ ] Use
Nushellinstead ofZshorPowershell
For
Nushell: Its nu language is new and will add learning cost. If you'd love to try something new, see oxidizer-next.
3.3. Other Useful Rust Tools
- [x]
pueue: Command-line task management tool for sequential and parallel execution of long-running tasks. - [x]
hyperfine: Command-line benchmarking tool - [ ]
delta: A syntax-highlighting pager for git, diff, and grep output - [ ]
mdbook: A utility to create modern online books from Markdown files.
3.4. Summary of Plugins
Oxidizer is designed to be extensible, you can personalize PLUGINS in custom.sh to load the plugins by your need.
Of course, you are allowed to write your own plugins, see 10. Writing A Plugin for details.
| index | Plugin | Linux | macOS | Windows | required ? |
|---|---|---|---|---|---|
| 1 | Brew | โ | โ | โ | โ |
| 2 | Scoop | โ | โ | โ | โ |
| 3 | Utility | โ | โ | โ | โ |
| 4 | System | โ ยน | โ | โ | โ |
| 5 | Pueue | โ | โ | โ | โ |
| 6 | Git | โ | โ | โ | |
| 7 | Conan | โ | โ | โ | |
| 8 | Conda | โ | โ | โ | |
| 9 | Docker | โ | โ | โ | |
| 10 | Julia | โ | โ | ๐ง | |
| 11 | Node | โ | โ | โ | |
| 12 | Rust | โ | โ | โ | |
| 13 | TeXLive | โ | โ | โ | |
| 14 | VS Code | โ | โ | โ | |
| 15 | Formats | ๐ | ๐ | ๐ | |
| 16 | Widgets | ๐ | ๐ | ๐ | |
| 17 | NeoVim | ||||
| 18 | Helix |
โ : complete functionality ๐ง: partial functionality ๐: basic functionality, needs more features โ: not exist
ยน: Currently, on Linux only provide with Ubuntu-specific shortcuts.
Oxidizer uses Homebrew or Scoop to manage packages and softwares to bypass the requirement of administrator privilege.
For Linux users, you can try to add Homebrew tap Hombrew-Linux to install GUI Applications.
4. File Management

ff- refresh file by
source
- refresh file by
ef- file: edit by
$EDITOR(default: VSCode)
- file: edit by
bf- file: browse by
bat/cat - folder: browse by
lsd/ls
- file: browse by
ipf- file: overwrite system configurations by customized (backup) files
epf- file: export system configurations to back up folder
iif- file: overwrite system configurations in by Oxidizer defaults.
For example, if you want to edit ~/.zshrc, you can type ef zs.
When you use epf zs, ~/.zshrc will be copied and save in $BACKUP/shell folder, where $BACKUP is the backup path that can be personalized in $OXIDIZER/custom.sh. As mentioned in 1. Get Started, you can open custom.sh simply by ef ox.
The table below shows the informatioin of specific configuration files.
| Origin | Abbr. | Corresponding File |
|---|---|---|
| oxidizer | ox |
custom.sh |
| zsh | zs |
.zshrc |
| powershell | ps |
Profile.ps1 |
| wezterm | wz |
wezterm.lua |
| aria2 | ar |
aria2.conf |
| conda | c |
.condarc |
| git | g |
.gitconfig |
| conan | cn |
default |
| conan | cnr |
remote.json |
| helix | hx |
config.toml |
| helix | hxl |
languages.toml |
| julia | jls |
startup.jl |
| julia | jlp |
Project.toml |
| julia | jlm |
Manifest.toml |
| pueue | pu |
pueue.yml |
| pueue | pua |
pueue_aliases.yml |
| cargo | cg |
env |
| cargo | cg_ |
.cargo |
| neovim | nv |
init.lua |
| neovim | nvp |
plugins.lua |
| neovim | nvv |
init.vim |
| vim | vi |
.vimrc |
| vscode | vs |
settings.json |
| vscode | vsk |
keybindings.json |
| vscode | vss_ |
snippets |
| winget | w |
settings.json |
_denotes folder
5. Software management
back_*- file: export package/extension configurations to
$BACKUPfolder
- file: export package/extension configurations to
up_*- file: update package/extension configurations in
$BACKUPfolder to system
- file: update package/extension configurations in
init_*- file: install by package/extension configuration files in
$Oxygen/installfolder
- file: install by package/extension configuration files in
More specifically
back_conda: backup Conda package list$BACKUPfolderback_node: backup NodeJS package list to$BACKUPfolderback_julia: backup Julia package list$BACKUPfolderback_texlive: backup TeXLive collection list$BACKUPfolderback_vscode: backup VSCode extension list$BACKUPfolder
update_* and init_* work similarly.
5.1. NeoVim
For NeoVim, a pure Lua configuration (using init.lua ) is recommended instead of classic Vim configuration (using init.vim ).
However, if you would like to the native vim but haven't configure it, you can try Oxidizer's default configuration by iif vi.
5.2. TeXLive
6. 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.
| action | brew [b] | scoop [s] | conda [c] | npm [n] | cargo [cg] | rustup [rs] | julia [jl] | conan [cn] | tlmgr [tl] | |
|---|---|---|---|---|---|---|---|---|---|---|
*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 | โ | โ | โ | โ | โ | โ | |||
*pn |
pin | โ | โ | |||||||
*upn |
unpin | โ | โ | |||||||
*dp |
depends | โ | โ | |||||||
*dpt |
depend tree | โ | โ |
Particularly, Oxidizer provides with two groups of experimental functions with suffix p for installing and downloading packages in parallel
- brew:
bisp,biscp,bupp,bupap - scoop:
sisp,supp
For example, when you have more than 1 packages to install, instead of using bis [pkg1] [pkg1], you can use bisp [pkg1] [pkg1] then the packages will be downloaded and installed in parallel.
Similary, biscp, bupp, bupap are the parallel version of bisc, bup, bupa, 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
| action | brew [b] | conda [c] | npm [n] | cargo [cg] | rustup [rs] | julia [jl] | conan [cn] | |
|---|---|---|---|---|---|---|---|---|
*ii |
init | โ | โ | โ | โ | โ | ||
*b |
build | โ | โ | โ | ||||
*r |
run | โ | โ | โ | โ | โ | ||
*e |
edit | โ | โ | |||||
*ts |
test | โ | โ | โ | โ | โ | ||
*pb |
publish | โ | โ |
Some of package manager shortcuts are included in corresponding system plugins.
zsh-macos[zsm]: auto-loaded, containsmas.zsh-ubuntu[zsub]: containsaptpwsh-windows[pswd]: auto-loaded, containswinget,wsl.
| action | apt [ub] | winget [app] | wsl [wl] | mas [app] | |
|---|---|---|---|---|---|
*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 | โ | |||
*pn |
pin | ||||
*upn |
unpin | ||||
*dp |
depends | โ | |||
*dpt |
depend tree |
6.1. Homebrew
-
[x] Integrated Aria2 to download Homebrew Casks
-
[x] Enable Homebrew installation by using pre-download installers
-
bis: brew install -
bris: brew reinstall
suffix c is a flag to specify brew commands only work on casks
bisc: brew install --caskbrisc: brew reinstall --caskbupc: brew upgrade --cask
suffix a is for all which will force brew to upgrade every cask including ones with auto_update flags
-
bupa: brew upgrade --greedy -
bdl: download brew cask byaria2 -
brp: replace brew cache file by pre-downloaded file -
bmr: using brew mirror -
bmrq: reset brew git source to official repositories,qis for quit.
6.2. Conda
Note that the conda plugin is based on mamba (a parallel version of conda) and conda-tree, so you need to install mamba by
conda install -c conda-forge mamba conda-tree
Besides the shortcuts mentioned above in 6. Package Management, the conda plugin also provides with Conda environment management shortcuts which start with ce
ceat: activate environment$1length = 0: activatebaseenv$1length = 1 or 2: activate predefined envConda_Env$1length > 2: activate new env
Conda_Env can be personalize in custom.sh
For example, if you conda environment name is hello, you can set
# macOS / Linux
Conda_Env[h]="hello"
# Windows
$global: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
cerat: reactivate environment, works liveceatceq: quit environment (qis forkill/quit)cecr: createcerm: remove environment, works liveceatbut won't removebaseenvcels: environment listcesd: change environment's conda-forge subdirceep: export environment
7. Project & Task Management
Oxidizer's task & system management follows the same phylosopy of package management, i.e. to provide unified interfaces to faciliate workflows.
| action | git [g] | docker container [dkc] |
docker image [dki] |
lima [lm] | pueue [pu] | brew services [bs] |
|
|---|---|---|---|---|---|---|---|
*h |
help | โ | โ | โ | โ | ||
*ii |
init | โ | |||||
*df |
diff | โ | โ | ||||
*cl |
clean | โ | โ | โ | โ | โ | |
*ls |
list | โ | โ | โ | โ | ||
*st |
status | โ | โ | ||||
*s |
start | โ | โ | โ | โ | ||
*rs |
restart | โ | โ | โ | |||
*pa |
pause | โ | โ | ||||
*q |
kill / stop | โ | โ | โ | โ | ||
*rt |
reset | โ | โ | ||||
*a |
add | โ | โ | ||||
*rm |
remove | โ | โ | โ | โ | ||
*e |
edit | โ | โ | ||||
*pl |
pull | โ | โ | ||||
*ps |
push | โ | โ | ||||
*if |
info | โ | โ | โ |
7.1. Git
- [x] delete ignored files in
.gitignore:gig - [x] find fat blob files:
gjk - [ ] integration of
git filter-repocommand- [x] clean files by size bigger than
gcl -s - [x] clean files by id
gcl -i - [x] clean files by path
gcl -p
- [x] clean files by size bigger than
7.2. Docker
7.3. Pueue
7.4. Homebrew Services
8. Utils Management
8.1. Formats
- [x] Convert markdown:
mdto- [x] to PDF with Unicode (for CJK)
mdto [filename] [format]
8.2. Widgets
- [x] Weather report (using wttr/in)
wtr [location]
9. System Management
9.1. macOS
update: update systemcleanclean: empty trashclean bdl: clean homebrew downloaded filesclean cc: clean cache files in$HOME/Library/Caches/clean log: clean logs
allow: allow installation of uncertified apps
9.2. Linux
10. Writing A Plugin
A plugin in Oxidizer is refered as Oxygen, a key-value object whose key starts with oxp.
For a Vim plugin on macOS / Linux, you can write
Oxygen[oxpvi]=plugin_path
And add the key of Oxygen into PLUGINS object in custom.sh like
PLUGINS=(oxp1 oxp2 oxpvi)
For Windows users, do these in a similar way
$global:Oxygen.oxpvi = "plugin_path"
And add it into PLUGINS object in custom.ps1
10.1. Config Files
A system / software / tool configuration file in Oxidizer is refered as Element, set it like what you do with Oxygen
# macOS / Linux
Element[vi]=$HOME/.vimrc
# Windows
$global:Element.vi = "$env:USERPROFILE/.vimrc"
If you need to set a folder in Oxygen, plus a _ as the suffix of the key.
# macOS / Linux
Element[vi_]=$HOME/.vim
# Windows
$global:Element.vi_ = "$env:USERPROFILE/vim"
10.2. Backup Files
A backup file in Oxidizer is refered as Oxide whose key starts with bk, set it like
# macOS / Linux
Oxide[bkvi]=$BACKUP/.vimrc
# Windows
$global:Oxide.bkvi = "$env:BACKUP/.vimrc"
Do remember the key in Oxygen, Element, Oxide must be consistent: oxvi, vi, bkvi works, others don't.
11. Credits
12. License
This work is released under the GPL-v3 license.