Minimalistic & Extensible Dotfile Manager using Rust Toolchains (PRs and Forks are welcome !)
Let's Oxidize Development Environments
For macOS / Linux (Intel)
git clone --depth=1 https://github.com/ivaquero/oxidizer.git && bash oxidizer/install.sh
# customize path for Oxidizer
export OXIDIZER=$HOME/oxidizer
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
git clone --depth=1 https://github.com/ivaquero/oxidizer.git; . oxidizer\install.ps1
# customize path for Oxidizer
$env:OXIDIZER = "$HOME\oxidizer"
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
fromSet-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
or custom.ps1
, check defaults.sh or defaults.ps1. Open custom.sh
or custom.ps1
by following command
ef ox
To keep up the updates, simply use upox
function.
Oxidizer is originally 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)
โ๏ธ means required in the installation.
- Use
bat
instead ofcat
- Use
fd
instead offind
- Use
gitui
instead oflazygit
- Use
lsd
instead ofls
- Use
lsd --tree
instead oftree
- Use
ripgrep
instead ofgrep
- Use
sd
instead ofsed
- Use
tealdeer
instead oftldr
orman
- Use
zoxide
instead ofcd
orz.lua
- Use
bottom
instead oftop
orhtop
- Use
dust
instead ofdu
- Use
tokei
instead ofcloc
- Use
starship
instead ofpowerline10k
orohmyposh
- Use
tectonic
instead ofxetex
orxelatex
- Use
WezTerm
orAlacritty
instead ofiTerm2
orWindows Terminal
- Use
Helix
instead ofNeoVim
- Use
Zellij
instead ofTMux
(Not support Windows yet) - Use
Joshuto
instead ofRanger
(Not support Windows yet)
Nushell
is a cross-platform written in Rust, but it doesn't support dynamical path for the moment.
-
pueue
: Command-line task management tool for sequential and parallel execution of long-running tasks. -
hyperfine
: Command-line benchmarking tool -
navi
: An interactive cheatsheet tool for the command-line -
espanso
: Text Expander written in Rust (try it for fun!)
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 11. Writing A Plugin
for details.
Plugin | Linux | macOS | Windows | Autoload? | |
---|---|---|---|---|---|
1 | Brew | โ | โ | โ | โ |
2 | Scoop | โ | โ | โ | โ |
3 | Zap | โ | โ | โ | โ |
4 | Pueue | โ | โ | โ | โ |
5 | System | โ ยน | โ | โ | โ |
6 | Utility | โ | โ | โ | โ |
7 | Git | โ | โ | โ | |
8 | Bitwarden | ๐ | ๐ | ๐ | |
9 | Conan | โ | โ | โ | |
10 | Conda | โ | โ | โ | |
11 | Docker | โ | โ | โ | |
12 | Julia | โ | โ | ๐ง | |
13 | Jupyter | โ | โ | โ | |
14 | Node | โ | โ | ๐ง | |
15 | Podman | โ | โ | โ | |
16 | Ruby | ๐ | ๐ | ๐ | |
17 | Rust | โ | โ | โ | |
18 | Espanso | โ | โ | โ | |
19 | TeXLive | โ | โ | โ | |
20 | VSCode | โ | โ | โ | |
21 | Formats | ๐ | ๐ | ๐ | |
22 | Helix | ๐ | ๐ | ๐ |
โ : complete functionality ๐ง: partial functionality ๐: basic functionality, needs more features โ: not exist
ยน: Currently, on Linux only provide with Debian-family shortcuts.
Oxidizer uses Homebrew or Scoop to manage packages and software programs to bypass the requirement of administrator privilege.
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 lists the information of specific configuration files:
Origin | Abbreviation | Corresponding File |
---|---|---|
oxidizer | ox |
custom.sh |
zsh | zs |
.zshrc |
powershell | ps |
Profile.ps1 |
wezterm | wz |
wezterm.lua |
conda | c |
.condarc |
git | g |
.gitconfig |
git | gi |
.gitignore |
conan | cn |
default |
conan | cnr |
remote.json |
espanso | es |
default.yml |
espanso | esm |
match/base.yml |
espanso | esx |
espanso-pkgs |
helix | hx |
config.toml |
helix | hxl |
languages.toml |
julia | jl |
julia-pkgs.txt |
julia | jls |
startup.jl |
julia | jlp |
Project.toml |
julia | jlm |
Manifest.toml |
latex | tl |
texlive-pkgs |
node | nj |
node-pkgs.txt |
pueue | pu |
pueue.yml |
pueue | pua |
pueue_aliases.yml |
cargo | cg |
env |
cargo | cg_ |
.cargo |
vscode | vs |
settings.json |
vscode | vsk |
keybindings.json |
vscode | vss_ |
snippets |
vscode | vsx |
vscode-pkgs.txt |
winget | w |
winget.json |
zellij | zj |
config.kdl |
zellij | zjl_ |
layouts |
_
denotes a folder
init_*
- file: install packages/extensions by Oxidizer defaults
up_*
- file: install packages/extensions by predefined files in
$BACKUP
- file: install packages/extensions by predefined files in
back_*
- file: export package/extension info to
$BACKUP
folder
- file: export package/extension info to
init_*
works for brew
, scoop
, conda
, vscode
, espanso
; up_*
and back_*
work for brew
, scoop
, conda
, vscode
, espanso
, julia
, texlive
, node
.
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] | gem [rb] | julia [jl] | 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 | โ | โ | โ | โ | ||||||
*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
- 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.
Similarly, 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] | scoop [s] | 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 the package managers shortcuts are included in corresponding system plugins.
ox-macos
[oxpm]: autoloaded, containsmas
.ox-apt
[oxpa]: autoloadedox-windows
[oxpw]: autoloaded, containswinget
,wsl
ox-zap
[oxzp]: autoloaded
Action | mas [m] | apt [a] | zap [zp] | 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 |
-
Integrated
aria2
to download Homebrew Casks (requirearia2
installed) -
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,q
is for quit.
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$1
length = 0: activatebase
env$1
length = 1 or 2: activate predefined envConda_Env
$1
length > 2: activate new env
Conda_Env
can be personalized in custom.sh
For example, assume your environment's 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 liveceat
ceq
: quit environment (q
is forkill/quit
)cecr
: createcerm
: remove environment, works liveceat
but won't removebase
envcels
: environment listcedf
: compare packages between conda environmentscern
: renames an existing environmentcesd
: change environment'sconda-forge subdir
ceep
: export environment
Oxidizer's task & service management follows the same philosophy of package management, i.e. to provide unified interfaces to facilitate workflows.
Action | pueue [pu] | espanso [es] | docker container [dc] |
podman container [pc] |
brew services [bs] |
|
---|---|---|---|---|---|---|
*h |
help | โ | โ | โ | โ | โ |
*df |
diff | โ | โ | |||
*cl |
clean | โ | โ | โ | โ | |
*ls |
list | โ | โ | โ | ||
*st |
status | โ | โ | โ | โ | |
*s |
start | โ | โ | โ | โ | โ |
*rs |
restart | โ | โ | โ | โ | โ |
*pa |
pause | โ | โ | โ | ||
*upa |
unpause | โ | โ | |||
*pa |
pause | โ | โ | โ | ||
*q |
kill / stop | โ | โ | โ | โ | โ |
*rt |
reset | โ | ||||
*a |
add / create | โ | โ | โ | โ | |
*rm |
remove | โ | โ | โ | ||
*e |
edit | โ | โ | |||
*if |
info | โ | โ | |||
*r |
run | โ | โ | |||
*at |
attach | โ | โ |
Action | git [g] | git tag [gt] | docker image [di] |
podman image [pi] |
bitwarden [bw] | |
---|---|---|---|---|---|---|
*ii |
init | โ | ||||
*df |
diff | โ | โ | |||
*cl |
clean | โ | โ | โ | ||
*ls |
list | โ | โ | โ | โ | |
*st |
status | โ | ||||
*a |
add | โ | โ | โ | ||
*rm |
remove | โ | โ | โ | โ | |
*pl |
pull | โ | โ | โ | โ | |
*ps |
push | โ | โ | โ | ||
*cf |
config | โ | โ |
- delete ignored files in
.gitignore
:gig
- find fat blob files:
gjk
- integration of
git filter-repo
command- clean files by size bigger than
gcl -s
- clean files by id
gcl -i
- clean files by path
gcl -p
- clean files by size bigger than
- Convert markdown:
mdto
- to PDF with Unicode (for CJK)
mdto [filename] [format]
update
: update systemclean
clean
: empty trashclean bdl
: cleanHomebrew
downloaded filesclean cc
: clean cache files in$HOME/Library/Caches/
clean log
: clean logsclean vs
: cleanVSCode
cache files
allow
: allow installation of uncertified apps
A plugin in Oxidizer is referred 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 similarly
$Global:Oxygen.oxpvi = "plugin_path"
And add it into PLUGINS
object in custom.ps1
A system / software / tool configuration file in Oxidizer is referred as Element, set it like what you do with Oxygen
# macOS / Linux
Element[vi]=$HOME/.vimrc
# Windows
$Global:Element.vi = "$HOME/.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_ = "$HOME/vim"
A backup file in Oxidizer is referred 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.
This work is released under the GPL-v3 licence.