ثلاثة إعدادات للحفاظ على بيئة التطوير الحالية كما هي قبل تثبيت Omarchy
TuBrief 편집팀
2026년 9월 12일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
يُعد توزيع Omarchy المستند إلى Arch Linux والذي قادت Basecamp تطويره ونشره، خياراً يجمع بين مدير الترتيب Hyprland وأداة سطح المكتب Quickshell لعرض واجهة عمل دقيقة منذ التثبيت الأول. على الرغم من أنه نظام جذاب للمهندسين الذين يشعرون بالإرهاق من إدارة ملفات النقاط (dotfiles) يدويًا، إلا أن الكتابة فوق مجلد Home الحالي مباشرة ستتسبب في تعطل كل شيء بدءًا من مدير الجلسات.
لكي تتمكن من تثبيت Omarchy دون الإضرار ببيئة Neovim الحالية، وحاويات Docker، وخصائص بيئة الصدفة (Shell) المخصصة، يجب عليك أولاً عزل ثلاث نقاط تصادم رئيسية.
تنشأ معظم حالات فشل الإقلاع أثناء عملية تبديل التوزيعات نتيجة تعارض ملفات وقت التشغيل القديمة التي تخرج عن معيار 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/ --work-tree=HOME/pre_omarchy_backup_$(date +%Y%m%d).tar.gz" HEAD
`
بعد إنشاء أرشيف النسخ الاحتياطي، قم بنقل مجلدات سطح المكتب المسببة للتعارض إلى مجلد عزل خارج مجلد Home.
`bash
mkdir -p "HOME/.config/dir" ] && mv "HOME/.config/HOME/.config_quarantine/"
done
`
من خلال إبعاد إعدادات سطح المكتب، ستعمل قوقعة Quickshell الافتراضية في Omarchy بشكل طبيعي، بينما ستحتفظ بإعدادات محرر الكود وصوائف الطرفية كما كانت في الأصل.
يقوم Omarchy بدمج أدوات البرمجة المدعومة بالذكاء الاصطناعي مثل Claude Code أو OpenCode بعمق داخل تدفق عمل سطح المكتب. تكمن المشكلة في أن هذه الأدوات ترث صلاحيات محطة الطرفية الخاصة بالمضيف بالكامل. نظراً لأن العديد من بيئات التشغيل تقيد فقط تنفيذ العمليات الفرعية ولا تراقب استدعاءات نظام إدخال وإخراج الملفات، فإن أي هحقن للتعليمات البرمجية (Prompt Injection) أو تنفيذ غير مقصود للنصوص البرمجية سيؤدي إلى كشف مجلدات ~/.ssh و ~/.aws و ~/.gnupg ومقبس Docker بلا حماية.
يجب بناء بيئة تشغيل ذات أقل صلاحيات ممكنة باستخدام أداة Bubblewrap التي تتعامل مع مساحات أسماء المستخدمين غير الممتازين (Unprivileged User Namespaces) في نواة لينكس. ومن خلال تثبيت ذاكرة فارغة فوق مجلدات مفاتيح المصادقة الحساسة، يمكنك منع عمليات القراءة تماماً.
`bash
#!/usr/bin/env bash
set -euo pipefail
WORKSPACE="{1:-(pwd)}"
DUMMY_DIR={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"
--ro-bind "HOME/.ssh"
--ro-bind "HOME/.aws"
--ro-bind "HOME/.gnupg"
--unshare-all
--share-net
--unshare-pid
--new-session
--die-with-parent
--setenv PATH "/usr/local/bin:/usr/bin:/bin"
--setenv HOME "WORKSPACE"
-- /usr/bin/opencode "$@"
`
يجب أيضاً تجنب طريقة وضع مفاتيح API بنص صريح في متغيرات البيئة العامة. من الأفضل إنشاء ملف ai.env داخل مجلد ~/.config/secure-vault مع منحه صلاحيات chmod 700 وتقييدها بـ chmod 600، ثم قراءته في صدفة فرعية فقط وقت تشغيل البرنامج النصي لمنع تسرب الرموز (Tokens) عبر فحص /proc/$PID/environ.
أكثر المشكلات التي تظهر متكررة عند جلب إعدادات 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 (). وهنا يكمن سبب ظهور الأخطاء ومنع صلاحيات الكتابة عند ربط مجلد المصدر عبر خاصية الـ Bind Mount (-v $(pwd):/workspace). يمكنك تحديد قواعد وراثة قوائم التحكم في الوصول (POSIX ACL) في مجلد المشروع لفتح صلاحيات الكتابة لعمليات الحاوية دون الإخلال بملكية المضيف.
`bash
#!/usr/bin/env bash
set -euo pipefail
TARGET_PATH="{1:-(pwd)}"
CURRENT_USER=$(whoami)
SUBUID_START=(grep "^{CURRENT_USER}:" /etc/subuid | cut -d: -f2 || true)
if [[ -z "{CURRENT_USER}"
SUBUID_START=100000
fi
HOST_MAPPED_UID=$(( SUBUID_START + 1000 - 1 ))
setfacl -R -m "u:TARGET_PATH"
setfacl -R -d -m "u: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 في عبور شبكة مساحة الأسماء الفرعية، ستكون قد انتهيت تماماً وأصبحت جاهزاً لمتابعة أعمال التطوير اليومية كالمعتاد.