From 9641ad8d2bfbc955031c7e4bb7385f2ecf74d531 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 21 Jan 2026 03:43:02 +0800 Subject: [PATCH 1/6] =?UTF-8?q?gentoo=5Fportage:=20=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E5=AE=89=E8=A3=85=20wps=5Foffice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/package.accept_keywords | 4 +++- gentoo_portage/package.mask | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gentoo_portage/package.accept_keywords b/gentoo_portage/package.accept_keywords index 85cda8d..4a9700e 100644 --- a/gentoo_portage/package.accept_keywords +++ b/gentoo_portage/package.accept_keywords @@ -37,4 +37,6 @@ media-sound/bluez-alsa ~amd64 */*-bin ~amd64 net-wireless/iwgtk ~amd64 -sys-fs/jmtpfs ~amd64 \ No newline at end of file +sys-fs/jmtpfs ~amd64 + +app-office/wps-office ~amd64 diff --git a/gentoo_portage/package.mask b/gentoo_portage/package.mask index f410843..ab95d1e 100644 --- a/gentoo_portage/package.mask +++ b/gentoo_portage/package.mask @@ -1,3 +1,2 @@ -app-office/wps-office::gentoo-zh dev-lang/rust net-proxy/shadowsocks-rust::gentoo-zh From 6e473f13c05b2e66fa78b47a14ae09866e771a91 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Fri, 23 Jan 2026 17:33:27 +0800 Subject: [PATCH 2/6] =?UTF-8?q?account.org.gpg:=20=E8=AE=B0=E5=BD=95=20QR?= =?UTF-8?q?=20Code=20Toolkit=20=E6=8F=92=E4=BB=B6=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- note/account.org.gpg | Bin 2907 -> 4391 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/note/account.org.gpg b/note/account.org.gpg index 763a48389da9f267614c0132cce07b32f04ff14f..9abc1cc66928b7f8733b29187e7a47bde6373bcd 100644 GIT binary patch literal 4391 zcmV+?5!mj90Sp73f@FT-kgh2K2mew9=%c(&C?Q4Tkse${1x0R2uIlqfYQu{Gs4q9% z@H{Xd7a6G>K$M%|tl9lzaO6Z9j_416a@>QydTnwo=>MzlI!wP@da?wJHTTgk6;480fhi&;1|w zeQJ3{CiEC@qUb^zDfiKtKgu4F*JLn?HyVQI)-onJ$3+7}r0+ktEcWZ~>P*PqF30x! zGeift=eV0&IjdoPxt}1}=Ec(L0c`>upQshlzhhp- zP5;f;r~+qY`M1>c5-a-kPHVlf2}>+m_f1S7mN2IJp^M->Jbs1KHhiwjA&4x9jGxPE?9ZTG z1C4mIBQS$*s7D46{Xh%VKQ&cPWW_Y(j>-GbZtPXr75JuhQcN%INUq@HU5+qm z{j<4Zr7NS&pw!K3ho<-MWH8%qDJUYAl>n)GnoA z{`xk>9lJLzd6R)Kh$0;$;c+n;WBm|qY2Oqb5)bx1%fDs+vj~?B zUgowM^osuIZ`bDxWJV^qA>Qp
?`fO|Xab7iBC4tv>RUV0xj<>H&(3GFiqA+)!P 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 literal 2907 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 F?D8(LrY8UZ From b919f036c308d91cfa832e216fa7e91e7b7ce4fb Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 21 Feb 2026 17:04:37 +0800 Subject: [PATCH 3/6] =?UTF-8?q?gentoo=5Fportage:=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=8C=E8=BF=9B=E5=88=B6=E5=8C=85=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/binrepos.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gentoo_portage/binrepos.conf b/gentoo_portage/binrepos.conf index 7edf8c1..d26a7b3 100644 --- a/gentoo_portage/binrepos.conf +++ b/gentoo_portage/binrepos.conf @@ -1,3 +1,4 @@ [binhost] priority = 9999 -sync-uri = http://mirrors.ustc.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64/ \ No newline at end of file +sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64/ +# sync-uri = http://mirrors.ustc.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64/ \ No newline at end of file From 50fd893fa4560d8b060c5242c4f090628bf5400b Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 16 Mar 2026 18:18:11 +0800 Subject: [PATCH 4/6] gentoo_portage: change accept_keywords for tree-sitter and rustup --- gentoo_portage/package.accept_keywords | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gentoo_portage/package.accept_keywords b/gentoo_portage/package.accept_keywords index 4a9700e..8960daf 100644 --- a/gentoo_portage/package.accept_keywords +++ b/gentoo_portage/package.accept_keywords @@ -12,7 +12,7 @@ app-i18n/fcitx-rime ~amd64 app-i18n/librime ~amd64 # tree sitter -dev-libs/tree-sitter* ~amd64 +# dev-libs/tree-sitter* ~amd64 # audroid studio dev-util/android-studio::gentoo ~amd64 @@ -40,3 +40,6 @@ net-wireless/iwgtk ~amd64 sys-fs/jmtpfs ~amd64 app-office/wps-office ~amd64 + +# rustup +dev-util/rustup ~amd64 From b8f0c66d876289a6beaea1dc4c75c2060d9d28a4 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 16 Mar 2026 18:17:29 +0800 Subject: [PATCH 5/6] gentoo_portage: change use flag for dependencies of watchman --- gentoo_portage/package.use | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gentoo_portage/package.use b/gentoo_portage/package.use index 03b0f3e..e8052c9 100644 --- a/gentoo_portage/package.use +++ b/gentoo_portage/package.use @@ -114,4 +114,7 @@ llvm-core/clang xml llvm-core/llvm xml # freetype -media-libs/freetype harfbuzz \ No newline at end of file +media-libs/freetype harfbuzz + +# watchman +dev-cpp/glog gflags From 9ce32f5670a89e05f3fe3001143479e4123a4766 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 16 Mar 2026 18:23:38 +0800 Subject: [PATCH 6/6] dot: change bash configuration --- dot/.bashrc | 40 +++------ dot/.bashrc.d/android-studio.bash | 11 +++ dot/.bashrc.d/fnm.bash | 44 ++++++++++ dot/.bashrc.d/function.bash | 136 ++++++++++++++++++++++++++++++ dot/.bashrc.d/mise.bash | 28 ++++++ dot/.bashrc.d/pip-search.bash | 10 +++ dot/.bashrc.d/pnpm.bash | 24 ++++++ dot/.bashrc.d/proxy.bash | 50 +++++++++++ dot/.bashrc.d/rust.bash | 17 ++++ dot/.bashrc.d/volta.bash | 25 ++++++ 10 files changed, 358 insertions(+), 27 deletions(-) create mode 100644 dot/.bashrc.d/android-studio.bash create mode 100644 dot/.bashrc.d/fnm.bash create mode 100644 dot/.bashrc.d/function.bash create mode 100644 dot/.bashrc.d/mise.bash create mode 100644 dot/.bashrc.d/pip-search.bash create mode 100755 dot/.bashrc.d/pnpm.bash create mode 100644 dot/.bashrc.d/proxy.bash create mode 100644 dot/.bashrc.d/rust.bash create mode 100644 dot/.bashrc.d/volta.bash diff --git a/dot/.bashrc b/dot/.bashrc index 6771d8e..54cebf1 100644 --- a/dot/.bashrc +++ b/dot/.bashrc @@ -23,18 +23,13 @@ HISTCONTROL=ignoreboth # export CCACHE_DIR="/var/cache/ccache" export GPG_TTY=$(tty) -export PATH="~/.local/bin${PATH:+:}$PATH" +export PATH="${HOME}/.local/bin${PATH:+:}$PATH" alias ll="ls -l" alias la="ls -a" alias lh="ls -lh" alias lha="ls -lha" -PROXY_SHELL_FILE="$(realpath ~/.bash_proxy.sh)" -if [[ -e $PROXY_SHELL_FILE ]] ; then - . $PROXY_SHELL_FILE -fi - if [[ "$TERM" == "linux" ]]; then PS1="(tty) $PS1" elif [[ "$TERM" == "fbterm" ]]; then @@ -48,26 +43,17 @@ elif [[ "${TERM}" != "tmux-256color" ]] && [[ -z "${TERM_PROGRAM}" ]] && [[ -x $ tmux fi -alias pip='function _pip() { - if [ $1 == "search" ]; then - pip_search "$2"; - else pip "$@"; - fi; -};_pip' +# bash completion error +if [[ -n $(type -t _comp__split_longopt) ]] && [[ -z $(type -t _split_longopt) ]]; then + alias _split_longopt="_comp__split_longopt" +fi -# pnpm -export PNPM_HOME="$(realpath ~/.local/share/pnpm)" -export PATH="$PNPM_HOME:$PATH" -# pnpm end -# tabtab source for packages -# uninstall by removing these lines -[ -f ~/.config/tabtab/bash/__tabtab.bash ] && . ~/.config/tabtab/bash/__tabtab.bash || true - -clean-pnpm-node() { - if [[ -d "$PNPM_HOME" ]]; then - rm -f "$PNPM_HOME/nodejs_current" - rm -f "$PNPM_HOME/node" - rm -f "$PNPM_HOME/npm" - rm -f "$PNPM_HOME/npx" +for _ in ${HOME}/.bashrc.d/*; do + if [[ $_ == *.@(bash|sh) && -r $_ ]]; then + source "$_" fi -} +done + +if [[ -n "$(type -t mise-activate)" ]]; then + mise-activate +fi diff --git a/dot/.bashrc.d/android-studio.bash b/dot/.bashrc.d/android-studio.bash new file mode 100644 index 0000000..a1fbd7f --- /dev/null +++ b/dot/.bashrc.d/android-studio.bash @@ -0,0 +1,11 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +export JAVA_HOME="/opt/android-studio/jbr" +export ANDROID_HOME="${HOME}/Android/Sdk" +export NDK_HOME="$ANDROID_HOME/ndk/$(ls -1 $ANDROID_HOME/ndk)" + +add-to-path "${ANDROID_HOME}/emulator" "${ANDROID_HOME}/platform-tools" + diff --git a/dot/.bashrc.d/fnm.bash b/dot/.bashrc.d/fnm.bash new file mode 100644 index 0000000..35fa523 --- /dev/null +++ b/dot/.bashrc.d/fnm.bash @@ -0,0 +1,44 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +if [[ -e "$(type -p fnm)" ]]; then + generate-bash-completion fnm "fnm completions --shell bash" + + fnm-activate() { + hash -r + eval "$(fnm env --use-on-cd --version-file-strategy=recursive)" + export FNM_NODE_DIST_MIRROR="https://npmmirror.com/mirrors/node" + + __fnmcd() { + \cd "$@" || return $? + unhash-command-in-dirs "$FNM_MULTISHELL_PATH"/bin + __fnm_use_if_file_found + } + } + + fnm-deactivate() { + if [[ "$(type -t cd)" == "alias" ]]; then + unalias cd + fi + + if [[ -z "$FNM_MULTISHELL_PATH" ]]; then + return 0 + fi + + local fnm_multishell="$(dirname "$FNM_MULTISHELL_PATH")" + local -a envs=$(compgen -v | grep '^FNM_') + local -a all_tmp_dir=("$fnm_multishell"/*) + local -a bin_paths=("$fnm_multishell"/*/bin) + + remove-from-path "${bin_paths[@]}" + unhash-command-in-dirs "${bin_paths[@]}" + rm -rf "${all_tmp_dir[@]}" + + local var + for var in $envs; do + unset "$var" + done + } +fi diff --git a/dot/.bashrc.d/function.bash b/dot/.bashrc.d/function.bash new file mode 100644 index 0000000..3fef356 --- /dev/null +++ b/dot/.bashrc.d/function.bash @@ -0,0 +1,136 @@ +generate-bash-completion() { + local file="$1" + local command="$2" + + if [[ -z "$file" || -z "$command" ]]; then + echo "usage: generate-bash-completion " >&2 + echo "example: generate-bash-completion mycmd '_mycmd_completion'" >&2 + return 1 + fi + + local completion_dir="${HOME}/.local/share/bash-completion/completions" + local completion_file="$(realpath -m "${completion_dir}/${file}")" + + if [[ -d "$completion_dir" && ! -w "$completion_dir" ]]; then + echo "ERROR: has no permission to write to directory '${completion_dir}'" >&2 + return 1 + fi + + if [[ ! -f "$completion_file" ]]; then + if ! mkdir -p "$completion_dir"; then + echo "ERROR: cannot create directory '$completion_dir'" >&2 + return 1 + fi + + if ! bash -c "$command" > "$completion_file"; then + echo "ERROR: failed to execute command '$command'" >&2 + rm -f "$completion_file" + return 1 + fi + fi +} + +add-to-path() { + if [[ $# -eq 0 ]]; then + echo "usage: add-to-path [path2 ...]" >&2 + echo "example: add-to-path /usr/local/bin /tmp/my-dir" >&2 + return 1 + fi + + local -a dirs=("$@") + local dir + local dir_normalized + local new_path="$PATH" + + for dir in "${dirs[@]}"; do + [[ -z "$dir" ]] && continue + + dir_normalized="${dir%/}" + if [[ ! -d "$dir_normalized" ]]; then + echo "WARNING: '${dir}' is not a valid directory, skipped." >&2 + continue + fi + + case ":${new_path}:" in + *":${dir_normalized}:"*) ;; + *) + new_path="${dir_normalized}${new_path:+:}${new_path}" + ;; + esac + done + + if [[ "$new_path" != "$PATH" ]]; then + export PATH="$new_path" + fi +} + +remove-from-path() { + if [[ $# -eq 0 ]]; then + echo "usage: remove-from-path [path2 ...]" >&2 + echo "example: remove-from-path /usr/local/bin /tmp/my-dir" >&2 + return 1 + fi + + local original_ifs="$IFS" + + local -a remove_paths=("$@") + local new_path="" + local path + local remove_path + local path_normalized + local remove_path_normalized + local -i keep_path=1 # 1=keep, 0=remove + + IFS=':' + for path in $PATH; do + [[ -z "$path" ]] && continue + + path_normalized="${path%/}" # remove / at tail + keep_path=1 + + for remove_path in "${remove_paths[@]}"; do + remove_path_normalized="${remove_path%/}" + if [[ "$path_normalized" == "$remove_path_normalized" ]]; then + keep_path=0 + break + fi + done + + if [[ $keep_path -eq 1 ]]; then + new_path="${new_path}${new_path:+:}${path}" + fi + done + IFS="$original_ifs" + + export PATH="${new_path}" +} + +show-path() { + echo "$PATH" | tr ':' '\n' | nl -w2 -s'. ' +} + +unhash-command-in-dirs() { + if [[ $# -eq 0 ]]; then + echo "usage: unhash-command-in-dir [dir2 ...]" >&2 + echo "example: unhash-command-in-dir ~/.local/bin/ ~/.volta/bin/" >&2 + return 1 + fi + + local -a dirs=("$1") + local dir + local dir_normalized + local file_path + local filename + for dir in "${dirs[@]}"; do + [[ -z "$dir" || ! -d "$dir" ]] && continue + + dir_normalized="${dir%/}" + + for file_path in "$dir_normalized"/*; do + [[ ! -f "$file_path" || ! -x "$file_path" ]] && continue + + filename="$(basename "$file_path")" + hash -d "$filename" 2>/dev/null + done + done +} diff --git a/dot/.bashrc.d/mise.bash b/dot/.bashrc.d/mise.bash new file mode 100644 index 0000000..1bceb9d --- /dev/null +++ b/dot/.bashrc.d/mise.bash @@ -0,0 +1,28 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +if [[ -x $(type -p mise) ]]; then + completion_cmd="mise completion --include-bash-completion-lib bash" + generate-bash-completion mise "$completion_cmd" + unset completion_cmd + + mise-activate() { + eval "$(mise activate bash)" + } + + mise-deactivate() { + mise deactivate + + if [[ "$(type -p cd)" == "function" ]]; then + unset cd + fi + + local all_mise=$(compgen -v | grep -i '_mise') + local mise + for mise in $all_mise; do + unset "$mise" + done + } +fi diff --git a/dot/.bashrc.d/pip-search.bash b/dot/.bashrc.d/pip-search.bash new file mode 100644 index 0000000..1a5d8f5 --- /dev/null +++ b/dot/.bashrc.d/pip-search.bash @@ -0,0 +1,10 @@ +if [[ -x $(type -p pip_search) ]]; then + function _pip() { + if [[ "$1" == "search" ]]; then + pip_search "$2" + else + pip "$@" + fi + } + alias pip=_pip +fi diff --git a/dot/.bashrc.d/pnpm.bash b/dot/.bashrc.d/pnpm.bash new file mode 100755 index 0000000..57633fd --- /dev/null +++ b/dot/.bashrc.d/pnpm.bash @@ -0,0 +1,24 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +export PNPM_HOME="${HOME}/.local/share/pnpm" +add-to-path $PNPM_HOME + +if [[ -x "$(type -p pnpm)" ]]; then + generate-bash-completion pnpm "pnpm completion bash" +fi + +if [[ -x "$(type -p npm)" ]]; then + generate-bash-completion npm "npm completion" +fi + +clean-pnpm-node() { + if [[ -d "$PNPM_HOME" ]]; then + rm -f "$[PNPM_HOME]/nodejs_current" + rm -f "${PNPM_HOME}/node" + rm -f "${PNPM_HOME}/npm" + rm -f "${PNPM_HOME}/npx" + fi +} diff --git a/dot/.bashrc.d/proxy.bash b/dot/.bashrc.d/proxy.bash new file mode 100644 index 0000000..a632e09 --- /dev/null +++ b/dot/.bashrc.d/proxy.bash @@ -0,0 +1,50 @@ +HTTP_PROXY="http://192.168.1.13:20172" +SOCKS_PROXY="socks5://192.168.1.13:20170" + +set-shell-proxy() { + export http_proxy="$HTTP_PROXY" + export https_proxy="$HTTP_PROXY" +} + +unset-shell-proxy() { + unset http_proxy + unset https_proxy +} + +set-git-proxy() { + prefix_cmd="" + flag="--global" + if [[ "$1" == "-s" ]]; then + prefix_cmd="sudo" + flag="--system" + elif [[ "$1" == "-l" ]]; then + flag="--local" + fi + + $prefix_cmd git config $flag http.proxy $HTTP_PROXY + $prefix_cmd git config $flag http.sslVerify false +} + +unset-git-proxy() { + prefix_cmd="" + flag="--global" + if [[ "$1" == "-s" ]]; then + prefix_cmd="sudo" + flag="--system" + elif [[ "$1" == "-l" ]]; then + flag="--local" + fi + + $prefix_cmd git config $flag --unset http.proxy + $prefix_cmd git config $flag --unset http.sslVerify +} + +set-npm-proxy() { + npm config set proxy $HTTP_PROXY + npm config set https-proxy $HTTP_PROXY +} + +unset-npm-proxy() { + npm config delete proxy + npm config delete https-proxy +} diff --git a/dot/.bashrc.d/rust.bash b/dot/.bashrc.d/rust.bash new file mode 100644 index 0000000..bda869e --- /dev/null +++ b/dot/.bashrc.d/rust.bash @@ -0,0 +1,17 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +if [[ -d "${HOME}/.cargo/bin" ]]; then + add-to-path "${HOME}/.cargo/bin" +fi + +if [[ -e "${HOME}/.cargo/env" ]]; then + . "${HOME}/.cargo/env" +fi + +if [[ -x "$(type -p rustup)" ]]; then + generate-bash-completion rustup "rustup completions bash cargo" + generate-bash-completion cargo "rustup completions bash cargo" +fi diff --git a/dot/.bashrc.d/volta.bash b/dot/.bashrc.d/volta.bash new file mode 100644 index 0000000..8d3d572 --- /dev/null +++ b/dot/.bashrc.d/volta.bash @@ -0,0 +1,25 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +export VOLTA_HOME="${HOME}/.volta" + +if [[ -x $(type -p volta) || -x "${VOLTA_HOME}/bin/volta" ]]; then + generate-bash-completion volta "volta completions bash" + + volta-activate() { + add-to-path "${VOLTA_HOME}/bin" + + # enable pnpm support + # export VOLTA_FEATURE_PNPM=1 + } + + volta-deactivate() { + local bin_dir="${VOLTA_HOME}/bin" + remove-from-path "$bin_dir" + unhash-command-in-dirs "$bin_dir" + } +fi + +