From ec3103412f41e13cc2d8c6585c099084a7782413 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Fri, 19 Jun 2026 16:20:21 +0800 Subject: [PATCH 1/6] =?UTF-8?q?account:=20=E6=9B=B4=E6=96=B0=E7=9F=A5?= =?UTF-8?q?=E4=B9=8E=E8=B4=A6=E5=8F=B7=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- note/account.org.gpg | Bin 4391 -> 4395 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/note/account.org.gpg b/note/account.org.gpg index 9abc1cc66928b7f8733b29187e7a47bde6373bcd..803414110b3b084fb2a966ac51422148b7102bc9 100644 GIT binary patch literal 4395 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 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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 From 50fd5e907618ec133dfb057d8a60e5f8c353424d Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 6 Jul 2026 23:05:11 +0800 Subject: [PATCH 2/6] =?UTF-8?q?gentoo=5Fportage:=20=E6=9B=B4=E6=96=B0=20ge?= =?UTF-8?q?ntoo-zh=20=E4=BB=93=E5=BA=93=20git=20=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/repos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gentoo_portage/repos.conf b/gentoo_portage/repos.conf index 6337ff6..8de7549 100644 --- a/gentoo_portage/repos.conf +++ b/gentoo_portage/repos.conf @@ -33,7 +33,7 @@ sync-webrsync-verify-signature = yes [gentoo-zh] location = /var/db/repos/gentoo-zh sync-type = git -sync-uri = https://github.com/microcai/gentoo-zh.git +sync-uri = https://github.com/gentoo-zh/overlay.git auto-sync = yes [gentoo-zedhugh] From 1a6fa5c1a3ed8c60a55e3d9f0f83a1fa0960b22a Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 7 Jul 2026 04:10:21 +0800 Subject: [PATCH 3/6] =?UTF-8?q?gentoo=5Fportage:=20=E7=94=A8=207zip=20?= =?UTF-8?q?=E4=BB=A3=E6=9B=BF=E6=97=A7=E7=89=88=E6=9C=AC=E7=9A=84=20p7zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/package.license | 2 +- gentoo_portage/package.use | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gentoo_portage/package.license b/gentoo_portage/package.license index 60d5580..eb309ed 100644 --- a/gentoo_portage/package.license +++ b/gentoo_portage/package.license @@ -1,4 +1,4 @@ -app-arch/p7zip unRAR +app-arch/7zip unRAR app-editors/cursor cursor app-editors/vscode Microsoft-vscode app-emulation/virtualbox-bin PUEL diff --git a/gentoo_portage/package.use b/gentoo_portage/package.use index f8b8a37..5bf1495 100644 --- a/gentoo_portage/package.use +++ b/gentoo_portage/package.use @@ -21,8 +21,8 @@ x11-terms/rxvt-unicode 256-color blink fading-colors pixbuf unicode3 app-editors/emacs cairo dynamic-loading gtk gui gzip-el harfbuzz json libxml2 sound source sqlite tree-sitter wide-int app-emacs/emacs-common gui -# p7zip -app-arch/p7zip rar -wxwidgets +# 7zip +app-arch/7zip rar # vim app-editors/vim lua python From 77509f565a02781ea75592351e3876e535f71857 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 11 Jul 2026 02:20:11 +0800 Subject: [PATCH 4/6] =?UTF-8?q?dot:=20=E9=87=8D=E6=9E=84=20bashrc.d=20?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=88=E5=8C=85=EF=BC=89=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=99=A8=E8=84=9A=E6=9C=AC=E5=8A=A0=E8=BD=BD=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 mise、rust 等管理器脚本移入 manager/ 子目录,与工具脚本区分 - mise/volta 的补全改到各自 activate 函数内延迟生成,避免未激活时执行 - 新增 uv/uvx 的 bash 补全 - .bashrc 拆分为先加载 manager/ 再加载顶层脚本的两段流程 - .xprofile 改用 bash 解释并复用相同的脚本加载流程 --- dot/.bashrc | 8 +++++++- dot/.bashrc.d/{ => manager}/mise.bash | 9 ++++----- dot/.bashrc.d/{ => manager}/rust.bash | 2 +- dot/.bashrc.d/uv.bash | 12 +++++++++++ dot/.bashrc.d/volta.bash | 3 +-- dot/.xprofile | 29 ++++++++++++++++++--------- 6 files changed, 44 insertions(+), 19 deletions(-) rename dot/.bashrc.d/{ => manager}/mise.bash (71%) rename dot/.bashrc.d/{ => manager}/rust.bash (91%) create mode 100644 dot/.bashrc.d/uv.bash diff --git a/dot/.bashrc b/dot/.bashrc index 54cebf1..2e4a849 100644 --- a/dot/.bashrc +++ b/dot/.bashrc @@ -48,7 +48,7 @@ if [[ -n $(type -t _comp__split_longopt) ]] && [[ -z $(type -t _split_longopt) ] alias _split_longopt="_comp__split_longopt" fi -for _ in ${HOME}/.bashrc.d/*; do +for _ in ${HOME}/.bashrc.d/manager/*; do if [[ $_ == *.@(bash|sh) && -r $_ ]]; then source "$_" fi @@ -57,3 +57,9 @@ done if [[ -n "$(type -t mise-activate)" ]]; then mise-activate fi + +for _ in ${HOME}/.bashrc.d/*; do + if [[ $_ == *.@(bash|sh) && -r $_ ]]; then + source "$_" + fi +done diff --git a/dot/.bashrc.d/mise.bash b/dot/.bashrc.d/manager/mise.bash similarity index 71% rename from dot/.bashrc.d/mise.bash rename to dot/.bashrc.d/manager/mise.bash index 1bceb9d..2431341 100644 --- a/dot/.bashrc.d/mise.bash +++ b/dot/.bashrc.d/manager/mise.bash @@ -1,15 +1,14 @@ basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) -source "${basedir}/function.bash" +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)" + + local completion_cmd="mise completion --include-bash-completion-lib bash" + generate-bash-completion mise "$completion_cmd" } mise-deactivate() { diff --git a/dot/.bashrc.d/rust.bash b/dot/.bashrc.d/manager/rust.bash similarity index 91% rename from dot/.bashrc.d/rust.bash rename to dot/.bashrc.d/manager/rust.bash index bda869e..730ce0d 100644 --- a/dot/.bashrc.d/rust.bash +++ b/dot/.bashrc.d/manager/rust.bash @@ -1,5 +1,5 @@ basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) -source "${basedir}/function.bash" +source "${basedir}/../function.bash" unset basedir diff --git a/dot/.bashrc.d/uv.bash b/dot/.bashrc.d/uv.bash new file mode 100644 index 0000000..138b13c --- /dev/null +++ b/dot/.bashrc.d/uv.bash @@ -0,0 +1,12 @@ +basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +source "${basedir}/function.bash" + +unset basedir + +if [[ -x "$(type -p uv)" ]]; then + generate-bash-completion uv "uv generate-shell-completion bash" +fi + +if [[ -x "$(type -p uvx)" ]]; then + generate-bash-completion uvx "uvx --generate-shell-completion bash" +fi diff --git a/dot/.bashrc.d/volta.bash b/dot/.bashrc.d/volta.bash index a0b2628..2716380 100644 --- a/dot/.bashrc.d/volta.bash +++ b/dot/.bashrc.d/volta.bash @@ -6,10 +6,9 @@ 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" + generate-bash-completion volta "volta completions bash" # enable pnpm support # export VOLTA_FEATURE_PNPM=1 diff --git a/dot/.xprofile b/dot/.xprofile index 605420f..7e9d4bd 100644 --- a/dot/.xprofile +++ b/dot/.xprofile @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/bin/bash #xrandr --output HDMI-1 --same-as LVDS-1 @@ -38,14 +38,23 @@ fcitx5 -d #sudo service shadowsocks.client start # emacs --daemon -export PATH="~/.local/bin${PATH:+:}$PATH" -# pnpm -export PATH="~/.local/share/pnpm${PATH:+:}$PATH" -# pnpm end +# shell environment setup +export PATH="${HOME}/.local/bin${PATH:+:}$PATH" -# rust cargo -export PATH="~/.cargo/bin${PATH:+:}$PATH" -if [[ -e "$HOME/.cargo/env" ]]; then - . "$HOME/.cargo/env" +for _ in ${HOME}/.bashrc.d/manager/*; do + if [[ $_ == *.@(bash|sh) && -r $_ ]]; then + echo "$_" + source "$_" + fi +done + +if [[ -n "$(type -t mise-activate)" ]]; then + mise-activate fi -# rust cargo end + +for _ in ${HOME}/.bashrc.d/*; do + echo "$_" + if [[ $_ == *.@(bash|sh) && -r $_ ]]; then + source "$_" + fi +done From e27d83cf7e6840fe63b3fdf3aac4cfe07221c60a Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 15 Jul 2026 02:43:04 +0800 Subject: [PATCH 5/6] =?UTF-8?q?account.org.gpg:=20=E8=AE=B0=E5=BD=95=20R2?= =?UTF-8?q?=20=E8=AE=BF=E9=97=AE=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 4395 -> 4588 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/note/account.org.gpg b/note/account.org.gpg index 803414110b3b084fb2a966ac51422148b7102bc9..115f1a250caaf81921a739b10cfc35c347f6de86 100644 GIT binary patch literal 4588 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 WM|a!QU=?W#Wh^!(r3#y;p1fREqVe1S literal 4395 zcmV+`5!CL50Sp73f@FT-kgh2K2mA^iBv857XHWZ}fcEdutyXsFD&D@Vtkw#6zRIlj zw-u1?9mLvO`-EK-cuw3uH6j4$_JONCjp}Ets|egd?4ArN7YU(J8K+d^ zI7VWCFg7fgy}Z(mYa;6)Td`!R>J3>d=nVrIFUL>huJ3W%**#W#%rmyt{I`zi`{xvp zy@ZpNX?wTK<)!(3!r#d^XN2>kP4)M*&SRYlyX+ zZgK_posSGPcf)F_AuzY)s?)~*Bx7WBoM0=b4*mxOCd9B6DHhk7RZU5iTP8a_Y)3lE zJhBZU$`5{?zD+;DJ75kQa7{ohgr8^AmPi?m)dhRx4(jXTmq)p_n2#*TJ71&CY@72t z2`9+j=NDR7D{ZGm3+|<0LF4CU4xvp!*;@O7S|!2-&97F`VMgpIhdyRb0V-BepV3}xg^8SKl2M>xZZYl6>Zh4H}z+tDs2xLpAnV%~`y8|nlh_o0S z_uWXF&d1Ce75(Qg0Mt!--N{1;GAT>`z?EJil?@tei&$N?A?|`H4obdMiqz`9rbh z)jDS8T+-hjAYXrBN+H-o`f$9y%M?v{`a59%6%=kok1g;kJWVBX-qoc+?#djSIoG$- z&kk$G>&Fi{@l7EhxGdJtzTvoe0BlU!UN_jIjg1acMv)eZz3c*Wa+d+Aw)cMe&N!QT zeCBABS|DN2K|io-;zT%#DJg1t{jwLBJL4b*aIHmyFKXU_2DskQi3U)M{o1Q^&jK$k4{Cz_~Rszu`w!u zhYvSQapkF}?|M36n{V_Y$AVHnpUu6MH#Ia>4psto!tc7r6`KJET|I|af^$j!q$X=?T8CT{F%F`9b%0=cDzy;*w}bm_OjkBr#67$a?E7)gxPghSv+Dp?v1IIH~4E;5iSb%fyGz66N@;TBUS>FSMp=* zwGrr-nh^P07uU1LPNXoraVzYD(GehY#$7(R`txf`Y7#tEKvLdstITi(2r#h45eUIL zSXlTG*ZM45u;MiI-(D_OU-9;bH}itzy$`hWS?Qm<`8 zJUyrh;KpT=Efu2K3kNhb^8E zNsZVU%R!e{tX9SlzTLwYV-0eINN?p&YNOEW#0|`p%bxixo!*IJDi9%4Na5ESDOjvS>vFr8WGr%<6bI;LEsZ&B4-P?M-kPf&;D`rfDU{v*yM`t1dQ+dqJG)Lvg;Ko`kq;N#SGEzv?U~ z3a><^uja-SZBUk9R>o=$AcUc(4H?whHyFfa2)PyGZm~IuCnSiW_TxWhIZw#oTIa6}(X=*m>_PXmq_^}neCvy-A-wmt^Z7VQJ zLu4Va6?}QEm6OIJCedp$GjZI-d_*UVTM8m+q^hMjP@T^gaqPkpzZIDQ{2>*t9*6A2 zHPu=a+S8%_9+KPGJUZLu| zfDgn~GhJ=Y=hAAv&kK7zQdngfj!S~0V@PT=VL&Ul^PJ+~;5BgR2I_?q((GdAJ0B<| zY}rkwE`jf%U=@D>D?=OLO{2H{qbT4^L6O~EEFm64KQ}$*Ob!w?s3AS2{*(QYozg$0 zi=hS&n`^foLq$_+g~AXG-N!ux`U4z>$Fe@>t$GKip9BxPo`pjTE6>)d%Eg({Tid~D zN7XrY>dNE=#-9TKWTeJkEr3O{`G&35|EeoY{Nv)2T-qP#|%ppzcu~)3qxMEw=G7nOt5To*12Q5%o z)^AV$T5F3F^zk!Xrb~@`_pcWL+E2G$!i~L~ShpzJ{S*Iq)3V833AO-n@$oQ)7W0RcWE;XlX zxFbW4osUAB9X6*e$h!@y+;Ta` zNh&@DSg!=WX6&HLN*Rn(8M`$~_s)^kjHan9*6K3CPoNeKmvxv5`vrsu@-ZcYTwn?m zNiL$#(57=zyDg(C?#9L4AgH!Dt`$@Va_7Ird^#&T6mLIBG;~mmJx-R?tIZIcIJMGTzK!uLJXUr-fIMqSk zO4r;*A7%W31`S7hzr(a=kJmfKamTKTrF<>d6oeXrMMV2rJ?Eux8_2ZiCZ?!w%|Jr_ z6E~FVWd5SYl#XNrn?_*qln-suU6)EY!;y^Y&Zr1E865$kCe&yh;HWOg?^l$E$Njx~ zCLnqQI;SL0RDoV()t|-4Qa_ZjR?FU6(8}rp3&VRLP=CY&VQm7M**0^c5pSL7MSdVc zC7!q2n(vNt7M(T(X9Fra%!w)r)Xs~A5S4YN-I0OT>_&hA1n)4ZV2JHLZ@2z*qLqKV z7QnImPR-0Xztki53WWFObs=ROOgYWmo10hy7^L?JeeFF)CV><;XkyS!wo{S{B(q(i z;VmP2O2}ajwgkYmaek8iQ(w8j|7g$^1C6*2(RAp9vr{)ue1I1XK*2Tp73G{rkm^YZ z)!*l_-}7B;u-NgdXf1cAB;g)n!uNFYom%sT`zgn^x&>n_F@R;&^KEWt`K zags@R?3UQlo4z(mQjZ8zJ#MS(kzX~k;H+W2VdHwqaI;ML$rZ6)Y@2DrQm6=FIOVje zNhIvDJfT0hVUWHt%Fxh>TeqivPO8oqItA`apj7rT5%=RPnaWjcw4QEo*eV7Ub*-h( zhcsYjuPlzQag+QGSzl(>JBp`3=?8GFEM#OPyN@BZl<0451qdJwiMLWHbr86}s=ZPF zD#``3tTHVMbLDK{qMx|vQ}8F==gqUfbFWsab;GC~C~DC0J9hl+UYB>bm4jG^`6X4w z(1QSg_m}5}JwuNqG8IB%CJfCz0!)jiJdJjb-qY7%y44+F=c>l6{bTR;de4uJzNaue zwrX@lj2m{@2EBdD9-Ag331#LoNhaRke;Ws6HOT(FK2S=q^+IJU!vMj((7xgBtv)+t zQ@Xt)W~PPLc849*M5dH;nC*OAb$sZT_wpS;Y0_IHa^R85Ho$2VO-aHAC)kJ+8uZqK zC1tS2E}XD#ZxN@T&J|ftCy4vjp-b~A9LRfw7Rx?SrB&&!Fo$~`6ANQFX(wZpcqR2| zKG)&#e2E(VFrfksaWk+wy2&PSlWd$cSBJ#er zt;FmV71Ji%EfiS1joeff5Ke_`#Y?6}uo*k*tD*}1$<$rviFbb^yX@7jxH%42{98gm zMonsYcWuH)GsuieJHQnl6tX`X0KkV6V3}CbiEIV+dOCk?V0TIqJkim7CT9?2dO7F-l6H??m@8@K5pgbhi%)irr6I4-4cQ^gJW{eEnDD}ZASnA From d25228252899f46ef65e10b4ea202eb5be9f0ea9 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 15 Jul 2026 02:46:37 +0800 Subject: [PATCH 6/6] =?UTF-8?q?dot:=20proxy.bash=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=A0=A1=E9=AA=8C=E5=B9=B6=E6=94=B6=E7=AA=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8F=98=E9=87=8F=E4=BD=9C=E7=94=A8=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dot/.bashrc.d/proxy.bash | 65 ++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/dot/.bashrc.d/proxy.bash b/dot/.bashrc.d/proxy.bash index 80eff9a..a81abfc 100644 --- a/dot/.bashrc.d/proxy.bash +++ b/dot/.bashrc.d/proxy.bash @@ -1,10 +1,43 @@ -PROXY_IP="192.168.0.104" -HTTP_PROXY="http://${PROXY_IP}:20172" -SOCKS_PROXY="socks5://${PROXY_IP}:20170" +proxy_ip="192.168.0.104" +proxy_http_port="20172" +# SOCKS_PROXY="socks5://${PROXY_IP}:20170" + +_proxy_config_validate() { + if [[ -z "$proxy_ip" && -z "$proxy_http_port" ]]; then + echo "error: proxy_ip and proxy_http_port is not set" >&2 + return 1 + fi + if [[ -z "$proxy_ip" ]]; then + echo "error: proxy_id is not set" + return 1 + fi + if [[ -z "$proxy_http_port" ]]; then + echo "error: proxy_http_port is not set" + return 1 + fi + + if ! [[ "$proxy_http_port" =~ ^[0-9]+$ ]] || ((proxy_http_port < 1 || proxy_http_port > 65535)); then + echo "error: proxy_http_port is invalid: $proxy_http_port" >&2 + return 1 + fi + + if command -v nc >/dev/null 2>&1; then + if ! nc -z -w2 "$proxy_ip" "$proxy_http_port" 2>/dev/null; then + echo "error: proxy $proxy_ip:$proxy_http_port is not reachable" >&2 + return 1 + fi + fi + + return 0 +} set-shell-proxy() { - export http_proxy="$HTTP_PROXY" - export https_proxy="$HTTP_PROXY" + _proxy_config_validate || return 1 + + local http_proxy_url="http://${proxy_ip}:${proxy_http_port}" + + export http_proxy="$http_proxy_url" + export https_proxy="$http_proxy_url" } unset-shell-proxy() { @@ -13,8 +46,10 @@ unset-shell-proxy() { } set-git-proxy() { - prefix_cmd="" - flag="--global" + _proxy_config_validate || return 1 + + local prefix_cmd="" + local flag="--global" if [[ "$1" == "-s" ]]; then prefix_cmd="sudo" flag="--system" @@ -22,13 +57,15 @@ set-git-proxy() { flag="--local" fi - $prefix_cmd git config $flag http.proxy $HTTP_PROXY + local http_proxy_url="http://${proxy_ip}:${proxy_http_port}" + + $prefix_cmd git config $flag http.proxy $http_proxy_url $prefix_cmd git config $flag http.sslVerify false } unset-git-proxy() { - prefix_cmd="" - flag="--global" + local prefix_cmd="" + local flag="--global" if [[ "$1" == "-s" ]]; then prefix_cmd="sudo" flag="--system" @@ -41,8 +78,12 @@ unset-git-proxy() { } set-npm-proxy() { - npm config set proxy $HTTP_PROXY - npm config set https-proxy $HTTP_PROXY + _proxy_config_validate || return 1 + + local http_proxy_url="http://${proxy_ip}:${proxy_http_port}" + + npm config set proxy $http_proxy_url + npm config set https-proxy $http_proxy_url } unset-npm-proxy() {