Shell Plugin கள்¶
OmarOS டெஸ்க்டாப் omaros-shell என்ற ஒற்றை நீண்ட கால Quickshell செயல்முறையாக இயங்குகிறது, மேலும் திரையில் நீங்கள் காணும் ஏறக்குறைய அனைத்தும் அதற்குள் ஒரு plugin. பட்டை ஒரு plugin. அதிலிருந்து கீழே விழும் panel கள், emoji picker மற்றும் clipboard மேலாளர் போன்ற முழுத்திரை overlay கள், OmarOS மெனுவே, பூட்டுத் திரை, polkit உரையாடல் மற்றும் உங்கள் மின்கலத்தைக் கவனித்து இரவில் உங்கள் திரையை வெப்பமாக்கும் headless சேவைகள் ஆகியவையும் அப்படித்தான்.
அது வெறும் செயல்படுத்தல் விவரம் அல்ல. OmarOS இன் மூலத்தின் ஒரு வரியைத் தொடாமல் டெஸ்க்டாப்பின் பகுதிகளை அணைக்கலாம், அவற்றை மாற்றலாம் அல்லது உங்கள் சொந்தத்தை எழுதலாம் என்று அர்த்தம்.
முதல் தரப்பு plugin கள் OmarOS உடன் வருகின்றன, $OMAROS_PATH/shell/plugins/ இல் வாழ்கின்றன. நீங்களே சேர்க்கும் எதுவும் — உங்கள் சொந்தச் சோதனைகள், அல்லது GitHub இல் நீங்கள் கண்டது — ~/.config/omaros/plugins/ இல் வாழ்கிறது. இரண்டும் தொடக்கத்தில் ஒரே வழியில் கண்டறியப்படுகின்றன, ஆனால் உள்ளமைக்கப்பட்டவை நம்பகமான shell இடைமுகங்களைப் பெறுகின்றன, மூன்றாம் தரப்பு plugin கள் அவற்றின் சொந்த சேவை மற்றும் வாழ்க்கைச் சுழற்சிக்கு வரையறுக்கப்பட்ட வரையறுக்கப்பட்ட இடைமுகத்தைப் பெறுகின்றன. உள்ளமைக்கப்பட்டவற்றின் நகல்கள் அசல் நடத்தைக்குத் தேவையான மூலம் சார்ந்த கட்டமைப்பு மற்றும் UI அழைப்புகளை மட்டுமே வைத்திருக்கின்றன.
உங்களிடம் என்ன இருக்கிறது என்பதைப் பார்த்தல்¶
அது கண்டறியப்பட்ட ஒவ்வொரு plugin ஐயும் அதன் id, அது இயக்கப்பட்டுள்ளதா, அது முதல் தரப்பா அல்லது மூன்றாம் தரப்பா, அதன் வகைகள் மற்றும் அதன் காட்சிப் பெயருடன் அச்சிடுகிறது. அதை வேறு எதற்காவது ஊட்டினால் --json ஐச் சேர்க்கவும்.
Plugin id கள் பெயர்வெளியிடப்பட்டவை. உள்ளமைக்கப்பட்டவை அனைத்தும் omaros. உடன் தொடங்குகின்றன — omaros.clock, omaros.network, omaros.notifications — மேலும் அந்தப் பெயர்வெளி ஒதுக்கப்பட்டுள்ளது, எனவே மூன்றாம் தரப்பு plugin அதை ஒருபோதும் கோர முடியாது.
அவற்றை இயக்குதல் மற்றும் அணைத்தல்¶
அல்லது மெனுவைப் பயன்படுத்தவும்: அமைப்பு > Plugins இல் Enable, Disable, Add, Clone மற்றும் Remove உள்ளன, ஒவ்வொன்றும் அந்தச் செயலுக்கு அர்த்தமுள்ள plugin களை மட்டுமே வழங்கும் picker உடன்.
இயக்கப்பட்ட நிலை ~/.config/omaros/shell.json இல் சேமிக்கப்படுகிறது, மேலும் இரண்டு வகையான plugin களுக்கும் விதி சிறிது வேறுபடுகிறது. மூன்றாம் தரப்பு plugin அதன் id அந்தக் கோப்பில் எங்காவது தோன்றும்போது சரியாக இயக்கப்படுகிறது — பட்டை அமைப்பு உள்ளீடாக, plugins[] இல் உள்ளீடாக, அல்லது bar.id ஆக. பட்டை widget கள் அல்லாத முதல் தரப்பு plugin கள் வேறு வழியில் உள்ளன: அவை இயல்பாக இயக்கத்தில் இருக்கும், disabledPlugins[] இல் பட்டியலிடப்படுவதன் மூலம் மட்டுமே அணைக்கப்படும்.
முழு பட்டை plugin க்கு அணைப்பு நிலையே இல்லை. எப்போதும் சரியாக ஒரு பட்டை உள்ளது, எனவே மற்றொன்றை இயக்குவதன் மூலம் அதை மாற்றுகிறீர்கள். பட்டை widget இடம் மேல் பட்டையில் உள்ளடக்கப்பட்டுள்ளது.
git இலிருந்து plugin ஐச் சேர்த்தல்¶
மூன்றாம் தரப்பு plugin என்பது அதன் மூலத்தில் manifest.json உடன் கூடிய ஒரு git repo மட்டுமே.
அது எதையும் செய்வதற்கு முன், plugin கள் உங்கள் நீண்ட கால shell செயல்முறைக்குள் தன்னிச்சையான, sandbox செய்யப்படாத குறியீடாக இயங்குகின்றன என்று வெளிப்படையாகச் சொல்லி, URL ஐக் காட்டி, உறுதிப்படுத்தக் கேட்கிறது. அதைத் தீவிரமாக எடுத்துக் கொள்ளுங்கள். மூன்றாம் தரப்பு plugin இடைமுகம் அங்கீகாரச் சேவைகளை நேரடியாக வெளிப்படுத்தாது, மேலும் மாற்று பட்டை கட்டமைக்கப்பட்ட அங்கீகாரமற்ற UI க்கு வரையறுக்கப்பட்ட திறன்களை மட்டுமே பெறுகிறது. காட்சி plugin கள் இன்னும் shell இன் QML காட்சியைப் பகிர்ந்து கொள்கின்றன, சாதாரண parent பொருட்களை நடக்கலாம், அதே நேரத்தில் அனைத்து plugin குறியீடும் உங்கள் பயனர் கணக்கு அடையக்கூடிய அனைத்துடனும் இயங்குகிறது. அந்தச் சேவைகளை அடையக்கூடிய host பொருள் வரைபடத்திற்கு வெளியே வைப்பதன் மூலம் அங்கீகார நிலை தனியாகப் பாதுகாக்கப்படுகிறது. நீங்கள் இயக்கத் தயாராக உள்ள repo களை மட்டும் சேர்க்கவும், அவற்றை இயக்குவதற்கு முன் படிக்கவும்.
மாற்று பட்டை நிறுவப்பட்ட widget களை வழங்கலாம், ஆனால் சேவை ஆதரவு மூன்றாம் தரப்பு widget கள் அங்கு குறைக்கப்பட்ட செயல்பாட்டைக் கொண்டிருக்கலாம், ஏனெனில் பட்டை மற்றொரு plugin இன் நேரடி சேவைப் பொருளைக் கோர அனுமதிக்கப்படவில்லை. அத்தகைய widget க்கு அதன் துணைச் சேவை தேவைப்பட்டால் உள்ளமைக்கப்பட்ட omaros.bar க்கு மீண்டும் மாறவும்.
பின்னர் இது repo வை staging கோப்பகத்தில் நகலெடுத்து, manifest ஐச் சரிபார்த்து, மற்றொரு plugin ஏற்கனவே அந்த id ஐக் கோரினால் நிறுவலை மறுத்து, அதை ~/.config/omaros/plugins/<id>/ இல் நகர்த்துகிறது. --enable இல்லாமல் நீங்கள் அதை இப்போது இயக்க விரும்புகிறீர்களா என்று கேட்கிறது, நீங்கள் இல்லை என்று சொல்லிவிட்டு முதலில் குறியீட்டைப் படிக்கச் செல்லலாம். இது plugin இலிருந்து எதையும் ஒருபோதும் இயக்காது, நிறுவல் hook ஐ ஒருபோதும் இயக்காது, sudo வை ஒருபோதும் கேட்காது — இது கோப்புகளை நகலெடுத்து, manifest ஐச் சரிபார்த்து, IPC வழியாக ஒரு bit ஐ மாற்றுகிறது.
புதுப்பித்தல் என்பது அதே checkout இன் fast-forward pull ஆகும்:
id இல்லாமல் நீங்கள் வைத்திருக்கும் git நிர்வகிக்கும் ஒவ்வொரு plugin ஐயும் புதுப்பிக்கிறது. அதைப் பயன்படுத்துவதற்கு முன் diff ஐக் காட்டுகிறது, fast-forward செய்ய முடியாத உள்ளூர் மாற்றங்கள் இருந்தால் புதுப்பிக்க மறுக்கிறது, புதிய திருத்தம் சரிபார்ப்பில் தோல்வியடைந்தால் திரும்பப் பெறுகிறது.
அகற்றுதல் முதலில் plugin ஐ முடக்குகிறது, பின்னர் அது git checkout ஆக இருந்தால் அதை நீக்குகிறது (repo இன்னும் upstream இல் உள்ளது) அல்லது அது symlink ஆக இருந்தால் அதை unlink செய்கிறது. git repo இல்லாத கையால் உருவாக்கப்பட்ட plugin கோப்புறை முழுவதுமாக நீக்கப்படுவதற்குப் பதிலாக plugin கள் கோப்பகத்திற்குள் நேர முத்திரையிடப்பட்ட காப்புப்பிரதிக்கு நகர்த்தப்படுகிறது.
உள்ளமைக்கப்பட்ட ஒன்றை மாற்ற நகலெடுத்தல்¶
இது எனக்கு மிகவும் பிடித்த பகுதி. உள்ளமைக்கப்பட்ட widget எப்படி நடந்து கொள்கிறது என்பதை மாற்ற விரும்பினால், $OMAROS_PATH க்குக் கீழ் உள்ள கோப்புகளைத் திருத்த வேண்டாம் — அவை தொகுப்புக்குச் சொந்தமானவை, அடுத்த புதுப்பிப்பு அவற்றை மேலெழுதும். அதற்குப் பதிலாக அதை நகலெடுக்கவும்:
அது முழு plugin ஐயும் ~/.config/omaros/plugins/omar.clock இல் நகலெடுக்கிறது (உங்கள் பயனர்பெயர், என்னுடையது அல்ல), அதை "My Clock" என்று மறுபெயரிட்டு, அதை இயக்கி, இருக்கும் பட்டை widget இன் நிலை மற்றும் அமைப்புகளை வைத்திருக்கும் அதே வேளையில் shell ஐ உள்ளமைக்கப்பட்டதிலிருந்து உங்கள் நகலுக்கு மாற்றுகிறது. புதிய கோப்பகத்தை உங்கள் $EDITOR இல் உடனே திறக்க --edit ஐச் சேர்க்கவும், இதைத்தான் மெனுவின் அமைப்பு > Plugins > Clone Plugin உங்களுக்காகச் செய்கிறது.
பயனர்பெயர் முன்னொட்டு உங்கள் நகலின் id ஐ உங்களுடையதாக வைத்திருக்கிறது, எனவே அதைப் பகிர்வது வேறு எவருடனும் மோதாது. அசல் உள்ளமைக்கப்பட்ட id க்குச் செய்யப்பட்ட அழைப்புகள் உங்கள் நகலுக்கு அனுப்பப்படுகின்றன, எனவே omaros.clock ஐக் குறிப்பிட்ட எதையும் புதுப்பிக்கத் தேவையில்லை. மேலும் நீங்கள் அதைக் குழப்பினால், omaros plugin remove omar.clock உள்ளமைக்கப்பட்டதைத் திரும்ப வைக்கிறது.
~/.config/omaros/plugins/ க்குக் கீழ் எங்காவது ஒரு கோப்பைச் சேமிப்பது plugin குறியீட்டைத் தானாகவே மீண்டும் ஏற்றுகிறது, எனவே திருத்தியைத் திறந்து வைத்து உங்கள் மாற்றங்கள் வருவதைப் பார்க்கலாம்.
உங்கள் சொந்தத்தை எழுதுதல்¶
plugin என்பது manifest.json மற்றும் சில QML உடன் கூடிய கோப்பகம். manifest schemaVersion: 1, ஒரு id, name, version, ஒன்று அல்லது அதற்கு மேற்பட்ட kinds மற்றும் ஒவ்வொரு வகைக்கும் QML கோப்பைச் சுட்டிக்காட்டும் entryPoints பொருளை அறிவிக்கிறது:
| Kind | What it is |
|---|---|
bar-widget |
செயலில் உள்ள பட்டை ஒரு பிரிவில் போடக்கூடிய கூறு |
panel |
தொடர்ச்சியான அல்லது வரவழைக்கப்பட்ட மிதக்கும் சாளரம் |
overlay |
முழுத்திரை overlay |
menu |
வரவழைக்கப்பட்ட மெனு மேற்பரப்பு |
service |
UI இல்லாத headless singleton |
bar |
உள்ளமைக்கப்பட்ட ஒன்றை மாற்றும் முழு பட்டை |
plugin ஒரே நேரத்தில் பல வகைகளை அறிவிக்கலாம் — media plugin service மற்றும் bar-widget இரண்டும் ஆகும். பட்டை widget களுக்குக் காட்சிப் பெயர், வகை, விருப்ப defaultSection மற்றும் allowMultiple உடன் கூடுதல் barWidget தொகுதி கிடைக்கிறது, இது பட்டையில் ஒன்றுக்கு மேற்பட்டவை இருப்பது அர்த்தமுள்ளதா என்பதைச் சொல்கிறது. பெரும்பாலான widget கள் அதை false என்று அமைக்கின்றன; spacer கள் மற்றும் குறிகாட்டிகள் அதை true என்று அமைக்கின்றன.
எதையும் வெளியிடுவதற்கு முன், அதைச் சரிபார்க்கவும்:
அது shell ஏற்றும் நேரத்தில் செய்யும் அதே சரிபார்ப்புகளை இயக்குகிறது: schema பதிப்பு, தேவையான புலங்கள், ஒதுக்கப்படாத id, பாதுகாப்பான தொடர்புப் பாதைகள் மற்றும் உண்மையில் இருக்கும் entry point கள், நீங்கள் கோரிய ஒவ்வொரு வகைக்கும் entry point, மற்றும் கோப்புறைக்குள் எங்கும் symlink கள் இல்லை.
plugin மேம்பாட்டிற்கு, shell குறிப்பு மற்றும் முதல் தரப்பு plugin பட்டியல் ஐப் பார்க்கவும்.
உங்களுடையதை உலகத்துடன் பகிர்தல்¶
உங்களுக்குப் பிடித்த ஒன்றை உருவாக்கியதும், அதைப் பொது git repo வில் வைக்கவும். அதுதான் முழு விநியோகப் பொறிமுறை — எவரும் உங்கள் URL க்கு எதிராக omaros plugin add ஐ இயக்கி நொடிகளில் அதை இயக்கலாம்.