TuBrief
구독 채널
비디오
커뮤니티

ثلاثة إعدادات للحفاظ على بيئة التطوير الحالية كما هي قبل تثبيت Omarchy

TuBrief 편집팀
2026년 9월 12일
0
Computing/Software

원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.

العربية한국어EnglishEspañol中文हिन्दीDeutschFrançaisPortuguêsРусскийBahasa Indonesia日本語

관련 영상

لا تفوتوا مشروع Omarchy!7:41

لا تفوتوا مشروع Omarchy!

Maximilian Schwarzmüller

커뮤니티의 다른 글

사내 시스템에 llm api 붙일 때 마주하는 현실적인 한계와 대응법

2026년 9월 13일

레거시 백엔드에 GPT-6 Astra 붙일 때 예산 승인과 보안 통과를 먼저 끝내는 법이 있습니다

2026년 9월 13일

에이전트끼리 대화하다 6천만 원 청구서가 나오는 이유

2026년 9월 13일

사내 RAG 벡터 검색에 Okta 권한 필터를 직접 거는 방법

2026년 9월 13일

브라우저 에이전트에게 내 구글 계정을 통째로 넘기면 안 되는 이유

2026년 9월 12일

Apple Won the AI Race

2026년 9월 12일

댓글 (0)

Log in to leave a comment

아직 작성된 글이 없습니다

© 2026 . All rights reserved.

TuBrief
구독 채널
비디오
커뮤니티
로그인

ثلاثة إعدادات للحفاظ على بيئة التطوير الحالية كما هي قبل تثبيت Omarchy

يُعد توزيع Omarchy المستند إلى Arch Linux والذي قادت Basecamp تطويره ونشره، خياراً يجمع بين مدير الترتيب Hyprland وأداة سطح المكتب Quickshell لعرض واجهة عمل دقيقة منذ التثبيت الأول. على الرغم من أنه نظام جذاب للمهندسين الذين يشعرون بالإرهاق من إدارة ملفات النقاط (dotfiles) يدويًا، إلا أن الكتابة فوق مجلد Home الحالي مباشرة ستتسبب في تعطل كل شيء بدءًا من مدير الجلسات.

لكي تتمكن من تثبيت Omarchy دون الإضرار ببيئة Neovim الحالية، وحاويات Docker، وخصائص بيئة الصدفة (Shell) المخصصة، يجب عليك أولاً عزل ثلاث نقاط تصادم رئيسية.

عزل ملفات الإعدادات وتكوين مستودع Git Bare

تنشأ معظم حالات فشل الإقلاع أثناء عملية تبديل التوزيعات نتيجة تعارض ملفات وقت التشغيل القديمة التي تخرج عن معيار XDG مع التكوينات الأساسية للنظام. يستخدم Omarchy هيكلاً يضع إعدادات النظام في /usr/share/omarchy ويفرض إعدادات تخصيص المستخدم في ~/.config. إذا ظلت ملفات hyprland.conf القديمة أو أوراق أنماط Waybar موجودة، فسيتداخل محتواها مع وحدات Quickshell الأصلية (~/.config/omarchy/shell.json) والمعلمات، مما يتسبب في توقف الشاشة في مرحلة مصافحة Wayland. كما قد تتعطل محطة الطرفية الأساسية عن التقاط برامج التشغيل الرسومية بسبب وجود متغيرات PATH أو LD_LIBRARY_PATH غير قياسية في نصوص الصدفة.

للحفاظ على حالة الشكل والبيئة الحالية دون العبث بها، يجب استخدام نمط مستودع Git المجرد (Bare) الذي يربط شجرة العمل بمجلد Home. طريقة ربط الروابط الرمزية فرادى مثل GNU Stow تتوقف عن العمل بمجرد وجود ملفات قديمة، مما يجعل التراجع أمراً معقداً.

`bash
git init --bare "HOME/.dotfiles.git"aliasdotfiles=′/usr/bin/git−−git−dir=HOME/.dotfiles.git" alias dotfiles='/usr/bin/git --git-dir=HOME/.dotfiles.git"aliasdotfiles=′/usr/bin/git−−git−dir=HOME/.dotfiles.git/ --work-tree=HOME′dotfilesconfig−−localstatus.showUntrackedFilesnodotfilesadd /.config/nvim /.config/tmux /.zshrc /.gitconfigdotfilescommit−m"chore:snapshotpre−omarchy"dotfilesarchive−−format=tar.gz−o"HOME' dotfiles config --local status.showUntrackedFiles no dotfiles add ~/.config/nvim ~/.config/tmux ~/.zshrc ~/.gitconfig dotfiles commit -m "chore: snapshot pre-omarchy" dotfiles archive --format=tar.gz -o "HOME′dotfilesconfig−−localstatus.showUntrackedFilesnodotfilesadd /.config/nvim /.config/tmux /.zshrc /.gitconfigdotfilescommit−m"chore:snapshotpre−omarchy"dotfilesarchive−−format=tar.gz−o"HOME/pre_omarchy_backup_$(date +%Y%m%d).tar.gz" HEAD

`

