通过 docker 容器和 tmoe 工具箱定制其他 unix | linux 系统不同用户名主目录 zsh 扩展插件

通过 docker 容器和 tmoe 工具箱定制其他 unix | linux 系统不同用户名主目录 zsh 扩展插件

#docker,#tmoe,#unix,#macos,#zsh,#linux,

先运行 docker 容器

# -e 'TZ=Asia/Shanghai' 好像没生效
docker run --rm \
           -e 'DEBIAN_FRONTEND=noninteractive' \
           -e 'TZ=Asia/Shanghai' \
           --name 'test' \
           -it -v './test:/test' \
           docker.io/ubuntu:latest \
           bash

更新并安装 curl sudo 和 tzdata

apt update 
apt -y install curl sudo tzdata

更新时区

ln -fsv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
dpkg-reconfigure --frontend noninteractive tzdata

根据 unix | linux 用户名和主目录,容器内自定义创建对应的用户名、用户主目录和密码

# 假设用户名是 469138946ba5fa
export USERS=469138946ba5fa HOMES=/Users/469138946ba5fa PASSWORDS=123456
mkdir -pv $HOMES
# 赋权
chmod -Rv 775 $HOMES
# 添加自定义用户和目录并绑定
useradd -m -d $HOMES $USERS
# 赋予目录用户权限
chown $USERS:$USERS $HOMES
# 改密码
echo $USERS:$PASSWORDS | chpasswd
echo "sudo免密码的用户是:$USERS"
echo "如需密码密码是:$PASSWORDS"

用户 sudo 免密码

cat << EOF | sudo tee test.sh
sudo touch /etc/sudoers.d/$USERS
sudo chown -Rv $USERS:$USERS  /etc/sudoers.d/$USERS
sudo chmod -Rv 0777 /etc/sudoers.d/$USERS
echo "$USERS ALL=(ALL) NOPASSWD:ALL" | sudo tee > /etc/sudoers.d/$USERS
sudo chown -Rv root:root  /etc/sudoers.d/$USERS
sudo chown -Rv root:wheel  /etc/sudoers.d/$USERS
sudo chmod -Rv 0440 /etc/sudoers.d/$USERS
sudo cat /etc/sudoers.d/$USERS
EOF
sudo bash -c "bash test.sh ; rm -frv test.sh"

进入用户主目录,并用 bash 作为 shell

su - $USERS -s /bin/bash
# 看看主目录是否正确
pwd

安装 tmoe 工具箱

cd $TMPDIR || cd /tmp
curl -LO https://l.tmoe.me/2.awk
awk -f 2.awk

使用工具箱安装 zsh 插件流程

我主题选择的 177 也就是随机,这样,我每次打开终端都会展示不同的主题效果

这个流程要有点想象力
y y y
<Manager> -> 6 🌈 Configure zsh -> 1 🍭 Installation and configuration 安装与配置 -> <round> -> 177

安装完成 zsh 和 zsh 插件之后,修改配置文件参数

可能是脚本配置问题,随机主题环境变量找不到,所以我给补上了

exa 也被 eza 替代了

config_file="$HOME/.zinit/themes/_local/random/random.zsh-theme"
# 使用 sed 在第一行添加内容
sed -i '1i ZSH_CUSTOM=$HOME/.zinit/omz' "$config_file"
# 使用 sed 替换 exa 为 eza
sed -i 's;exa;eza;g' "$HOME/.zshrc"
# 使用 bat 替代 cat 添加 lcat 和 cat 别名
echo "alias lcat=/bin/cat" >> "$HOME/.zshrc"
echo "alias cat='bat -p'" >> "$HOME/.zshrc"
# 输入 zsh 看看效果
zsh

获取当前时区时间

DATES=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d_%H-%M-%S')
echo $DATES

以下两种zsh扩展插件配置备份还原方式二选一或者全都要都行

tar.xz 备份还原

# 选择 tar.xz 备份至$HOME/tmoe-zsh_$DATES.tar.xz
tar -PJpcf - $HOME/.zshrc $HOME/.zinit $HOME/.z $HOME/.zsh_history $HOME/.config/tmoe-zsh/git $HOME/.p10k.zsh $HOME/.local/bin/zshtheme $HOME/.local/bin/zsh-i | (pv -p --timer --rate --bytes > $HOME/tmoe-zsh_$DATES.tar.xz)

# 将备份包从容器中拿出来
sudo cp -fv $HOME/tmoe-zsh_$DATES.tar.xz /test/tmoe-zsh.tar.xz

# 开启新的终端,终止容器
docker stop test

# 到对应  unix | linux  系统目录,安装zsh插件支持 command-not-found fonts-powerline binutils zsh bat eza fzf tar xz-utils pv tree zstd unzip p7zip
# 比如 macos 可以用 
brew install binutils zsh bat eza fzf xz pv tree zstd unzip p7zip
# 比如 debian 可以用 
sudo apt install command-not-found fonts-powerline binutils zsh bat eza fzf tar xz-utils pv tree zstd unzip p7zip

