• Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    Shell
  • License
    GNU General Publi...
  • Created almost 3 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ› ๏ธ Simple & Extensible Dotfile Manager That Unifies Your Terminal Operations โ›“๏ธ

Oxidizer

CI license code size repo size

Simple & Extensible Dotfile Manager using Rust Toolchains (PRs and Forks are welcome !)

English | ็ฎ€ไฝ“ไธญๆ–‡

Let's Oxidize Development Environments

oxidizer

1. Get Started

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 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 or custom.ps1, check defaults.sh or defaults.ps1. 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:

  • Cross-Platform (mainly Rust toolchains)
  • Minimal Dependencies & Minimal Installation
  • Extensible Architecture
  • Unified Interface & Smooth Usage
  • Super-Fast! (loading time < 1 s)

2.1. CLI Tools Replacement

โ˜‘๏ธ means required in the installation.

  • coreutils
  • non-coreutils
    • Use fd instead of find
    • Use hyperfine instead of time
    • Use ripgrep instead of grep
    • Use tealdeer instead of tldr or man
    • Use zoxide instead of cd or z
    • Use dust instead of du
    • Use procs instead of ps
    • Use tokei instead of cloc
    • Use tre instead of tree
    • Use starship instead of powerline10k or ohmyposh

Nushell is a cross-platform written in Rust, but it doesn't support dynamical path for the moment.

2.2. TUI Tools Replacement

  • Use bottom instead of top or htop
  • Use gitui instead of lazygit
  • Use helix instead of neovim
  • Use zellij instead of tmux (Not support Windows yet)

2.3. GUI Tools Replacement

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

2.4. Other Useful Rust Tools

  • ouch: Painless compression and decompression tool
  • pueue: Command-line task management tool for sequential and parallel execution of long-running tasks.
  • espanso: Text Expander written in Rust (try it for fun!)
  • kondo: A tool to clean dependencies and build artefacts from your projects.
  • navi: An interactive cheatsheet tool for the command-line
  • onefetch: Command-line Git information tool

2.5. 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-Zsh and OxPlugins-PowerShell

Plugin Linux macOS Windows Autoload?
Brew โœ… โœ… โŒ โœ…
Scoop โŒ โŒ โœ… โœ…
Pueue โœ… โœ… โœ… โœ…
System โœ…ยน โœ… โœ… โœ…
Utility โœ… โœ… โœ… โœ…
Git โœ… โœ… โœ…
Bitwarden ๐Ÿ•’ ๐Ÿ•’ ๐Ÿ•’
Conan โœ… โœ… โœ…
Conda โœ… โœ… โœ…
Julia โœ… โœ… ๐Ÿšง
Jupyter โœ… โœ… โœ…
Node โœ… โœ… โœ…
Rust โœ… โœ… โœ…
Espanso โœ… โœ… โœ…
TeXLive โœ… โœ… โœ…
VSCode โœ… โœ… โœ…
Containerยฒ โœ… โœ… โœ…
Helix ๐Ÿ•’ ๐Ÿ•’ ๐Ÿ•’
Formats ๐Ÿ•’ ๐Ÿ•’ ๐Ÿ•’
Weather ๐Ÿ•’ ๐Ÿ•’ ๐Ÿ•’
Notes ๐Ÿ•’ ๐Ÿ•’ ๐Ÿ•’

โœ…: complete functionality ๐Ÿšง: partial functionality ๐Ÿ•’: basic functionality, needs more features โŒ: not exist

ยน: Currently, on Linux only provide with Debian-family shortcuts

ยฒ: Only for Docker and Podman.

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

3. File Management

design

  • frf
    • refresh file by source
  • edf
    • edit file by $EDITOR (default: VSCode)
  • brf
    • file: browse by bat / cat
    • folder: browse by lsd / ls
  • ipf
    • overwrite system configurations by customized (backup) files
  • epf
    • export system configurations to back up folder
  • iif
    • overwrite system configurations in by Oxidizer defaults.

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

When you use epf 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 Abbreviation Corresponding File
oxidizer ox custom.sh
zsh zs .zshrc
powershell ps Profile.ps1
linux (debian) sc /etc/apt/sources.list
wezterm wz wezterm.lua
conda c .condarc
git g .gitconfig
git gi .gitignore
conan cn conan.conf
conan cnr remotes.json
conan cnd profiles/default
espanso es default.yml
espanso esb match/base.yml
espanso esx_ match/packages
helix hx config.toml
helix hxl languages.toml
julia jl startup.jl
julia jlx julia-pkgs.txt
julia jlp Project.toml
julia jlm Manifest.toml
jupyter jn jupyter_notebook_config.py
latex tl texlive-pkgs
node nj .npmrc
node njx node-pkgs.txt
pueue pu pueue.yml
pueue pua pueue_aliases.yml
cargo cg config.toml
rustup rs settings.toml
starship ss starship.toml
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

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

  • zpf: compress file
  • uzpf: decompress file
  • lzpf: list items in the compressed file

4. Software Information Management

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

  • back_*
    • file: export package/extension info into $OX_BACKUP folder
  • up_*
    • file: install packages/extensions by predefined files in $OX_BACKUP
  • clean_*
    • file: clean package/extension info by predefined files in $OX_BACKUP folder

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 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 โœ… โœ… โœ… โœ… โœ… โœ…
*rdp 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

  • brew: bisp, biscp, bupp
  • scoop: sisp, supp

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 conan cn
*ii init/create โœ… โœ… โœ… โœ… โœ… โœ…
*b build โœ… โœ… โœ…
*r run โœ… โœ… โœ… โœ… โœ…
*ed edit โœ…
*ca cat โœ… โœ…
*ln link โœ…
*ts test โœ… โœ… โœ… โœ… โœ…
*au audit โœ… โœ…
*fx fix โœ… โœ… โœ…
*pb publish โœ… โœ…

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

  • ox-macos: autoloaded, contains alias and functions for mas
  • ox-debians: autoloaded, contains alias and functions for apt
  • ox-windows: autoloaded, contains alias and functions for winget and wsl
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

  • bis: brew install
  • bris: brew reinstall

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

  • bisc: brew install --cask

  • brisc: brew reinstall --cask

  • bupc: brew upgrade --cask

  • bupg: brew upgrade --greedy

  • 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.

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

  • ceat: activate environment
    • $1 length = 0: activate base env
    • $1 length = 1 or 2: activate predefined env OX_CONDA_ENV
    • $1 length > 2: activate new env

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
  • cerat: reactivate environment, works live ceat
  • ceq: quit environment (q is for kill/quit)
  • cecr: create
  • cerm: remove environment, works live ceat but won't remove base env
  • cels: environment list
  • cedf: compare packages between conda environments
  • cern: renames an existing environment
  • cesd: change environment's conda-forge subdir
    • i: for osx-64 or linux-64 or win-64
    • a: for osx-arm64 or linux-aarch64 or win-arm64
    • p: for ppc64le
    • s: for linux-s390x
  • ceep: export environment

6. Further Reading

7. Credits

8. License

This work is released under the GPL-v3 license.