بعد إنشاء أرشيف النسخ الاحتياطي، قم بنقل مجلدات سطح المكتب المسببة للتعارض إلى مجلد عزل خارج مجلد Home.

`bash
mkdir -p "HOME/.configquarantine"fordirinhyprwaybarfootalacrittyrofi;do[−d"HOME/.config_quarantine" for dir in hypr waybar foot alacritty rofi; do [ -d "HOME/.configq​uarantine"fordirinhyprwaybarfootalacrittyrofi;do[−d"HOME/.config/dir" ] && mv "HOME/.config/dir""dir" "dir""HOME/.config_quarantine/"
done

`

من خلال إبعاد إعدادات سطح المكتب، ستعمل قوقعة Quickshell الافتراضية في Omarchy بشكل طبيعي، بينما ستحتفظ بإعدادات محرر الكود وصوائف الطرفية كما كانت في الأصل.

عزل نواة وكيل الذكاء الاصطناعي باستخدام Bubblewrap

يقوم Omarchy بدمج أدوات البرمجة المدعومة بالذكاء الاصطناعي مثل Claude Code أو OpenCode بعمق داخل تدفق عمل سطح المكتب. تكمن المشكلة في أن هذه الأدوات ترث صلاحيات محطة الطرفية الخاصة بالمضيف بالكامل. نظراً لأن العديد من بيئات التشغيل تقيد فقط تنفيذ العمليات الفرعية ولا تراقب استدعاءات نظام إدخال وإخراج الملفات، فإن أي هحقن للتعليمات البرمجية (Prompt Injection) أو تنفيذ غير مقصود للنصوص البرمجية سيؤدي إلى كشف مجلدات ~/.ssh و ~/.aws و ~/.gnupg ومقبس Docker بلا حماية.

يجب بناء بيئة تشغيل ذات أقل صلاحيات ممكنة باستخدام أداة Bubblewrap التي تتعامل مع مساحات أسماء المستخدمين غير الممتازين (Unprivileged User Namespaces) في نواة لينكس. ومن خلال تثبيت ذاكرة فارغة فوق مجلدات مفاتيح المصادقة الحساسة، يمكنك منع عمليات القراءة تماماً.

`bash
#!/usr/bin/env bash

/usr/local/bin/agent-jail: مشغل عزل وكيل الذكاء الاصطناعي القائم على Bubblewrap

set -euo pipefail

WORKSPACE="{1:-(pwd)}"
DUMMY_DIR=(mktemp−d/tmp/jail−empty−XXXXXX)trap′rm−rf"(mktemp -d /tmp/jail-empty-XXXXXX) trap 'rm -rf "(mktemp−d/tmp/jail−empty−XXXXXX)trap′rm−rf"{DUMMY_DIR}"' EXIT

exec bwrap
--ro-bind /usr /usr
--ro-bind /lib /lib
--ro-bind /lib64 /lib64
--ro-bind /bin /bin
--ro-bind /etc/resolv.conf /etc/resolv.conf
--ro-bind /etc/ssl /etc/ssl
--ro-bind /etc/ca-certificates /etc/ca-certificates
--proc /proc
--dev /dev
--tmpfs /tmp
--tmpfs "$HOME"
--bind "WORKSPACE""WORKSPACE" "WORKSPACE""WORKSPACE"
--ro-bind "DUMMYDIR""DUMMY_DIR" "DUMMYD​IR""HOME/.ssh"
--ro-bind "DUMMYDIR""DUMMY_DIR" "DUMMYD​IR""HOME/.aws"
--ro-bind "DUMMYDIR""DUMMY_DIR" "DUMMYD​IR""HOME/.gnupg"
--unshare-all
--share-net
--unshare-pid
--new-session
--die-with-parent
--setenv PATH "/usr/local/bin:/usr/bin:/bin"
--setenv HOME "HOME"−−chdir"HOME" --chdir "HOME"−−chdir"WORKSPACE"
-- /usr/bin/opencode "$@"

`

يجب أيضاً تجنب طريقة وضع مفاتيح API بنص صريح في متغيرات البيئة العامة. من الأفضل إنشاء ملف ai.env داخل مجلد ~/.config/secure-vault مع منحه صلاحيات chmod 700 وتقييدها بـ chmod 600، ثم قراءته في صدفة فرعية فقط وقت تشغيل البرنامج النصي لمنع تسرب الرموز (Tokens) عبر فحص /proc/$PID/environ.