# 备份  unix | linux  系统 zsh 原始配置文件和历史记录文件
cp -fv $HOME/.zshrc $HOME/.zshrc.bak
cp -fv $HOME/.zsh_history $HOME/.zsh_history.bak

# 选择将 tar.xz 放到目标  unix | linux  系统,然后还原至对应$HOME
# tar -PpJxvf tmoe-zsh.tar.xz
pv tmoe-zsh.tar.xz | tar -PpJx

tar.gz 备份还原

# 选择 tar.gz 备份至$HOME/tmoe-zsh_$DATES.tar.gz
tar -Ppczf - $HOME/.zshrc $HOME/.zinit $HOME/.z $HOME/.zsh_history $HOME/.config/tmoe-zsh/git $HOME/.p10k.zsh $HOME/.local/bin/zshtheme $HOME/.local/bin/zsh-i | (pv -p --timer --rate --bytes > $HOME/tmoe-zsh_$DATES.tar.gz)

# 将备份包从容器中拿出来
sudo cp -fv $HOME/tmoe-zsh_$DATES.tar.gz /test/tmoe-zsh.tar.gz

# 打开新的终端,退出容器
docker stop test

# 到对应  unix | linux  系统目录,安装zsh插件支持 command-not-found fonts-powerline binutils zsh bat eza fzf tar xz-utils pv tree zstd unzip p7zip
# 比如 macos 可以用 
brew install binutils zsh bat eza fzf xz pv tree zstd unzip p7zip
# 比如 debian 可以用 
sudo apt install command-not-found fonts-powerline binutils zsh bat eza fzf tar xz-utils pv tree zstd unzip p7zip

# 备份  unix | linux  系统 zsh 原始配置文件和历史记录文件
cp -fv $HOME/.zshrc $HOME/.zshrc.bak
cp -fv $HOME/.zsh_history $HOME/.zsh_history.bak

# 选择将 tar.gz 放到目标  unix | linux  系统,然后还原至对应$HOME
# tar -Ppzxvf tmoe-zsh.tar.gz
pv tmoe-zsh.tar.gz | tar -Ppzx

.zinit 目录赋予权限

chmod -Rv 755 $HOME/.zinit

将默认 shell 设置为 zsh 这可能需要输入你的密码

chsh -s $(command -v zsh)

将 $HOME/.zshrc.bak 中你自定义的环境变量追加到 $HOME/.zshrc 中,这样你的二进制文件识别将被保留

将 $HOME/.zsh_history.bak 历史命令记录文件内容追加到 新的 $HOME/.zsh_history 中,这样你的历史命令将保留

cat $HOME/.zsh_history.bak >> $HOME/.zsh_history

重启终端,至此,你应该能看到自己的终端随机主题、支持补全、高亮、lst等功能了吧

关于tmoe zsh安装的插件以及其功能

-----------
应用名称 APP NAME:bat
命令COMMAND:bat
alias lcat=/bin/cat
alias cat='bat -p'
bat是cat的替代品,支持多语言语法高亮。
用法示例:bat -l zsh /etc/os-release
输入bat -L获取支持的语言
lcat命令为原版cat
------------
应用名称 APP NAME:eza
命令COMMAND:eza
alias lls=ls
alias l="eza -lbah"
若您的系统满足依赖条件,则ls将alias为exa.
exa是一款优秀的ls替代品,拥有更好的文件展示体验,输出结果更快,使用rust编写。
Exa is a modern version of ls.
输入l,将显示当前目录的文件列表。
输入lst,将展示类似于tree的树状列表。
输入lls,使用原版ls
------------
插件名称PLUGIN NAME:z
命令COMMAND:z
Description:记录访问目录,输z获取,输$(z 目录名称)快速跳转
若您曾访问过~/sd/Download,则您可以输z Down或z load来快速跳转,访问列表可以输 z获取。
------------
插件名称PLUGIN NAME:colored-man-pages
命令COMMAND:man
Description: man手册彩色输出 This plugin adds colors to man pages..
输入man 软件包或命令名称获取该软件包的文档。
用法示例:man ssh高亮显示ssh-client的文档(用户手册)。
man bash获取bash的用户手册。
------------
插件名称PLUGIN NAME:extract
命令COMMAND:x
例如某文件名为233.tar.xz,则您无需输tar -Jxf 233.tar.xz,只需输x 233.tar.xz。
同理,若另一文件为233.7z,则您只需输入x 233.7z即可解压。
注意:您在解压前必须先安装相关依赖,例如:zip需要unzip,7z需要p7zip,zst需要zstd, 安装方法类似于eatmydata apt install -y zstd
-----------
插件名称PLUGIN NAME:sudo
Description: 按两下ESC键,可以在当前命令前加上sudo前缀.
------------
Other
补全插件:输入已知命令或函数的部分字符后,按下TAB键⇄
用法示例:输入zsht后,按下⇄补全为zshtheme,按下空格,再按下TAB键
------------
插件名称PLUGIN NAME:zsh-autosuggestions
历史记录插件用法:输入曾输过的命令,按方向键上↑或右→进行补全。
------------

参考

GitHub - 2moe/tmoe: TMOE, More Optional Environments.

序章 - 天萌参考手册

主题预览

Comments