التحويل الأصلي لـ Neovim LSP وتصحيح صلاحيات تثبيت دوكر بدون جذور (Rootless Docker)

أكثر المشكلات التي تظهر متكررة عند جلب إعدادات Neovim القديمة إلى Omarchy تتعلق بإضافة Mason. فالملفات ثنائية الصنع مسبقاً التي يقوم Mason بتنزيلها من GitHub تتعارض مع رموز glibc الأحدث في بيئة الإصدارات المتداول تحديثها (Rolling Release)، مما يولد أخطاء في التشغيل.

تختفي هذه المشكلة إذا قمت بإيقاف التنزيل التلقائي للملفات الثنائية في Mason وتحويل مسارات LSP إلى الحزم الأصلية لمستودعات Arch الرسمية. كما أن إزالة مرحلة تنزيل الشبكة وطبقة المُغلف تقلل زمن التحميل الأولي للمحرر إلى أقل من 30 مللي ثانية.

`lua
-- ~/.config/nvim/lua/plugins/lsp-native.lua
return {
{
"williamboman/mason.nvim",
opts = { auto_install = false },
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
gopls = { cmd = { "/usr/bin/gopls" } },
pyright = { cmd = { "/usr/bin/pyright-langserver", "--stdio" } },
rust_analyzer = { cmd = { "/usr/bin/rust-analyzer" } },
lua_ls = { cmd = { "/usr/bin/lua-language-server" } },
},
},
},
}

`

بعد ضبط الإعدادات، قم بتثبيت الملفات الثنائية مباشرة من محطة الطرفية:

`bash
sudo pacman -S --needed gopls pyright rust-analyzer lua-language-server ripgrep fd

`

العقبة الأخيرة هي دوكر (Docker). يستخدم Omarchy دوكر بدون صلاحيات الجذر (Rootless) بشكل افتراضي. ونظراً لقواعد تعيين معرفات المستخدمين الفرعية (Sub-UID) في النواة، ينشأ إزاحة (Offset) بين ملكية الملفات في المضيف وصلاحيات المستخدم داخل الحاوية.

إذا كان رقم البدء المخصص في /etc/subuid للمضيف هو 100000، فإن المستخدم العادي داخل الحاوية (UID 1000) سيُعتبر من منظور المضيف وكأنه يحمل المعرف UID 100999 (100000+1000−1100000 + 1000 - 1100000+1000−1). وهنا يكمن سبب ظهور الأخطاء ومنع صلاحيات الكتابة عند ربط مجلد المصدر عبر خاصية الـ Bind Mount (-v $(pwd):/workspace). يمكنك تحديد قواعد وراثة قوائم التحكم في الوصول (POSIX ACL) في مجلد المشروع لفتح صلاحيات الكتابة لعمليات الحاوية دون الإخلال بملكية المضيف.

`bash
#!/usr/bin/env bash

docker-rootless-align: تصحيح تلقائي لصلاحيات تركيب مجلدات Rootless Docker Sub-UID

set -euo pipefail

TARGET_PATH="{1:-(pwd)}"
CURRENT_USER=$(whoami)

SUBUID_START=(grep "^{CURRENT_USER}:" /etc/subuid | cut -d: -f2 || true)
if [[ -z "SUBUIDSTART"]];thensudousermod−−add−subuids100000−165535−−add−subgids100000−165535"SUBUID_START" ]]; then sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 "SUBUIDS​TART"]];thensudousermod−−add−subuids100000−165535−−add−subgids100000−165535"{CURRENT_USER}"
SUBUID_START=100000
fi

HOST_MAPPED_UID=$(( SUBUID_START + 1000 - 1 ))

setfacl -R -m "u:HOSTMAPPEDUID:rwx""{HOST_MAPPED_UID}:rwx" "HOSTM​APPEDU​ID:rwx""TARGET_PATH"
setfacl -R -d -m "u:HOSTMAPPEDUID:rwx""{HOST_MAPPED_UID}:rwx" "HOSTM​APPEDU​ID:rwx""TARGET_PATH"

sudo loginctl enable-linger "${CURRENT_USER}"
systemctl --user enable --now docker.service

`

بمجرد الانتهاء من الإعدادات، تحقق من نوافذ التشغيل النشطة باستخدام الأمر hyprctl instances في الطرفية، وتأكد من عمل LSP عبر الأمر nvim --headless "+checkhealth" +qa. وعندما ينجح الأمر docker run --rm alpine ping -c 1 1.1.1.1 في عبور شبكة مساحة الأسماء الفرعية، ستكون قد انتهيت تماماً وأصبحت جاهزاً لمتابعة أعمال التطوير اليومية كالمعتاد.