Compare commits
3 Commits
v3.2.0
...
spotify-tu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2616b0ad1a | ||
|
|
de7b18e8e2 | ||
|
|
251a5d0263 |
@@ -1,9 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
end_of_line = lf
|
|
||||||
charset = utf-8
|
|
||||||
24
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Bug
|
|
||||||
description: Report a validated bug -- NOT FOR SUPPORT REQUESTS
|
|
||||||
labels: [bug]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Remember: Omarchy is an open source gift, not a product you bought from a vendor
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: system-details
|
|
||||||
attributes:
|
|
||||||
label: System details
|
|
||||||
placeholder: e.g. AMD 9950X, NVIDIA 5090, Omarchy 2.1.0
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: What's wrong?
|
|
||||||
description: Describe the issue, include steps to recreate it if possible, and attach the output of `omarchy-debug` if possible
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Suggestion
|
|
||||||
url: https://github.com/basecamp/omarchy/discussions/categories/suggestions
|
|
||||||
about: Suggest a new feature, change to existing feature, or other ideas in Discussions.
|
|
||||||
- name: Support
|
|
||||||
url: https://omarchy.org/discord
|
|
||||||
about: Need help? Join our Discord community for support with any issues. GitHub issues should be used for verified bugs only.
|
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
# Omarchy
|
# Omarchy
|
||||||
|
|
||||||
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
|
Turn a fresh Arch installation into a fully-configured, beautiful, and modern web development system based on Hyprland by running a single command. That's the one-line pitch for Omarchy (like it was for Omakub). No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omarchy is an opinionated take on what Linux can be at its best.
|
||||||
|
|
||||||
Read more at [omarchy.org](https://omarchy.org).
|
Read more at [omarchy.org](https://omarchy.org).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).
|
||||||
|
|
||||||
|
|||||||
11
applications/About.desktop
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=About
|
||||||
|
Comment=System information from Fastfetch
|
||||||
|
Exec=alacritty --class=About --title=About -e bash -c 'fastfetch; read -n 1 -s'
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Icon=Arch
|
||||||
|
Categories=GTK;
|
||||||
|
StartupNotify=false
|
||||||
|
|
||||||
11
applications/Activity.desktop
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=Activity
|
||||||
|
Comment=System activity from btop
|
||||||
|
Exec=alacritty --class=Activity --title=Activity -e btop
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Icon=Activity
|
||||||
|
Categories=GTK;
|
||||||
|
StartupNotify=false
|
||||||
|
|
||||||
11
applications/Docker.desktop
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=Docker
|
||||||
|
Comment=Manage Docker containers with LazyDocker
|
||||||
|
Exec=alacritty --class=Docker --title=Docker -e lazydocker
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Icon=Docker
|
||||||
|
Categories=GTK;
|
||||||
|
StartupNotify=false
|
||||||
|
|
||||||
221
applications/chromium.desktop
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=Chromium
|
||||||
|
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
|
||||||
|
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
|
||||||
|
GenericName=Web Browser
|
||||||
|
GenericName[ar]=متصفح الشبكة
|
||||||
|
GenericName[bg]=Уеб браузър
|
||||||
|
GenericName[ca]=Navegador web
|
||||||
|
GenericName[cs]=WWW prohlížeč
|
||||||
|
GenericName[da]=Browser
|
||||||
|
GenericName[de]=Web-Browser
|
||||||
|
GenericName[el]=Περιηγητής ιστού
|
||||||
|
GenericName[en_GB]=Web Browser
|
||||||
|
GenericName[es]=Navegador web
|
||||||
|
GenericName[et]=Veebibrauser
|
||||||
|
GenericName[fi]=WWW-selain
|
||||||
|
GenericName[fr]=Navigateur Web
|
||||||
|
GenericName[gu]=વેબ બ્રાઉઝર
|
||||||
|
GenericName[he]=דפדפן אינטרנט
|
||||||
|
GenericName[hi]=वेब ब्राउज़र
|
||||||
|
GenericName[hu]=Webböngésző
|
||||||
|
GenericName[it]=Browser Web
|
||||||
|
GenericName[ja]=ウェブブラウザ
|
||||||
|
GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
|
||||||
|
GenericName[ko]=웹 브라우저
|
||||||
|
GenericName[lt]=Žiniatinklio naršyklė
|
||||||
|
GenericName[lv]=Tīmekļa pārlūks
|
||||||
|
GenericName[ml]=വെബ് ബ്രൌസര്
|
||||||
|
GenericName[mr]=वेब ब्राऊजर
|
||||||
|
GenericName[nb]=Nettleser
|
||||||
|
GenericName[nl]=Webbrowser
|
||||||
|
GenericName[pl]=Przeglądarka WWW
|
||||||
|
GenericName[pt]=Navegador Web
|
||||||
|
GenericName[pt_BR]=Navegador da Internet
|
||||||
|
GenericName[ro]=Navigator de Internet
|
||||||
|
GenericName[ru]=Веб-браузер
|
||||||
|
GenericName[sl]=Spletni brskalnik
|
||||||
|
GenericName[sv]=Webbläsare
|
||||||
|
GenericName[ta]=இணைய உலாவி
|
||||||
|
GenericName[th]=เว็บเบราว์เซอร์
|
||||||
|
GenericName[tr]=Web Tarayıcı
|
||||||
|
GenericName[uk]=Навігатор Тенет
|
||||||
|
GenericName[zh_CN]=网页浏览器
|
||||||
|
GenericName[zh_HK]=網頁瀏覽器
|
||||||
|
GenericName[zh_TW]=網頁瀏覽器
|
||||||
|
# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
|
||||||
|
GenericName[bn]=ওয়েব ব্রাউজার
|
||||||
|
GenericName[fil]=Web Browser
|
||||||
|
GenericName[hr]=Web preglednik
|
||||||
|
GenericName[id]=Browser Web
|
||||||
|
GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
|
||||||
|
GenericName[sk]=WWW prehliadač
|
||||||
|
GenericName[sr]=Интернет прегледник
|
||||||
|
GenericName[te]=మహాతల అన్వేషి
|
||||||
|
GenericName[vi]=Bộ duyệt Web
|
||||||
|
# Gnome and KDE 3 uses Comment.
|
||||||
|
Comment=Access the Internet
|
||||||
|
Comment[ar]=الدخول إلى الإنترنت
|
||||||
|
Comment[bg]=Достъп до интернет
|
||||||
|
Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
|
||||||
|
Comment[ca]=Accedeix a Internet
|
||||||
|
Comment[cs]=Přístup k internetu
|
||||||
|
Comment[da]=Få adgang til internettet
|
||||||
|
Comment[de]=Internetzugriff
|
||||||
|
Comment[el]=Πρόσβαση στο Διαδίκτυο
|
||||||
|
Comment[en_GB]=Access the Internet
|
||||||
|
Comment[es]=Accede a Internet.
|
||||||
|
Comment[et]=Pääs Internetti
|
||||||
|
Comment[fi]=Käytä internetiä
|
||||||
|
Comment[fil]=I-access ang Internet
|
||||||
|
Comment[fr]=Accéder à Internet
|
||||||
|
Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
|
||||||
|
Comment[he]=גישה אל האינטרנט
|
||||||
|
Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
|
||||||
|
Comment[hr]=Pristup Internetu
|
||||||
|
Comment[hu]=Internetelérés
|
||||||
|
Comment[id]=Akses Internet
|
||||||
|
Comment[it]=Accesso a Internet
|
||||||
|
Comment[ja]=インターネットにアクセス
|
||||||
|
Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
|
||||||
|
Comment[ko]=인터넷 연결
|
||||||
|
Comment[lt]=Interneto prieiga
|
||||||
|
Comment[lv]=Piekļūt internetam
|
||||||
|
Comment[ml]=ഇന്റര്നെറ്റ് ആക്സസ് ചെയ്യുക
|
||||||
|
Comment[mr]=इंटरनेटमध्ये प्रवेश करा
|
||||||
|
Comment[nb]=Gå til Internett
|
||||||
|
Comment[nl]=Verbinding maken met internet
|
||||||
|
Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
|
||||||
|
Comment[pl]=Skorzystaj z internetu
|
||||||
|
Comment[pt]=Aceder à Internet
|
||||||
|
Comment[pt_BR]=Acessar a internet
|
||||||
|
Comment[ro]=Accesaţi Internetul
|
||||||
|
Comment[ru]=Доступ в Интернет
|
||||||
|
Comment[sk]=Prístup do siete Internet
|
||||||
|
Comment[sl]=Dostop do interneta
|
||||||
|
Comment[sr]=Приступите Интернету
|
||||||
|
Comment[sv]=Gå ut på Internet
|
||||||
|
Comment[ta]=இணையத்தை அணுகுதல்
|
||||||
|
Comment[te]=ఇంటర్నెట్ను ఆక్సెస్ చెయ్యండి
|
||||||
|
Comment[th]=เข้าถึงอินเทอร์เน็ต
|
||||||
|
Comment[tr]=İnternet'e erişin
|
||||||
|
Comment[uk]=Доступ до Інтернету
|
||||||
|
Comment[vi]=Truy cập Internet
|
||||||
|
Comment[zh_CN]=访问互联网
|
||||||
|
Comment[zh_HK]=連線到網際網路
|
||||||
|
Comment[zh_TW]=連線到網際網路
|
||||||
|
Exec=/usr/bin/chromium --ozone-platform=wayland %U
|
||||||
|
StartupNotify=true
|
||||||
|
Terminal=false
|
||||||
|
Icon=chromium
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;WebBrowser;
|
||||||
|
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
|
||||||
|
Actions=new-window;new-private-window;
|
||||||
|
|
||||||
|
[Desktop Action new-window]
|
||||||
|
Name=New Window
|
||||||
|
Name[am]=አዲስ መስኮት
|
||||||
|
Name[ar]=نافذة جديدة
|
||||||
|
Name[bg]=Нов прозорец
|
||||||
|
Name[bn]=নতুন উইন্ডো
|
||||||
|
Name[ca]=Finestra nova
|
||||||
|
Name[cs]=Nové okno
|
||||||
|
Name[da]=Nyt vindue
|
||||||
|
Name[de]=Neues Fenster
|
||||||
|
Name[el]=Νέο Παράθυρο
|
||||||
|
Name[en_GB]=New Window
|
||||||
|
Name[es]=Nueva ventana
|
||||||
|
Name[et]=Uus aken
|
||||||
|
Name[fa]=پنجره جدید
|
||||||
|
Name[fi]=Uusi ikkuna
|
||||||
|
Name[fil]=New Window
|
||||||
|
Name[fr]=Nouvelle fenêtre
|
||||||
|
Name[gu]=નવી વિંડો
|
||||||
|
Name[hi]=नई विंडो
|
||||||
|
Name[hr]=Novi prozor
|
||||||
|
Name[hu]=Új ablak
|
||||||
|
Name[id]=Jendela Baru
|
||||||
|
Name[it]=Nuova finestra
|
||||||
|
Name[iw]=חלון חדש
|
||||||
|
Name[ja]=新規ウインドウ
|
||||||
|
Name[kn]=ಹೊಸ ವಿಂಡೊ
|
||||||
|
Name[ko]=새 창
|
||||||
|
Name[lt]=Naujas langas
|
||||||
|
Name[lv]=Jauns logs
|
||||||
|
Name[ml]=പുതിയ വിന്ഡോ
|
||||||
|
Name[mr]=नवीन विंडो
|
||||||
|
Name[nl]=Nieuw venster
|
||||||
|
Name[no]=Nytt vindu
|
||||||
|
Name[pl]=Nowe okno
|
||||||
|
Name[pt]=Nova janela
|
||||||
|
Name[pt_BR]=Nova janela
|
||||||
|
Name[ro]=Fereastră nouă
|
||||||
|
Name[ru]=Новое окно
|
||||||
|
Name[sk]=Nové okno
|
||||||
|
Name[sl]=Novo okno
|
||||||
|
Name[sr]=Нови прозор
|
||||||
|
Name[sv]=Nytt fönster
|
||||||
|
Name[sw]=Dirisha Jipya
|
||||||
|
Name[ta]=புதிய சாளரம்
|
||||||
|
Name[te]=క్రొత్త విండో
|
||||||
|
Name[th]=หน้าต่างใหม่
|
||||||
|
Name[tr]=Yeni Pencere
|
||||||
|
Name[uk]=Нове вікно
|
||||||
|
Name[vi]=Cửa sổ Mới
|
||||||
|
Name[zh_CN]=新建窗口
|
||||||
|
Name[zh_TW]=開新視窗
|
||||||
|
Exec=/usr/bin/chromium --ozone-platform=wayland --new-window
|
||||||
|
|
||||||
|
[Desktop Action new-private-window]
|
||||||
|
Name=New Incognito Window
|
||||||
|
Name[ar]=نافذة جديدة للتصفح المتخفي
|
||||||
|
Name[bg]=Нов прозорец „инкогнито“
|
||||||
|
Name[bn]=নতুন ছদ্মবেশী উইন্ডো
|
||||||
|
Name[ca]=Finestra d'incògnit nova
|
||||||
|
Name[cs]=Nové anonymní okno
|
||||||
|
Name[da]=Nyt inkognitovindue
|
||||||
|
Name[de]=Neues Inkognito-Fenster
|
||||||
|
Name[el]=Νέο παράθυρο για ανώνυμη περιήγηση
|
||||||
|
Name[en_GB]=New Incognito window
|
||||||
|
Name[es]=Nueva ventana de incógnito
|
||||||
|
Name[et]=Uus inkognito aken
|
||||||
|
Name[fa]=پنجره جدید حالت ناشناس
|
||||||
|
Name[fi]=Uusi incognito-ikkuna
|
||||||
|
Name[fil]=Bagong Incognito window
|
||||||
|
Name[fr]=Nouvelle fenêtre de navigation privée
|
||||||
|
Name[gu]=નવી છુપી વિંડો
|
||||||
|
Name[hi]=नई गुप्त विंडो
|
||||||
|
Name[hr]=Novi anoniman prozor
|
||||||
|
Name[hu]=Új Inkognitóablak
|
||||||
|
Name[id]=Jendela Penyamaran baru
|
||||||
|
Name[it]=Nuova finestra di navigazione in incognito
|
||||||
|
Name[iw]=חלון חדש לגלישה בסתר
|
||||||
|
Name[ja]=新しいシークレット ウィンドウ
|
||||||
|
Name[kn]=ಹೊಸ ಅಜ್ಞಾತ ವಿಂಡೋ
|
||||||
|
Name[ko]=새 시크릿 창
|
||||||
|
Name[lt]=Naujas inkognito langas
|
||||||
|
Name[lv]=Jauns inkognito režīma logs
|
||||||
|
Name[ml]=പുതിയ വേഷ പ്രച്ഛന്ന വിന്ഡോ
|
||||||
|
Name[mr]=नवीन गुप्त विंडो
|
||||||
|
Name[nl]=Nieuw incognitovenster
|
||||||
|
Name[no]=Nytt inkognitovindu
|
||||||
|
Name[pl]=Nowe okno incognito
|
||||||
|
Name[pt]=Nova janela de navegação anónima
|
||||||
|
Name[pt_BR]=Nova janela anônima
|
||||||
|
Name[ro]=Fereastră nouă incognito
|
||||||
|
Name[ru]=Новое окно в режиме инкогнито
|
||||||
|
Name[sk]=Nové okno inkognito
|
||||||
|
Name[sl]=Novo okno brez beleženja zgodovine
|
||||||
|
Name[sr]=Нови прозор за прегледање без архивирања
|
||||||
|
Name[sv]=Nytt inkognitofönster
|
||||||
|
Name[ta]=புதிய மறைநிலைச் சாளரம்
|
||||||
|
Name[te]=క్రొత్త అజ్ఞాత విండో
|
||||||
|
Name[th]=หน้าต่างใหม่ที่ไม่ระบุตัวตน
|
||||||
|
Name[tr]=Yeni Gizli pencere
|
||||||
|
Name[uk]=Нове вікно в режимі анонімного перегляду
|
||||||
|
Name[vi]=Cửa sổ ẩn danh mới
|
||||||
|
Name[zh_CN]=新建隐身窗口
|
||||||
|
Name[zh_TW]=新增無痕式視窗
|
||||||
|
Exec=/usr/bin/chromium --ozone-platform=wayland --new-window --incognito
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Hidden=true
|
|
||||||
BIN
applications/icons/Activity.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
applications/icons/Arch.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 196 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 75 KiB |
12
applications/nvim.desktop
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Neovim
|
||||||
|
GenericName=Text Editor
|
||||||
|
Comment=Edit text files
|
||||||
|
Exec=alacritty --class=nvim --title=nvim -e nvim -- %F
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Keywords=Text;editor;
|
||||||
|
Icon=nvim
|
||||||
|
Categories=Utility;TextEditor;
|
||||||
|
StartupNotify=false
|
||||||
|
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
|
||||||
10
applications/omarchy.desktop
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Omarchy
|
||||||
|
Comment=Omarchy TUI
|
||||||
|
Exec=alacritty --class=Omarchy --title=Omarchy -e bash -c '$HOME/.local/share/omarchy/bin/omarchy'
|
||||||
|
Icon=Arch
|
||||||
|
Terminal=false
|
||||||
|
Categories=System;Utility;
|
||||||
|
StartupNotify=false
|
||||||
7
applications/wiremix.desktop
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Audio Settings
|
||||||
|
Comment=Using Wiremix
|
||||||
|
Exec=alacritty --class=Wiremix --title=Wiremix -e wiremix
|
||||||
|
Icon=audio-card
|
||||||
|
Type=Application
|
||||||
|
Terminal=false
|
||||||
12
applications/xtras/Zoom.desktop
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Zoom
|
||||||
|
Comment=Zoom Video Conference
|
||||||
|
Exec=env QT_SCALE_FACTOR=2 /usr/bin/zoom %U
|
||||||
|
Icon=Zoom
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Encoding=UTF-8
|
||||||
|
Categories=Network;Application;
|
||||||
|
StartupWMClass=zoom
|
||||||
|
MimeType=x-scheme-handler/zoommtg;x-scheme-handler/zoomus;x-scheme-handler/tel;x-scheme-handler/callto;x-scheme-handler/zoomphonecall;x-scheme-handler/zoomphonesms;x-scheme-handler/zoomcontactcentercall;application/x-zoom
|
||||||
|
X-KDE-Protocols=zoommtg;zoomus;tel;callto;zoomphonecall;zoomphonesms;zoomcontactcentercall;
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=Walker
|
|
||||||
Comment=Walker Service
|
|
||||||
Exec=walker --gapplication-service
|
|
||||||
StartupNotify=false
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
157
bin/omarchy
Executable file
@@ -0,0 +1,157 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
OMARCHY_VERSION=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null)
|
||||||
|
PATH="$PATH:$HOME/.local/share/omarchy/bin"
|
||||||
|
|
||||||
|
show_ascii_art() {
|
||||||
|
clear
|
||||||
|
tte -i ~/.local/share/omarchy/logo.txt --frame-rate 640 --no-color expand
|
||||||
|
echo " $OMARCHY_VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
main_menu() {
|
||||||
|
show_ascii_art
|
||||||
|
|
||||||
|
local options=("Theme" "Font" "Setup" "Update" "Manual" "Exit")
|
||||||
|
choice=$(printf "%s\n" "${options[@]}" | gum choose --header "") || exit 0
|
||||||
|
case "$choice" in
|
||||||
|
Theme) theme_menu ;;
|
||||||
|
Font)
|
||||||
|
omarchy-font-menu
|
||||||
|
ack_command
|
||||||
|
main_menu
|
||||||
|
;;
|
||||||
|
Update) update_menu ;;
|
||||||
|
Setup) setup_menu ;;
|
||||||
|
Manual) open_manual ;;
|
||||||
|
Exit) clear && exit 0 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
update_menu() {
|
||||||
|
show_ascii_art
|
||||||
|
local menu=("Omarchy" "Waybar" "Walker" "Plymouth" "SwayOSD" "Desktop apps" "Back")
|
||||||
|
local commands=(
|
||||||
|
"omarchy-update"
|
||||||
|
"omarchy-refresh-waybar"
|
||||||
|
"omarchy-refresh-walker"
|
||||||
|
"omarchy-refresh-plymouth"
|
||||||
|
"omarchy-refresh-swayosd"
|
||||||
|
"omarchy-refresh-applications"
|
||||||
|
"main_menu"
|
||||||
|
)
|
||||||
|
local choice
|
||||||
|
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Update") || main_menu
|
||||||
|
for i in "${!menu[@]}"; do
|
||||||
|
if [[ "${menu[$i]}" == "$choice" ]]; then
|
||||||
|
if [[ "$choice" == "Back" ]]; then
|
||||||
|
main_menu
|
||||||
|
else
|
||||||
|
eval "${commands[$i]}"
|
||||||
|
ack_command
|
||||||
|
main_menu
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
theme_menu() {
|
||||||
|
show_ascii_art
|
||||||
|
local menu=("Pick" "Install" "Update" "Remove" "Back")
|
||||||
|
local commands=(
|
||||||
|
"omarchy-theme-menu"
|
||||||
|
"install_theme_prompt"
|
||||||
|
"omarchy-theme-update"
|
||||||
|
"remove_theme_prompt"
|
||||||
|
"main_menu"
|
||||||
|
)
|
||||||
|
local choice
|
||||||
|
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme") || main_menu
|
||||||
|
for i in "${!menu[@]}"; do
|
||||||
|
if [[ "${menu[$i]}" == "$choice" ]]; then
|
||||||
|
if [[ "$choice" == "Back" ]]; then
|
||||||
|
main_menu
|
||||||
|
else
|
||||||
|
eval "${commands[$i]}"
|
||||||
|
ack_command
|
||||||
|
main_menu
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
install_theme_prompt() {
|
||||||
|
local url
|
||||||
|
url=$(gum input --placeholder="Git repo URL for theme" --header="")
|
||||||
|
if [[ -n "$url" ]]; then
|
||||||
|
omarchy-theme-install "$url"
|
||||||
|
fi
|
||||||
|
theme_menu
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_theme_prompt() {
|
||||||
|
local theme
|
||||||
|
theme=$(gum input --placeholder="Theme name" --header="")
|
||||||
|
if [[ -n "$theme" ]]; then
|
||||||
|
omarchy-theme-remove "$theme"
|
||||||
|
fi
|
||||||
|
theme_menu
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_menu() {
|
||||||
|
show_ascii_art
|
||||||
|
local menu=("Dropbox" "Steam" "Docker DBs" "Fingerprint sensor" "Fido2 device" "Back")
|
||||||
|
local commands=(
|
||||||
|
"omarchy-setup-dropbox"
|
||||||
|
"omarchy-setup-steam"
|
||||||
|
"setup_docker_dbs"
|
||||||
|
"omarchy-setup-fingerprint"
|
||||||
|
"omarchy-setup-fido2"
|
||||||
|
"main_menu"
|
||||||
|
)
|
||||||
|
local choice
|
||||||
|
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Setup") || main_menu
|
||||||
|
for i in "${!menu[@]}"; do
|
||||||
|
if [[ "${menu[$i]}" == "$choice" ]]; then
|
||||||
|
if [[ "$choice" == "Back" ]]; then
|
||||||
|
main_menu
|
||||||
|
else
|
||||||
|
eval "${commands[$i]}"
|
||||||
|
ack_command
|
||||||
|
main_menu
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_docker_dbs() {
|
||||||
|
options=("MariaDB" "MySQL" "Redis" "PostgreSQL")
|
||||||
|
choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu
|
||||||
|
|
||||||
|
if [[ -n "$choices" ]]; then
|
||||||
|
for db in $choices; do
|
||||||
|
case $db in
|
||||||
|
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
|
||||||
|
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 ;;
|
||||||
|
MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;;
|
||||||
|
Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
main_menu
|
||||||
|
}
|
||||||
|
|
||||||
|
open_manual() {
|
||||||
|
setsid chromium --new-window --ozone-platform=wayland --app="https://manuals.omamix.org/2/the-omarchy-manual" >/dev/null 2>&1 &
|
||||||
|
clear
|
||||||
|
}
|
||||||
|
|
||||||
|
ack_command() {
|
||||||
|
gum spin --spinner "globe" --title "Done!" -- sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
main_menu
|
||||||
@@ -4,20 +4,27 @@
|
|||||||
|
|
||||||
BATTERY_THRESHOLD=10
|
BATTERY_THRESHOLD=10
|
||||||
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
|
||||||
BATTERY_LEVEL=$(omarchy-battery-remaining)
|
|
||||||
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
|
|
||||||
|
|
||||||
send_notification() {
|
get_battery_percentage() {
|
||||||
notify-send -u critical " Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
|
upower -i $(upower -e | grep 'BAT') | grep -E "percentage" | grep -o '[0-9]\+%' | sed 's/%//'
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
|
get_battery_state() {
|
||||||
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
|
upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}'
|
||||||
if [[ ! -f $NOTIFICATION_FLAG ]]; then
|
}
|
||||||
send_notification $BATTERY_LEVEL
|
|
||||||
touch $NOTIFICATION_FLAG
|
send_notification() {
|
||||||
|
notify-send -u critical "Battery Low" "Time to recharge! (battery is at ${1}%)" -i battery-caution
|
||||||
|
}
|
||||||
|
|
||||||
|
BATTERY_LEVEL=$(get_battery_percentage)
|
||||||
|
BATTERY_STATE=$(get_battery_state)
|
||||||
|
|
||||||
|
if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then
|
||||||
|
if [[ ! -f "$NOTIFICATION_FLAG" ]]; then
|
||||||
|
send_notification "$BATTERY_LEVEL"
|
||||||
|
touch "$NOTIFICATION_FLAG"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -f $NOTIFICATION_FLAG
|
rm -f "$NOTIFICATION_FLAG"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Returns the battery percentage remaining as an integer.
|
|
||||||
|
|
||||||
upower -i $(upower -e | grep BAT) \
|
|
||||||
| awk -F: '/percentage/ {
|
|
||||||
gsub(/[%[:space:]]/, "", $2);
|
|
||||||
val=$2;
|
|
||||||
printf("%d\n", (val+0.5))
|
|
||||||
exit
|
|
||||||
}'
|
|
||||||
@@ -3,12 +3,5 @@
|
|||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
|
||||||
else
|
else
|
||||||
DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
|
sudo asdcontrol $(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1) -- "$1"
|
||||||
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
|
|
||||||
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
|
|
||||||
swayosd-client \
|
|
||||||
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
|
|
||||||
--custom-icon display-brightness \
|
|
||||||
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
|
|
||||||
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
focused_monitor="$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
|
|
||||||
|
|
||||||
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
|
|
||||||
sinks_count=$(echo "$sinks" | jq '. | length')
|
|
||||||
|
|
||||||
if [ "$sinks_count" -eq 0 ]; then
|
|
||||||
swayosd-client \
|
|
||||||
--monitor "$focused_monitor" \
|
|
||||||
--custom-message "No audio devices found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
current_sink_name=$(pactl get-default-sink)
|
|
||||||
current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)')
|
|
||||||
|
|
||||||
if [ "$current_sink_index" != "null" ]; then
|
|
||||||
next_sink_index=$(((current_sink_index + 1) % sinks_count))
|
|
||||||
else
|
|
||||||
next_sink_index=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
|
|
||||||
next_sink_name=$(echo "$next_sink" | jq -r '.name')
|
|
||||||
|
|
||||||
next_sink_description=$(echo "$next_sink" | jq -r '.description')
|
|
||||||
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
|
|
||||||
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
|
|
||||||
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
|
|
||||||
fi
|
|
||||||
|
|
||||||
next_sink_volume=$(echo "$next_sink" | jq -r \
|
|
||||||
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
|
|
||||||
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
|
|
||||||
|
|
||||||
if [ "$next_sink_is_muted" = "true" ] || [ "$next_sink_volume" -eq 0 ]; then
|
|
||||||
icon_state="muted"
|
|
||||||
elif [ "$next_sink_volume" -le 33 ]; then
|
|
||||||
icon_state="low"
|
|
||||||
elif [ "$next_sink_volume" -le 66 ]; then
|
|
||||||
icon_state="medium"
|
|
||||||
else
|
|
||||||
icon_state="high"
|
|
||||||
fi
|
|
||||||
|
|
||||||
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
|
|
||||||
|
|
||||||
if [ "$next_sink_name" != "$current_sink_name" ]; then
|
|
||||||
pactl set-default-sink "$next_sink_name"
|
|
||||||
fi
|
|
||||||
|
|
||||||
swayosd-client \
|
|
||||||
--monitor "$focused_monitor" \
|
|
||||||
--custom-message "$next_sink_description" \
|
|
||||||
--custom-icon "$next_sink_volume_icon"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode
|
|
||||||
|
|
||||||
if [[ -f "$FIRST_RUN_MODE" ]]; then
|
|
||||||
rm -f "$FIRST_RUN_MODE"
|
|
||||||
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/elephant.sh"
|
|
||||||
sudo rm -f /etc/sudoers.d/first-run
|
|
||||||
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
|
|
||||||
bash "$OMARCHY_PATH/install/first-run/wifi.sh"
|
|
||||||
fi
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for cmd in "$@"; do
|
|
||||||
if ! command -v "$cmd" &>/dev/null; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for cmd in "$@"; do
|
|
||||||
command -v "$cmd" &>/dev/null || exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Set recorder based on GPU
|
||||||
|
|
||||||
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
||||||
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
|
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
|
||||||
|
|
||||||
@@ -8,113 +10,25 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DESKTOP_AUDIO="false"
|
screenrecording() {
|
||||||
MICROPHONE_AUDIO="false"
|
filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
||||||
WEBCAM="false"
|
notify-send "Screen recording starting..." -t 1000
|
||||||
STOP_RECORDING="false"
|
|
||||||
|
|
||||||
for arg in "$@"; do
|
|
||||||
case "$arg" in
|
|
||||||
--with-desktop-audio) DESKTOP_AUDIO="true" ;;
|
|
||||||
--with-microphone-audio) MICROPHONE_AUDIO="true" ;;
|
|
||||||
--with-webcam) WEBCAM="true" ;;
|
|
||||||
--stop-recording) STOP_RECORDING="true"
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
cleanup_webcam() {
|
|
||||||
pkill -f "WebcamOverlay" 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
start_webcam_overlay() {
|
|
||||||
cleanup_webcam
|
|
||||||
|
|
||||||
# Get monitor scale
|
|
||||||
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
|
|
||||||
|
|
||||||
# Target width (base 360px, scaled to monitor)
|
|
||||||
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
|
|
||||||
|
|
||||||
# Try preferred 16:9 resolutions in order, use first available
|
|
||||||
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
|
|
||||||
local video_size_arg=""
|
|
||||||
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null)
|
|
||||||
|
|
||||||
for resolution in "${preferred_resolutions[@]}"; do
|
|
||||||
if echo "$available_formats" | grep -q "$resolution"; then
|
|
||||||
video_size_arg="-video_size $resolution"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \
|
|
||||||
-vf "scale=${target_width}:-1" \
|
|
||||||
-window_title "WebcamOverlay" \
|
|
||||||
-noborder \
|
|
||||||
-fflags nobuffer -flags low_delay \
|
|
||||||
-probesize 32 -analyzeduration 0 \
|
|
||||||
-loglevel quiet &
|
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
|
||||||
|
|
||||||
start_screenrecording() {
|
if lspci | grep -qi 'nvidia'; then
|
||||||
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
wf-recorder -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@"
|
||||||
local audio_devices=""
|
|
||||||
local audio_args=""
|
|
||||||
|
|
||||||
[[ "$DESKTOP_AUDIO" == "true" ]] && audio_devices+="default_output"
|
|
||||||
|
|
||||||
if [[ "$MICROPHONE_AUDIO" == "true" ]]; then
|
|
||||||
# Merge audio tracks into one - separate tracks only play one at a time in most players
|
|
||||||
[[ -n "$audio_devices" ]] && audio_devices+="|"
|
|
||||||
audio_devices+="default_input"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ -n "$audio_devices" ]] && audio_args+="-a $audio_devices"
|
|
||||||
|
|
||||||
gpu-screen-recorder -w portal -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
|
|
||||||
toggle_screenrecording_indicator
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_screenrecording() {
|
|
||||||
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
|
|
||||||
|
|
||||||
# Wait a maximum of 5 seconds to finish before hard killing
|
|
||||||
local count=0
|
|
||||||
while pgrep -f "^gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
|
|
||||||
sleep 0.1
|
|
||||||
count=$((count + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
|
||||||
pkill -9 -f "^gpu-screen-recorder"
|
|
||||||
cleanup_webcam
|
|
||||||
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
|
|
||||||
else
|
else
|
||||||
cleanup_webcam
|
wl-screenrec -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then
|
||||||
|
pkill -x wl-screenrec
|
||||||
|
pkill -x wf-recorder
|
||||||
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
||||||
fi
|
elif [[ "$1" == "output" ]]; then
|
||||||
toggle_screenrecording_indicator
|
screenrecording
|
||||||
}
|
|
||||||
|
|
||||||
toggle_screenrecording_indicator() {
|
|
||||||
pkill -RTMIN+8 waybar
|
|
||||||
}
|
|
||||||
|
|
||||||
screenrecording_active() {
|
|
||||||
pgrep -f "^gpu-screen-recorder" >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
if screenrecording_active; then
|
|
||||||
if pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "^gpu-screen-recorder" >/dev/null; then
|
|
||||||
cleanup_webcam
|
|
||||||
else
|
else
|
||||||
stop_screenrecording
|
region=$(slurp) || exit 1
|
||||||
fi
|
screenrecording -g "$region"
|
||||||
elif [[ "$STOP_RECORDING" == "false" ]]; then
|
|
||||||
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
|
|
||||||
|
|
||||||
start_screenrecording || cleanup_webcam
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,30 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
screensaver_in_focus() {
|
trap "exit" SIGINT
|
||||||
hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
exit_screensaver() {
|
|
||||||
hyprctl keyword cursor:invisible false
|
|
||||||
pkill -x tte 2>/dev/null
|
|
||||||
pkill -f org.omarchy.screensaver 2>/dev/null
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
|
|
||||||
|
|
||||||
printf '\033]11;rgb:00/00/00\007' # Set background color to black
|
|
||||||
|
|
||||||
hyprctl keyword cursor:invisible true &>/dev/null
|
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
tte -i ~/.config/omarchy/branding/screensaver.txt \
|
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
|
||||||
--frame-rate 120 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c\
|
tte -i ~/.local/share/omarchy/logo.txt \
|
||||||
--no-eol --no-restore-cursor random_effect &
|
--frame-rate 240 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c \
|
||||||
|
"$effect"
|
||||||
while pgrep -x tte >/dev/null; do
|
|
||||||
if read -n 1 -t 3 || ! screensaver_in_focus; then
|
|
||||||
exit_screensaver
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -8,76 +8,10 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pkill slurp && exit 0
|
pkill slurp || hyprshot -m ${1:-region} --raw |
|
||||||
|
|
||||||
MODE="${1:-smart}"
|
|
||||||
PROCESSING="${2:-slurp}"
|
|
||||||
|
|
||||||
get_rectangles() {
|
|
||||||
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
|
||||||
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
|
|
||||||
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Select based on mode
|
|
||||||
case "$MODE" in
|
|
||||||
region)
|
|
||||||
wayfreeze & PID=$!
|
|
||||||
sleep .1
|
|
||||||
SELECTION=$(slurp 2>/dev/null)
|
|
||||||
kill $PID 2>/dev/null
|
|
||||||
;;
|
|
||||||
windows)
|
|
||||||
wayfreeze & PID=$!
|
|
||||||
sleep .1
|
|
||||||
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
|
|
||||||
kill $PID 2>/dev/null
|
|
||||||
;;
|
|
||||||
fullscreen)
|
|
||||||
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
|
|
||||||
;;
|
|
||||||
smart|*)
|
|
||||||
RECTS=$(get_rectangles)
|
|
||||||
wayfreeze & PID=$!
|
|
||||||
sleep .1
|
|
||||||
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
|
|
||||||
kill $PID 2>/dev/null
|
|
||||||
|
|
||||||
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
|
|
||||||
# window or output it was inside of to prevent accidental 2px snapshots
|
|
||||||
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
|
|
||||||
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
|
|
||||||
click_x="${BASH_REMATCH[1]}"
|
|
||||||
click_y="${BASH_REMATCH[2]}"
|
|
||||||
|
|
||||||
while IFS= read -r rect; do
|
|
||||||
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
|
|
||||||
rect_x="${BASH_REMATCH[1]}"
|
|
||||||
rect_y="${BASH_REMATCH[2]}"
|
|
||||||
rect_width="${BASH_REMATCH[3]}"
|
|
||||||
rect_height="${BASH_REMATCH[4]}"
|
|
||||||
|
|
||||||
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
|
|
||||||
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done <<< "$RECTS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
[ -z "$SELECTION" ] && exit 0
|
|
||||||
|
|
||||||
if [[ $PROCESSING == "slurp" ]]; then
|
|
||||||
grim -g "$SELECTION" - |
|
|
||||||
satty --filename - \
|
satty --filename - \
|
||||||
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
||||||
--early-exit \
|
--early-exit \
|
||||||
--actions-on-enter save-to-clipboard \
|
--actions-on-enter save-to-clipboard \
|
||||||
--save-after-copy \
|
--save-after-copy \
|
||||||
--copy-command 'wl-copy'
|
--copy-command 'wl-copy'
|
||||||
else
|
|
||||||
grim -g "$SELECTION" - | wl-copy
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-cmd-share [clipboard|file|folder]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
MODE="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
if [[ $MODE == "clipboard" ]]; then
|
|
||||||
TEMP_FILE=$(mktemp --suffix=.txt)
|
|
||||||
wl-paste >"$TEMP_FILE"
|
|
||||||
FILES="$TEMP_FILE"
|
|
||||||
else
|
|
||||||
if (($# > 0)); then
|
|
||||||
FILES="$*"
|
|
||||||
else
|
|
||||||
if [[ $MODE == "folder" ]]; then
|
|
||||||
# Pick a single folder from home directory
|
|
||||||
FILES=$(find "$HOME" -type d 2>/dev/null | fzf)
|
|
||||||
else
|
|
||||||
# Pick one or more files from home directory
|
|
||||||
FILES=$(find "$HOME" -type f 2>/dev/null | fzf --multi)
|
|
||||||
fi
|
|
||||||
[ -z "$FILES" ] && exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run LocalSend in its own systemd service (detached from terminal)
|
|
||||||
# Convert newline-separated files to space-separated arguments
|
|
||||||
if [[ $MODE != "clipboard" ]] && echo "$FILES" | grep -q $'\n'; then
|
|
||||||
# Multiple files selected - convert newlines to array
|
|
||||||
readarray -t FILE_ARRAY <<<"$FILES"
|
|
||||||
systemd-run --user --quiet --collect localsend --headless send "${FILE_ARRAY[@]}"
|
|
||||||
else
|
|
||||||
# Single file or clipboard mode
|
|
||||||
systemd-run --user --quiet --collect localsend --headless send "$FILES"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Note: Temporary file will remain until system cleanup for clipboard mode
|
|
||||||
# This ensures the file content is available for the LocalSend GUI
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Go from current active terminal to its child shell process and run cwd there
|
|
||||||
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
|
|
||||||
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
|
|
||||||
|
|
||||||
if [[ -n $shell_pid ]]; then
|
|
||||||
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)
|
|
||||||
shell=$(readlink -f "/proc/$shell_pid/exe" 2>/dev/null)
|
|
||||||
|
|
||||||
# Check if $shell is a valid shell and $cwd is a directory.
|
|
||||||
if grep -qs "$shell" /etc/shells && [[ -d $cwd ]]; then
|
|
||||||
echo "$cwd"
|
|
||||||
else
|
|
||||||
echo "$HOME"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$HOME"
|
|
||||||
fi
|
|
||||||
5
bin/omarchy-cmd-tzupdate
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo tzupdate
|
||||||
|
new_timezone=$(timedatectl show -p Timezone --value)
|
||||||
|
notify-send "Timezone has been set to $new_timezone"
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
LOG_FILE="/tmp/omarchy-debug.log"
|
|
||||||
|
|
||||||
cat > "$LOG_FILE" <<EOF
|
|
||||||
Date: $(date)
|
|
||||||
Hostname: $(hostname)
|
|
||||||
Omarchy Branch: $(git -C "$OMARCHY_PATH" branch --show-current 2>/dev/null || echo "unknown")
|
|
||||||
|
|
||||||
=========================================
|
|
||||||
SYSTEM INFORMATION
|
|
||||||
=========================================
|
|
||||||
$(inxi -Farz)
|
|
||||||
|
|
||||||
=========================================
|
|
||||||
DMESG
|
|
||||||
=========================================
|
|
||||||
$(sudo dmesg)
|
|
||||||
|
|
||||||
=========================================
|
|
||||||
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
|
|
||||||
=========================================
|
|
||||||
$(journalctl -b -p 4..1)
|
|
||||||
|
|
||||||
=========================================
|
|
||||||
INSTALLED PACKAGES
|
|
||||||
=========================================
|
|
||||||
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
OPTIONS=("View log" "Save in current directory")
|
|
||||||
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
|
|
||||||
OPTIONS=("Upload log" "${OPTIONS[@]}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
ACTION=$(gum choose "${OPTIONS[@]}")
|
|
||||||
|
|
||||||
case "$ACTION" in
|
|
||||||
"Upload log")
|
|
||||||
echo "Uploading debug log to 0x0.st..."
|
|
||||||
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
|
|
||||||
if [ $? -eq 0 ] && [ -n "$URL" ]; then
|
|
||||||
echo "✓ Log uploaded successfully!"
|
|
||||||
echo "Share this URL:"
|
|
||||||
echo ""
|
|
||||||
echo " $URL"
|
|
||||||
echo ""
|
|
||||||
echo "This link will expire in 24 hours."
|
|
||||||
else
|
|
||||||
echo "Error: Failed to upload log file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
"View log")
|
|
||||||
less "$LOG_FILE"
|
|
||||||
;;
|
|
||||||
"Save in current directory")
|
|
||||||
cp "$LOG_FILE" "./omarchy-debug.log"
|
|
||||||
echo "✓ Log saved to $(pwd)/omarchy-debug.log"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -4,3 +4,4 @@ cd ~/.local/share/omarchy
|
|||||||
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
|
||||||
touch $migration_file
|
touch $migration_file
|
||||||
nvim $migration_file
|
nvim $migration_file
|
||||||
|
echo -e "Run with:\nsource $migration_file"
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Drive, like /dev/nvme0, to display information about
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-drive-info [/dev/drive]"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
drive="$1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the root drive in case we are looking at partitions
|
|
||||||
root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1)
|
|
||||||
if [[ -n "$root_drive" ]]; then
|
|
||||||
root_drive="/dev/$root_drive"
|
|
||||||
else
|
|
||||||
root_drive="$drive"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get basic disk information
|
|
||||||
size=$(lsblk -dno SIZE "$drive" 2>/dev/null)
|
|
||||||
model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null)
|
|
||||||
|
|
||||||
# Format display string
|
|
||||||
display="$drive"
|
|
||||||
[[ -n "$size" ]] && display="$display ($size)"
|
|
||||||
[[ -n "$model" ]] && display="$display - $model"
|
|
||||||
|
|
||||||
echo "$display"
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Select a drive from a list with info that includes space and brand
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
|
|
||||||
else
|
|
||||||
drives="$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
drives_with_info=""
|
|
||||||
while IFS= read -r drive; do
|
|
||||||
[[ -n "$drive" ]] || continue
|
|
||||||
drives_with_info+="$(omarchy-drive-info "$drive")"$'\n'
|
|
||||||
done <<<"$drives"
|
|
||||||
|
|
||||||
selected_drive="$(printf "%s" "$drives_with_info" | gum choose --header "Select drive")" || exit 1
|
|
||||||
printf "%s\n" "$selected_drive" | awk '{print $1}'
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device)
|
|
||||||
|
|
||||||
if [[ -n $encrypted_drives ]]; then
|
|
||||||
if [[ $(wc -l <<<"$encrypted_drives") -eq 1 ]]; then
|
|
||||||
drive_to_change="$encrypted_drives"
|
|
||||||
else
|
|
||||||
drive_to_change="$(omarchy-drive-select "$encrypted_drives")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n $drive_to_change ]]; then
|
|
||||||
echo "Changing full-disk encryption password for $drive_to_change"
|
|
||||||
sudo cryptsetup luksChangeKey --pbkdf argon2id --iter-time 2000 "$drive_to_change"
|
|
||||||
else
|
|
||||||
echo "No drive selected."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "No encrypted drives available."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
grep -oP 'font-family:\s*["'\'']?\K[^;"'\'']+' ~/.config/waybar/style.css | head -n1
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|omarchy' | sort -u
|
|
||||||
12
bin/omarchy-font-menu
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
font=$(
|
||||||
|
fc-list :spacing=100 -f "%{family[0]}\n" |
|
||||||
|
grep -v -i -E 'emoji|signwriting' |
|
||||||
|
sort -u |
|
||||||
|
gum choose --header "Choose terminal font"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ -n "$font" ]]; then
|
||||||
|
sed -i "s/family = \".*\"/family = \"$font\"/g" ~/.config/alacritty/alacritty.toml
|
||||||
|
fi
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
font_name="$1"
|
|
||||||
|
|
||||||
if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
|
|
||||||
if fc-list | grep -iq "$font_name"; then
|
|
||||||
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
|
|
||||||
sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f ~/.config/kitty/kitty.conf ]]; then
|
|
||||||
sed -i "s/^font_family .*/font_family $font_name/g" ~/.config/kitty/kitty.conf
|
|
||||||
pkill -USR1 kitty
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f ~/.config/ghostty/config ]]; then
|
|
||||||
sed -i "s/font-family = \".*\"/font-family = \"$font_name\"/g" ~/.config/ghostty/config
|
|
||||||
pkill -SIGUSR2 ghostty
|
|
||||||
fi
|
|
||||||
|
|
||||||
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
|
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
|
|
||||||
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
|
|
||||||
xmlstarlet ed -L \
|
|
||||||
-u '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/string' \
|
|
||||||
-v "$font_name" \
|
|
||||||
~/.config/fontconfig/fonts.conf
|
|
||||||
|
|
||||||
omarchy-restart-waybar
|
|
||||||
omarchy-restart-swayosd
|
|
||||||
|
|
||||||
if pgrep -x ghostty; then
|
|
||||||
notify-send " You must restart Ghostty to see font change"
|
|
||||||
fi
|
|
||||||
|
|
||||||
omarchy-hook font-set "$font_name"
|
|
||||||
else
|
|
||||||
echo "Font '$font_name' not found."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Usage: omarchy-font-set <font-name>"
|
|
||||||
fi
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ $# -lt 1 ]]; then
|
|
||||||
echo "Usage: omarchy-hook [name] [args...]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
HOOK=$1
|
|
||||||
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
if [[ -f $HOOK_PATH ]]; then
|
|
||||||
bash "$HOOK_PATH" "$@"
|
|
||||||
fi
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Close all open windows
|
|
||||||
hyprctl clients -j | \
|
|
||||||
jq -r ".[].address" | \
|
|
||||||
xargs -I{} hyprctl dispatch closewindow address:{}
|
|
||||||
|
|
||||||
# Move to first workspace
|
|
||||||
hyprctl dispatch workspace 1
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Toggle to pop-out a tile to stay fixed on a display basis.
|
|
||||||
|
|
||||||
# Usage:
|
|
||||||
# omarchy-hyprland-window-pop [width height [x y]]
|
|
||||||
#
|
|
||||||
# Arguments:
|
|
||||||
# width Optional. Width of the floating window. Default: 1300
|
|
||||||
# height Optional. Height of the floating window. Default: 900
|
|
||||||
# x Optional. X position of the window. Must provide both X and Y to take effect.
|
|
||||||
# y Optional. Y position of the window. Must provide both X and Y to take effect.
|
|
||||||
#
|
|
||||||
# Behavior:
|
|
||||||
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
|
|
||||||
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
|
|
||||||
|
|
||||||
width=${1:-1300}
|
|
||||||
height=${2:-900}
|
|
||||||
x=${3:-}
|
|
||||||
y=${4:-}
|
|
||||||
|
|
||||||
active=$(hyprctl activewindow -j)
|
|
||||||
pinned=$(echo "$active" | jq ".pinned")
|
|
||||||
addr=$(echo "$active" | jq -r ".address")
|
|
||||||
|
|
||||||
if [[ $pinned == "true" ]]; then
|
|
||||||
hyprctl -q --batch \
|
|
||||||
dispatch pin address:$addr; \
|
|
||||||
dispatch togglefloating address:$addr; \
|
|
||||||
dispatch tagwindow -pop address:$addr;
|
|
||||||
elif [[ -n $addr ]]; then
|
|
||||||
hyprctl dispatch togglefloating address:$addr
|
|
||||||
hyprctl dispatch resizeactive exact $width $height address:$addr
|
|
||||||
|
|
||||||
if [[ -n $x && -n $y ]]; then
|
|
||||||
hyprctl dispatch moveactive $x $y address:$addr
|
|
||||||
else
|
|
||||||
hyprctl dispatch centerwindow address:$addr
|
|
||||||
fi
|
|
||||||
|
|
||||||
hyprctl -q --batch \
|
|
||||||
dispatch pin address:$addr; \
|
|
||||||
dispatch alterzorder top address:$addr; \
|
|
||||||
dispatch tagwindow +pop address:$addr;
|
|
||||||
fi
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
|
|
||||||
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
|
|
||||||
|
|
||||||
if [[ $gaps == "0" ]]; then
|
|
||||||
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
|
|
||||||
else \
|
|
||||||
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
|
|
||||||
fi
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [[ -f ~/.config/chromium-flags.conf ]]; then
|
|
||||||
CONF=~/.config/chromium-flags.conf
|
|
||||||
|
|
||||||
grep -qxF -- "--oauth2-client-id=77185425430.apps.googleusercontent.com" "$CONF" ||
|
|
||||||
echo "--oauth2-client-id=77185425430.apps.googleusercontent.com" >>"$CONF"
|
|
||||||
|
|
||||||
grep -qxF -- "--oauth2-client-secret=OTJgUOQcT7lO7GsGZq2G4IlT" "$CONF" ||
|
|
||||||
echo "--oauth2-client-secret=OTJgUOQcT7lO7GsGZq2G4IlT" >>"$CONF"
|
|
||||||
|
|
||||||
echo "Now you can login to your Google Account in Chromium."
|
|
||||||
fi
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [[ -z "$1" ]]; then
|
|
||||||
echo "Usage: omarchy-install-dev-env <ruby|node|bun|go|laravel|symfony|php|python|elixir|phoenix|rust|java|ocaml|dotnet|clojure>" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
install_php() {
|
|
||||||
sudo pacman -S php composer php-sqlite xdebug --noconfirm
|
|
||||||
|
|
||||||
# Install Path for Composer
|
|
||||||
if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then
|
|
||||||
echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
|
|
||||||
source "$HOME/.bashrc"
|
|
||||||
echo "Added Composer global bin directory to PATH."
|
|
||||||
else
|
|
||||||
echo "Composer global bin directory already in PATH."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Enable some extensions
|
|
||||||
local php_ini_path="/etc/php/php.ini"
|
|
||||||
local extensions_to_enable=(
|
|
||||||
"bcmath"
|
|
||||||
"intl"
|
|
||||||
"iconv"
|
|
||||||
"openssl"
|
|
||||||
"pdo_sqlite"
|
|
||||||
"pdo_mysql"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Enable Xdebug
|
|
||||||
sudo sed -i \
|
|
||||||
-e 's/^;zend_extension=xdebug.so/zend_extension=xdebug.so/' \
|
|
||||||
-e 's/^;xdebug.mode=debug/xdebug.mode=debug/' \
|
|
||||||
/etc/php/conf.d/xdebug.ini
|
|
||||||
|
|
||||||
for ext in "${extensions_to_enable[@]}"; do
|
|
||||||
sudo sed -i "s/^;extension=${ext}/extension=${ext}/" "$php_ini_path"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
install_node() {
|
|
||||||
echo -e "Installing Node.js...\n"
|
|
||||||
mise use --global node@lts
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
ruby)
|
|
||||||
echo -e "Installing Ruby on Rails...\n"
|
|
||||||
omarchy-pkg-add libyaml
|
|
||||||
mise use --global ruby@latest
|
|
||||||
mise settings add idiomatic_version_file_enable_tools ruby
|
|
||||||
echo "gem: --no-document" > ~/.gemrc
|
|
||||||
mise x ruby -- gem install rails --no-document
|
|
||||||
echo -e "\nYou can now run: rails new myproject"
|
|
||||||
;;
|
|
||||||
node)
|
|
||||||
install_node
|
|
||||||
;;
|
|
||||||
bun)
|
|
||||||
echo -e "Installing Bun...\n"
|
|
||||||
mise use -g bun@latest
|
|
||||||
;;
|
|
||||||
deno)
|
|
||||||
echo -e "Installing Deno...\n"
|
|
||||||
mise use -g deno@latest
|
|
||||||
;;
|
|
||||||
go)
|
|
||||||
echo -e "Installing Go...\n"
|
|
||||||
mise use --global go@latest
|
|
||||||
;;
|
|
||||||
php)
|
|
||||||
echo -e "Installing PHP...\n"
|
|
||||||
install_php
|
|
||||||
;;
|
|
||||||
laravel)
|
|
||||||
echo -e "Installing PHP and Laravel...\n"
|
|
||||||
install_php
|
|
||||||
install_node
|
|
||||||
composer global require laravel/installer
|
|
||||||
echo -e "\nYou can now run: laravel new myproject"
|
|
||||||
;;
|
|
||||||
symfony)
|
|
||||||
echo -e "Installing PHP and Symfony...\n"
|
|
||||||
install_php
|
|
||||||
omarchy-pkg-add symfony-cli
|
|
||||||
echo -e "\nYou can now run: symfony new --webapp myproject"
|
|
||||||
;;
|
|
||||||
python)
|
|
||||||
echo -e "Installing Python...\n"
|
|
||||||
mise use --global python@latest
|
|
||||||
echo -e "\nInstalling uv...\n"
|
|
||||||
curl -fsSL https://astral.sh/uv/install.sh | sh
|
|
||||||
;;
|
|
||||||
elixir)
|
|
||||||
echo -e "Installing Elixir...\n"
|
|
||||||
mise use --global erlang@latest
|
|
||||||
mise use --global elixir@latest
|
|
||||||
mise x elixir -- mix local.hex --force
|
|
||||||
;;
|
|
||||||
phoenix)
|
|
||||||
echo -e "Installing Phoenix Framework...\n"
|
|
||||||
# Ensure Erlang/Elixir first
|
|
||||||
mise use --global erlang@latest
|
|
||||||
mise use --global elixir@latest
|
|
||||||
# Hex & Rebar
|
|
||||||
mise x elixir -- mix local.hex --force
|
|
||||||
mise x elixir -- mix local.rebar --force
|
|
||||||
# Phoenix project (phx_new)
|
|
||||||
mise x elixir -- mix archive.install hex phx_new --force
|
|
||||||
echo -e "\nYou can now run: mix phx.new my_app"
|
|
||||||
;;
|
|
||||||
rust)
|
|
||||||
echo -e "Installing Rust...\n"
|
|
||||||
bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
|
|
||||||
;;
|
|
||||||
java)
|
|
||||||
echo -e "Installing Java...\n"
|
|
||||||
mise use --global java@latest
|
|
||||||
;;
|
|
||||||
zig)
|
|
||||||
echo -e "Installing Zig...\n"
|
|
||||||
mise use --global zig@latest
|
|
||||||
mise use -g zls@latest
|
|
||||||
;;
|
|
||||||
ocaml)
|
|
||||||
echo -e "Installing OCaml...\n"
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
|
|
||||||
opam init --yes
|
|
||||||
eval "$(opam env)"
|
|
||||||
opam install ocaml-lsp-server odoc ocamlformat utop --yes
|
|
||||||
;;
|
|
||||||
dotnet)
|
|
||||||
echo -e "Installing .NET...\n"
|
|
||||||
mise use --global dotnet@latest
|
|
||||||
;;
|
|
||||||
clojure)
|
|
||||||
echo -e "Installing Clojure...\n"
|
|
||||||
omarchy-pkg-add rlwrap
|
|
||||||
mise use --global clojure@latest
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
|
|
||||||
|
|
||||||
if [[ "$#" -eq 0 ]]; then
|
|
||||||
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
|
|
||||||
else
|
|
||||||
choices="$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$choices" ]]; then
|
|
||||||
for db in $choices; do
|
|
||||||
case $db in
|
|
||||||
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
|
|
||||||
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres17 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:17 ;;
|
|
||||||
MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;;
|
|
||||||
Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;;
|
|
||||||
MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;;
|
|
||||||
MSSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:1433:1433" --name mssql -e MSSQL_PID=Developer -e ACCEPT_EULA=Y -e "MSSQL_SA_PASSWORD=@dmin123" mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "No databases selected for installation."
|
|
||||||
fi
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "Now pick dependencies matching your graphics card"
|
|
||||||
sudo pacman -S --noconfirm steam
|
|
||||||
setsid gtk-launch steam >/dev/null 2>&1 &
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
curl -fsSL https://tailscale.com/install.sh | sh
|
|
||||||
curl -fsSL https://neuralink.com/tsui/install.sh | bash
|
|
||||||
|
|
||||||
echo -e "\nStarting Tailscale..."
|
|
||||||
sudo tailscale up --accept-routes
|
|
||||||
|
|
||||||
echo -e "\nAdd tsui to sudoers..."
|
|
||||||
echo "$USER ALL=(ALL) NOPASSWD: $(which tsui)" | sudo tee /etc/sudoers.d/tsui
|
|
||||||
|
|
||||||
omarchy-tui-install "Tailscale" "sudo tsui" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
|
||||||
omarchy-webapp-install "Tailscale Admin Console" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
package="$1"
|
|
||||||
|
|
||||||
# Map package name to desktop entry ID
|
|
||||||
case "$package" in
|
|
||||||
alacritty) desktop_id="Alacritty.desktop" ;;
|
|
||||||
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
|
|
||||||
kitty) desktop_id="kitty.desktop" ;;
|
|
||||||
*)
|
|
||||||
echo "Unknown terminal: $package"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Install package
|
|
||||||
if omarchy-pkg-add $package; then
|
|
||||||
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
|
|
||||||
if [[ $package == "alacritty" ]]; then
|
|
||||||
mkdir -p ~/.local/share/applications
|
|
||||||
cat > ~/.local/share/applications/Alacritty.desktop << EOF
|
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
TryExec=alacritty
|
|
||||||
Exec=alacritty
|
|
||||||
Icon=Alacritty
|
|
||||||
Terminal=false
|
|
||||||
Categories=System;TerminalEmulator;
|
|
||||||
Name=Alacritty
|
|
||||||
GenericName=Terminal
|
|
||||||
Comment=A fast, cross-platform, OpenGL terminal emulator
|
|
||||||
StartupNotify=true
|
|
||||||
StartupWMClass=Alacritty
|
|
||||||
Actions=New;
|
|
||||||
X-TerminalArgExec=-e
|
|
||||||
X-TerminalArgAppId=--class=
|
|
||||||
X-TerminalArgTitle=--title=
|
|
||||||
X-TerminalArgDir=--working-directory=
|
|
||||||
|
|
||||||
[Desktop Action New]
|
|
||||||
Name=New Terminal
|
|
||||||
Exec=alacritty
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update xdg-terminals.list to prioritize the proper terminal
|
|
||||||
cat > ~/.config/xdg-terminals.list << EOF
|
|
||||||
# Terminal emulator preference order for xdg-terminal-exec
|
|
||||||
# The first found and valid terminal will be used
|
|
||||||
$desktop_id
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
echo "Failed to install $package"
|
|
||||||
fi
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "Installing VSCode..."
|
|
||||||
omarchy-pkg-add visual-studio-code-bin
|
|
||||||
|
|
||||||
mkdir -p ~/.vscode ~/.config/Code/User
|
|
||||||
|
|
||||||
cat > ~/.vscode/argv.json << 'EOF'
|
|
||||||
// This configuration file allows you to pass permanent command line arguments to VS Code.
|
|
||||||
// Only a subset of arguments is currently supported to reduce the likelihood of breaking
|
|
||||||
// the installation.
|
|
||||||
//
|
|
||||||
// PLEASE DO NOT CHANGE WITHOUT UNDERSTANDING THE IMPACT
|
|
||||||
//
|
|
||||||
// NOTE: Changing this file requires a restart of VS Code.
|
|
||||||
{
|
|
||||||
"password-store":"gnome-libsecret"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Ensure VSC's own auto-update feature is turned off
|
|
||||||
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
|
|
||||||
|
|
||||||
# Apply Omarchy theme to VSCode
|
|
||||||
omarchy-theme-set-vscode
|
|
||||||
|
|
||||||
setsid gtk-launch code
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Install xpadneo to ensure controllers work out of the box
|
|
||||||
sudo pacman -S --noconfirm --needed linux-headers
|
|
||||||
yay -S --noconfirm xpadneo-dkms
|
|
||||||
|
|
||||||
# Prevent xpad/xpadneo driver conflict
|
|
||||||
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
|
|
||||||
echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf >/dev/null
|
|
||||||
|
|
||||||
# Give user access to game controllers
|
|
||||||
sudo usermod -a -G input $USER
|
|
||||||
|
|
||||||
# Modules need to be loaded
|
|
||||||
gum confirm "Install requires reboot. Ready?" && sudo reboot now
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
rfkill unblock bluetooth
|
|
||||||
exec omarchy-launch-or-focus-tui bluetui
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
default_browser=$(xdg-settings get default-web-browser)
|
|
||||||
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
|
|
||||||
|
|
||||||
if [[ $browser_exec =~ (firefox|zen|librewolf) ]]; then
|
|
||||||
private_flag="--private-window"
|
|
||||||
else
|
|
||||||
private_flag="--incognito"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec setsid uwsm-app -- "$browser_exec" "${@/--private/$private_flag}"
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
|
|
||||||
|
|
||||||
case "$EDITOR" in
|
|
||||||
nvim | vim | nano | micro | hx | helix)
|
|
||||||
exec omarchy-launch-tui "$EDITOR" "$@"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
exec setsid uwsm-app -- "$EDITOR" "$@"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cmd="$*"
|
|
||||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-launch-or-focus [window-pattern] [launch-command]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
WINDOW_PATTERN="$1"
|
|
||||||
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
|
||||||
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
|
|
||||||
|
|
||||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
|
||||||
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
|
||||||
else
|
|
||||||
eval exec setsid $LAUNCH_COMMAND
|
|
||||||
fi
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
APP_ID="org.omarchy.$(basename $1)"
|
|
||||||
LAUNCH_COMMAND="omarchy-launch-tui $@"
|
|
||||||
|
|
||||||
exec omarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
WINDOW_PATTERN="$1"
|
|
||||||
shift
|
|
||||||
LAUNCH_COMMAND="omarchy-launch-webapp $@"
|
|
||||||
|
|
||||||
exec omarchy-launch-or-focus "$WINDOW_PATTERN" "$LAUNCH_COMMAND"
|
|
||||||
@@ -1,47 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Exit early if we don't have the tte show
|
pkill -f "alacritty --class Screensaver" ||
|
||||||
if ! command -v tte &>/dev/null; then
|
alacritty --class Screensaver --title Screensaver -o 'colors.primary.background="#000000"' \
|
||||||
exit 1
|
-e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver
|
||||||
fi
|
|
||||||
|
|
||||||
# Exit early if screensave is already running
|
|
||||||
pgrep -f org.omarchy.screensaver && exit 0
|
|
||||||
|
|
||||||
# Allow screensaver to be turned off but also force started
|
|
||||||
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
|
|
||||||
terminal=$(xdg-terminal-exec --print-id)
|
|
||||||
|
|
||||||
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
|
||||||
hyprctl dispatch focusmonitor $m
|
|
||||||
|
|
||||||
case $terminal in
|
|
||||||
*Alacritty*)
|
|
||||||
hyprctl dispatch exec -- \
|
|
||||||
alacritty --class=org.omarchy.screensaver \
|
|
||||||
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
|
|
||||||
-e omarchy-cmd-screensaver
|
|
||||||
;;
|
|
||||||
*ghostty*)
|
|
||||||
hyprctl dispatch exec -- \
|
|
||||||
ghostty --class=org.omarchy.screensaver \
|
|
||||||
--font-size=18 \
|
|
||||||
-e omarchy-cmd-screensaver
|
|
||||||
;;
|
|
||||||
*kitty*)
|
|
||||||
hyprctl dispatch exec -- \
|
|
||||||
kitty --class=org.omarchy.screensaver \
|
|
||||||
--override font_size=18 \
|
|
||||||
-e omarchy-cmd-screensaver
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
hyprctl dispatch focusmonitor $focused
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Ensure elephant is running before launching walker
|
|
||||||
if ! pgrep -x elephant > /dev/null; then
|
|
||||||
setsid uwsm-app -- elephant &
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ensure walker service is running
|
|
||||||
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
|
|
||||||
setsid uwsm-app -- walker --gapplication-service &
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec walker --width 644 --maxheight 300 --minheight 300 "$@"
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
browser=$(xdg-settings get default-web-browser)
|
|
||||||
|
|
||||||
case $browser in
|
|
||||||
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
|
|
||||||
*) browser="chromium.desktop" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exec setsid uwsm-app -- $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$browser 2>/dev/null | head -1) --app="$1" "${@:2}"
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
rfkill unblock wifi
|
|
||||||
omarchy-launch-or-focus-tui impala
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Lock the screen
|
|
||||||
pidof hyprlock || hyprlock &
|
|
||||||
|
|
||||||
# Ensure 1password is locked
|
|
||||||
if pgrep -x "1password" >/dev/null; then
|
|
||||||
1password --lock &
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Avoid running screensaver when locked
|
|
||||||
pkill -f org.omarchy.screensaver
|
|
||||||
476
bin/omarchy-menu
@@ -1,476 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
export PATH="$HOME/.local/share/omarchy/bin:$PATH"
|
|
||||||
|
|
||||||
# Set to true when going directly to a submenu, so we can exit directly
|
|
||||||
BACK_TO_EXIT=false
|
|
||||||
|
|
||||||
back_to() {
|
|
||||||
local parent_menu="$1"
|
|
||||||
|
|
||||||
if [[ "$BACK_TO_EXIT" == "true" ]]; then
|
|
||||||
exit 0
|
|
||||||
elif [[ -n "$parent_menu" ]]; then
|
|
||||||
"$parent_menu"
|
|
||||||
else
|
|
||||||
show_main_menu
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
menu() {
|
|
||||||
local prompt="$1"
|
|
||||||
local options="$2"
|
|
||||||
local extra="$3"
|
|
||||||
local preselect="$4"
|
|
||||||
|
|
||||||
read -r -a args <<<"$extra"
|
|
||||||
|
|
||||||
if [[ -n "$preselect" ]]; then
|
|
||||||
local index
|
|
||||||
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
|
||||||
if [[ -n "$index" ]]; then
|
|
||||||
args+=("-c" "$index")
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
terminal() {
|
|
||||||
xdg-terminal-exec --app-id=org.omarchy.terminal "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
present_terminal() {
|
|
||||||
omarchy-launch-floating-terminal-with-presentation $1
|
|
||||||
}
|
|
||||||
|
|
||||||
open_in_editor() {
|
|
||||||
notify-send "Editing config file" "$1"
|
|
||||||
omarchy-launch-editor "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
install() {
|
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
install_and_launch() {
|
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm $2 && setsid gtk-launch $3"
|
|
||||||
}
|
|
||||||
|
|
||||||
install_font() {
|
|
||||||
present_terminal "echo 'Installing $1...'; sudo pacman -S --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'"
|
|
||||||
}
|
|
||||||
|
|
||||||
install_terminal() {
|
|
||||||
present_terminal "omarchy-install-terminal $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
aur_install() {
|
|
||||||
present_terminal "echo 'Installing $1 from AUR...'; yay -S --noconfirm $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
aur_install_and_launch() {
|
|
||||||
present_terminal "echo 'Installing $1 from AUR...'; yay -S --noconfirm $2 && setsid gtk-launch $3"
|
|
||||||
}
|
|
||||||
|
|
||||||
show_learn_menu() {
|
|
||||||
case $(menu "Learn" " Keybindings\n Omarchy\n Hyprland\n Arch\n Neovim\n Bash") in
|
|
||||||
*Keybindings*) omarchy-menu-keybindings ;;
|
|
||||||
*Omarchy*) omarchy-launch-webapp "https://learn.omacom.io/2/the-omarchy-manual" ;;
|
|
||||||
*Hyprland*) omarchy-launch-webapp "https://wiki.hypr.land/" ;;
|
|
||||||
*Arch*) omarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
|
|
||||||
*Bash*) omarchy-launch-webapp "https://devhints.io/bash" ;;
|
|
||||||
*Neovim*) omarchy-launch-webapp "https://www.lazyvim.org/keymaps" ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_trigger_menu() {
|
|
||||||
case $(menu "Trigger" " Capture\n Share\n Toggle") in
|
|
||||||
*Capture*) show_capture_menu ;;
|
|
||||||
*Share*) show_share_menu ;;
|
|
||||||
*Toggle*) show_toggle_menu ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_capture_menu() {
|
|
||||||
case $(menu "Capture" " Screenshot\n Screenrecord\n Color") in
|
|
||||||
*Screenshot*) show_screenshot_menu ;;
|
|
||||||
*Screenrecord*) show_screenrecord_menu ;;
|
|
||||||
*Color*) pkill hyprpicker || hyprpicker -a ;;
|
|
||||||
*) show_trigger_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_screenshot_menu() {
|
|
||||||
case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in
|
|
||||||
*Editing*) omarchy-cmd-screenshot smart ;;
|
|
||||||
*Clipboard*) omarchy-cmd-screenshot smart clipboard ;;
|
|
||||||
*) show_capture_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_screenrecord_menu() {
|
|
||||||
omarchy-cmd-screenrecord --stop-recording && exit 0
|
|
||||||
|
|
||||||
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
|
|
||||||
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
|
|
||||||
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
|
|
||||||
*"With desktop + microphone audio + webcam") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam ;;
|
|
||||||
*) back_to show_capture_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_share_menu() {
|
|
||||||
case $(menu "Share" " Clipboard\n File \n Folder") in
|
|
||||||
*Clipboard*) omarchy-cmd-share clipboard ;;
|
|
||||||
*File*) terminal bash -c "omarchy-cmd-share file" ;;
|
|
||||||
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
|
|
||||||
*) back_to show_trigger_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_toggle_menu() {
|
|
||||||
case $(menu "Toggle" " Screensaver\n Nightlight\n Idle Lock\n Top Bar") in
|
|
||||||
*Screensaver*) omarchy-toggle-screensaver ;;
|
|
||||||
*Nightlight*) omarchy-toggle-nightlight ;;
|
|
||||||
*Idle*) omarchy-toggle-idle ;;
|
|
||||||
*Bar*) omarchy-toggle-waybar ;;
|
|
||||||
*) show_trigger_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_style_menu() {
|
|
||||||
case $(menu "Style" " Theme\n Font\n Background\n Hyprland\n Screensaver\n About") in
|
|
||||||
*Theme*) show_theme_menu ;;
|
|
||||||
*Font*) show_font_menu ;;
|
|
||||||
*Background*) omarchy-theme-bg-next ;;
|
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
|
||||||
*Screensaver*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
|
|
||||||
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_theme_menu() {
|
|
||||||
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
|
|
||||||
}
|
|
||||||
|
|
||||||
show_font_menu() {
|
|
||||||
theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)")
|
|
||||||
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
|
|
||||||
back_to show_style_menu
|
|
||||||
else
|
|
||||||
omarchy-font-set "$theme"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
show_setup_menu() {
|
|
||||||
local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n Monitors"
|
|
||||||
[ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings"
|
|
||||||
[ -f ~/.config/hypr/input.conf ] && options="$options\n Input"
|
|
||||||
options="$options\n Defaults\n DNS\n Security\n Config"
|
|
||||||
|
|
||||||
case $(menu "Setup" "$options") in
|
|
||||||
*Audio*) omarchy-launch-or-focus-tui wiremix ;;
|
|
||||||
*Wifi*) omarchy-launch-wifi ;;
|
|
||||||
*Bluetooth*) omarchy-launch-bluetooth ;;
|
|
||||||
*Power*) show_setup_power_menu ;;
|
|
||||||
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
|
|
||||||
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
|
|
||||||
*Input*) open_in_editor ~/.config/hypr/input.conf ;;
|
|
||||||
*Defaults*) open_in_editor ~/.config/uwsm/default ;;
|
|
||||||
*DNS*) present_terminal omarchy-setup-dns ;;
|
|
||||||
*Security*) show_setup_security_menu ;;
|
|
||||||
*Config*) show_setup_config_menu ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_setup_power_menu() {
|
|
||||||
profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
|
|
||||||
|
|
||||||
if [[ "$profile" == "CNCLD" || -z "$profile" ]]; then
|
|
||||||
back_to show_setup_menu
|
|
||||||
else
|
|
||||||
powerprofilesctl set "$profile"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
show_setup_config_menu() {
|
|
||||||
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
|
||||||
*Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
|
|
||||||
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;;
|
|
||||||
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
|
|
||||||
*Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && omarchy-restart-hyprsunset ;;
|
|
||||||
*Swayosd*) open_in_editor ~/.config/swayosd/config.toml && omarchy-restart-swayosd ;;
|
|
||||||
*Walker*) open_in_editor ~/.config/walker/config.toml && omarchy-restart-walker ;;
|
|
||||||
*Waybar*) open_in_editor ~/.config/waybar/config.jsonc && omarchy-restart-waybar ;;
|
|
||||||
*XCompose*) open_in_editor ~/.XCompose && omarchy-restart-xcompose ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_setup_security_menu() {
|
|
||||||
case $(menu "Setup" " Fingerprint\n Fido2") in
|
|
||||||
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
|
|
||||||
*Fido2*) present_terminal omarchy-setup-fido2 ;;
|
|
||||||
*) show_setup_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_menu() {
|
|
||||||
case $(menu "Install" " Package\n AUR\n Web App\n TUI\n Service\n Style\n Development\n Editor\n Terminal\n AI\n Windows\n Gaming") in
|
|
||||||
*Package*) terminal omarchy-pkg-install ;;
|
|
||||||
*AUR*) terminal omarchy-pkg-aur-install ;;
|
|
||||||
*Web*) present_terminal omarchy-webapp-install ;;
|
|
||||||
*TUI*) present_terminal omarchy-tui-install ;;
|
|
||||||
*Service*) show_install_service_menu ;;
|
|
||||||
*Style*) show_install_style_menu ;;
|
|
||||||
*Development*) show_install_development_menu ;;
|
|
||||||
*Editor*) show_install_editor_menu ;;
|
|
||||||
*Terminal*) show_install_terminal_menu ;;
|
|
||||||
*AI*) show_install_ai_menu ;;
|
|
||||||
*Windows*) present_terminal "omarchy-windows-vm install" ;;
|
|
||||||
*Gaming*) show_install_gaming_menu ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_service_menu() {
|
|
||||||
case $(menu "Install" " Dropbox\n Tailscale\n Bitwarden\n Chromium Account") in
|
|
||||||
*Dropbox*) present_terminal omarchy-install-dropbox ;;
|
|
||||||
*Tailscale*) present_terminal omarchy-install-tailscale ;;
|
|
||||||
*Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;;
|
|
||||||
*Chromium*) present_terminal omarchy-install-chromium-google-account ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_editor_menu() {
|
|
||||||
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
|
|
||||||
*VSCode*) present_terminal omarchy-install-vscode ;;
|
|
||||||
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
|
|
||||||
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
|
|
||||||
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
|
|
||||||
*Helix*) install "Helix" "helix" ;;
|
|
||||||
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_terminal_menu() {
|
|
||||||
case $(menu "Install" " Alacritty\n Ghostty\n Kitty") in
|
|
||||||
*Alacritty*) install_terminal "alacritty" ;;
|
|
||||||
*Ghostty*) install_terminal "ghostty" ;;
|
|
||||||
*Kitty*) install_terminal "kitty" ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_ai_menu() {
|
|
||||||
ollama_pkg=$(
|
|
||||||
(command -v nvidia-smi &>/dev/null && echo ollama-cuda) ||
|
|
||||||
(command -v rocminfo &>/dev/null && echo ollama-rocm) ||
|
|
||||||
echo ollama
|
|
||||||
)
|
|
||||||
|
|
||||||
case $(menu "Install" " Claude Code\n Cursor CLI\n Gemini\n OpenAI Codex\n LM Studio\n Ollama\n Crush\n opencode") in
|
|
||||||
*Claude*) install "Claude Code" "claude-code" ;;
|
|
||||||
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
|
|
||||||
*OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;;
|
|
||||||
*Gemini*) install "Gemini" "gemini-cli" ;;
|
|
||||||
*Studio*) install "LM Studio" "lmstudio" ;;
|
|
||||||
*Ollama*) install "Ollama" $ollama_pkg ;;
|
|
||||||
*Crush*) install "Crush" "crush-bin" ;;
|
|
||||||
*opencode*) install "opencode" "opencode" ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_gaming_menu() {
|
|
||||||
case $(menu "Install" " Steam\n RetroArch [AUR]\n Minecraft\n Xbox Controller [AUR]") in
|
|
||||||
*Steam*) present_terminal omarchy-install-steam ;;
|
|
||||||
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
|
|
||||||
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
|
|
||||||
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_style_menu() {
|
|
||||||
case $(menu "Install" " Theme\n Background\n Font") in
|
|
||||||
*Theme*) present_terminal omarchy-theme-install ;;
|
|
||||||
*Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;;
|
|
||||||
*Font*) show_install_font_menu ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_font_menu() {
|
|
||||||
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "--width 350") in
|
|
||||||
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
|
|
||||||
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
|
|
||||||
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
|
|
||||||
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_development_menu() {
|
|
||||||
case $(menu "Install" " Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in
|
|
||||||
*Rails*) present_terminal "omarchy-install-dev-env ruby" ;;
|
|
||||||
*Docker*) present_terminal omarchy-install-docker-dbs ;;
|
|
||||||
*JavaScript*) show_install_javascript_menu ;;
|
|
||||||
*Go*) present_terminal "omarchy-install-dev-env go" ;;
|
|
||||||
*PHP*) show_install_php_menu ;;
|
|
||||||
*Python*) present_terminal "omarchy-install-dev-env python" ;;
|
|
||||||
*Elixir*) show_install_elixir_menu ;;
|
|
||||||
*Zig*) present_terminal "omarchy-install-dev-env zig" ;;
|
|
||||||
*Rust*) present_terminal "omarchy-install-dev-env rust" ;;
|
|
||||||
*Java*) present_terminal "omarchy-install-dev-env java" ;;
|
|
||||||
*NET*) present_terminal "omarchy-install-dev-env dotnet" ;;
|
|
||||||
*OCaml*) present_terminal "omarchy-install-dev-env ocaml" ;;
|
|
||||||
*Clojure*) present_terminal "omarchy-install-dev-env clojure" ;;
|
|
||||||
*) show_install_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_javascript_menu() {
|
|
||||||
case $(menu "Install" " Node.js\n Bun\n Deno") in
|
|
||||||
*Node*) present_terminal "omarchy-install-dev-env node" ;;
|
|
||||||
*Bun*) present_terminal "omarchy-install-dev-env bun" ;;
|
|
||||||
*Deno*) present_terminal "omarchy-install-dev-env deno" ;;
|
|
||||||
*) show_install_development_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_php_menu() {
|
|
||||||
case $(menu "Install" " PHP\n Laravel\n Symfony") in
|
|
||||||
*PHP*) present_terminal "omarchy-install-dev-env php" ;;
|
|
||||||
*Laravel*) present_terminal "omarchy-install-dev-env laravel" ;;
|
|
||||||
*Symfony*) present_terminal "omarchy-install-dev-env symfony" ;;
|
|
||||||
*) show_install_development_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_install_elixir_menu() {
|
|
||||||
case $(menu "Install" " Elixir\n Phoenix") in
|
|
||||||
*Elixir*) present_terminal "omarchy-install-dev-env elixir" ;;
|
|
||||||
*Phoenix*) present_terminal "omarchy-install-dev-env phoenix" ;;
|
|
||||||
*) show_install_development_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_remove_menu() {
|
|
||||||
case $(menu "Remove" " Package\n Web App\n TUI\n Theme\n Windows\n Fingerprint\n Fido2") in
|
|
||||||
*Package*) terminal omarchy-pkg-remove ;;
|
|
||||||
*Web*) present_terminal omarchy-webapp-remove ;;
|
|
||||||
*TUI*) present_terminal omarchy-tui-remove ;;
|
|
||||||
*Theme*) present_terminal omarchy-theme-remove ;;
|
|
||||||
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
|
|
||||||
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
|
|
||||||
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_update_menu() {
|
|
||||||
case $(menu "Update" " Omarchy\n Config\n Extra Themes\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
|
||||||
*Omarchy*) present_terminal omarchy-update ;;
|
|
||||||
*Config*) show_update_config_menu ;;
|
|
||||||
*Themes*) present_terminal omarchy-theme-update ;;
|
|
||||||
*Process*) show_update_process_menu ;;
|
|
||||||
*Hardware*) show_update_hardware_menu ;;
|
|
||||||
*Firmware*) present_terminal omarchy-update-firmware ;;
|
|
||||||
*Timezone*) present_terminal omarchy-tz-select ;;
|
|
||||||
*Time*) present_terminal omarchy-update-time ;;
|
|
||||||
*Password*) show_update_password_menu ;;
|
|
||||||
*) show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_update_process_menu() {
|
|
||||||
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
|
||||||
*Hypridle*) omarchy-restart-hypridle ;;
|
|
||||||
*Hyprsunset*) omarchy-restart-hyprsunset ;;
|
|
||||||
*Swayosd*) omarchy-restart-swayosd ;;
|
|
||||||
*Walker*) omarchy-restart-walker ;;
|
|
||||||
*Waybar*) omarchy-restart-waybar ;;
|
|
||||||
*) show_update_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_update_config_menu() {
|
|
||||||
case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Plymouth\n Swayosd\n Walker\n Waybar") in
|
|
||||||
*Hyprland*) present_terminal omarchy-refresh-hyprland ;;
|
|
||||||
*Hypridle*) present_terminal omarchy-refresh-hypridle ;;
|
|
||||||
*Hyprlock*) present_terminal omarchy-refresh-hyprlock ;;
|
|
||||||
*Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;;
|
|
||||||
*Plymouth*) present_terminal omarchy-refresh-plymouth ;;
|
|
||||||
*Swayosd*) present_terminal omarchy-refresh-swayosd ;;
|
|
||||||
*Walker*) present_terminal omarchy-refresh-walker ;;
|
|
||||||
*Waybar*) present_terminal omarchy-refresh-waybar ;;
|
|
||||||
*) show_update_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_update_hardware_menu() {
|
|
||||||
case $(menu "Restart" " Audio\n Wi-Fi\n Bluetooth") in
|
|
||||||
*Audio*) present_terminal omarchy-restart-pipewire ;;
|
|
||||||
*Wi-Fi*) present_terminal omarchy-restart-wifi ;;
|
|
||||||
*Bluetooth*) present_terminal omarchy-restart-bluetooth ;;
|
|
||||||
*) show_update_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_update_password_menu() {
|
|
||||||
case $(menu "Update Password" " Drive Encryption\n User") in
|
|
||||||
*Drive*) present_terminal omarchy-drive-set-password ;;
|
|
||||||
*User*) present_terminal passwd ;;
|
|
||||||
*) show_update_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_system_menu() {
|
|
||||||
case $(menu "System" " Lock\n Screensaver\n Suspend\n Restart\n Shutdown") in
|
|
||||||
*Lock*) omarchy-lock-screen ;;
|
|
||||||
*Screensaver*) omarchy-launch-screensaver force ;;
|
|
||||||
*Suspend*) systemctl suspend ;;
|
|
||||||
*Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;;
|
|
||||||
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;;
|
|
||||||
*) back_to show_main_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
show_main_menu() {
|
|
||||||
go_to_menu "$(menu "Go" " Apps\n Learn\n Trigger\n Style\n Setup\n Install\n Remove\n Update\n About\n System")"
|
|
||||||
}
|
|
||||||
|
|
||||||
go_to_menu() {
|
|
||||||
case "${1,,}" in
|
|
||||||
*apps*) walker -p "Launch…" ;;
|
|
||||||
*learn*) show_learn_menu ;;
|
|
||||||
*trigger*) show_trigger_menu ;;
|
|
||||||
*share*) show_share_menu ;;
|
|
||||||
*style*) show_style_menu ;;
|
|
||||||
*theme*) show_theme_menu ;;
|
|
||||||
*screenshot*) show_screenshot_menu ;;
|
|
||||||
*screenrecord*) show_screenrecord_menu ;;
|
|
||||||
*setup*) show_setup_menu ;;
|
|
||||||
*power*) show_setup_power_menu ;;
|
|
||||||
*install*) show_install_menu ;;
|
|
||||||
*remove*) show_remove_menu ;;
|
|
||||||
*update*) show_update_menu ;;
|
|
||||||
*about*) omarchy-launch-about ;;
|
|
||||||
*system*) show_system_menu ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ -n "$1" ]]; then
|
|
||||||
BACK_TO_EXIT=true
|
|
||||||
go_to_menu "$1"
|
|
||||||
else
|
|
||||||
show_main_menu
|
|
||||||
fi
|
|
||||||
@@ -3,130 +3,34 @@
|
|||||||
# A script to display Hyprland keybindings defined in your configuration
|
# A script to display Hyprland keybindings defined in your configuration
|
||||||
# using walker for an interactive search menu.
|
# using walker for an interactive search menu.
|
||||||
|
|
||||||
declare -A KEYCODE_SYM_MAP
|
USER_HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf"
|
||||||
|
OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf \
|
||||||
|
$HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf \
|
||||||
|
$HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf \
|
||||||
|
$HOME/.local/share/omarchy/default/hypr/bindings/media.conf"
|
||||||
|
|
||||||
build_keymap_cache() {
|
# Process the configuration file to extract and format keybindings
|
||||||
local keymap
|
# 1. `grep` finds all lines starting with 'bind' (allowing for leading spaces).
|
||||||
keymap="$(xkbcli compile-keymap)" || {
|
# 2. The first `sed` removes comments (anything after a '#').
|
||||||
echo "Failed to compile keymap" >&2
|
# 3. `awk` does the heavy lifting of formatting the output.
|
||||||
return 1
|
# - It sets the field separator to a comma ','.
|
||||||
}
|
# - It removes the 'bind... =' part from the beginning of the line.
|
||||||
|
# - It joins the key combination (e.g., "SUPER + Q").
|
||||||
while IFS=, read -r code sym; do
|
# - It joins the command that the key executes.
|
||||||
[[ -z "$code" || -z "$sym" ]] && continue
|
# - It prints everything in a nicely aligned format.
|
||||||
KEYCODE_SYM_MAP["$code"]="$sym"
|
# 4. The final `sed` cleans up any leftover commas from the end of lines.
|
||||||
done < <(
|
grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF |
|
||||||
awk '
|
sed 's/#.*//' |
|
||||||
BEGIN { sec = "" }
|
sed '/^[[:space:]]*$/d' |
|
||||||
/xkb_keycodes/ { sec = "codes"; next }
|
sort -u |
|
||||||
/xkb_symbols/ { sec = "syms"; next }
|
|
||||||
sec == "codes" {
|
|
||||||
if (match($0, /<([A-Za-z0-9_]+)>\s*=\s*([0-9]+)\s*;/, m)) code_by_name[m[1]] = m[2]
|
|
||||||
}
|
|
||||||
sec == "syms" {
|
|
||||||
if (match($0, /key\s*<([A-Za-z0-9_]+)>\s*\{\s*\[\s*([^, \]]+)/, m)) sym_by_name[m[1]] = m[2]
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
for (k in code_by_name) {
|
|
||||||
c = code_by_name[k]
|
|
||||||
s = sym_by_name[k]
|
|
||||||
if (c != "" && s != "" && s != "NoSymbol") print c "," s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
' <<<"$keymap"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
lookup_keycode_cached() {
|
|
||||||
printf '%s\n' "${KEYCODE_SYM_MAP[$1]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_keycodes() {
|
|
||||||
local start end elapsed
|
|
||||||
[[ "${DEBUG:-0}" == "1" ]] && start=$(date +%s.%N)
|
|
||||||
while IFS= read -r line; do
|
|
||||||
if [[ "$line" =~ code:([0-9]+) ]]; then
|
|
||||||
code="${BASH_REMATCH[1]}"
|
|
||||||
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
|
|
||||||
echo "${line/code:${code}/$symbol}"
|
|
||||||
elif [[ "$line" =~ mouse:([0-9]+) ]]; then
|
|
||||||
code="${BASH_REMATCH[1]}"
|
|
||||||
|
|
||||||
case "$code" in
|
|
||||||
272) symbol="LEFT MOUSE BUTTON" ;;
|
|
||||||
273) symbol="RIGHT MOUSE BUTTON" ;;
|
|
||||||
274) symbol="MIDDLE MOUSE BUTTON" ;;
|
|
||||||
*) symbol="mouse:${code}" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "${line/mouse:${code}/$symbol}"
|
|
||||||
else
|
|
||||||
echo "$line"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "$DEBUG" == "1" ]]; then
|
|
||||||
end=$(date +%s.%N)
|
|
||||||
# fall back to awk if bc is missing
|
|
||||||
if command -v bc >/dev/null 2>&1; then
|
|
||||||
elapsed=$(echo "$end - $start" | bc)
|
|
||||||
else
|
|
||||||
elapsed=$(awk -v s="$start" -v e="$end" 'BEGIN{printf "%.6f", (e - s)}')
|
|
||||||
fi
|
|
||||||
echo "[DEBUG] parse_keycodes elapsed: ${elapsed}s" >&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fetch dynamic keybindings from Hyprland
|
|
||||||
#
|
|
||||||
# Also do some pre-processing:
|
|
||||||
# - Remove standard Omarchy bin path prefix
|
|
||||||
# - Remove uwsm prefix
|
|
||||||
# - Map numeric modifier key mask to a textual rendition
|
|
||||||
# - Output comma-separated values that the parser can understand
|
|
||||||
dynamic_bindings() {
|
|
||||||
hyprctl -j binds |
|
|
||||||
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
|
|
||||||
sed -r \
|
|
||||||
-e 's/null//' \
|
|
||||||
-e 's,~/.local/share/omarchy/bin/,,' \
|
|
||||||
-e 's,uwsm app -- ,,' \
|
|
||||||
-e 's,uwsm-app -- ,,' \
|
|
||||||
-e 's/@0//' \
|
|
||||||
-e 's/,@/,code:/' \
|
|
||||||
-e 's/^0,/,/' \
|
|
||||||
-e 's/^1,/SHIFT,/' \
|
|
||||||
-e 's/^4,/CTRL,/' \
|
|
||||||
-e 's/^5,/SHIFT CTRL,/' \
|
|
||||||
-e 's/^8,/ALT,/' \
|
|
||||||
-e 's/^9,/SHIFT ALT,/' \
|
|
||||||
-e 's/^12,/CTRL ALT,/' \
|
|
||||||
-e 's/^13,/SHIFT CTRL ALT,/' \
|
|
||||||
-e 's/^64,/SUPER,/' \
|
|
||||||
-e 's/^65,/SUPER SHIFT,/' \
|
|
||||||
-e 's/^68,/SUPER CTRL,/' \
|
|
||||||
-e 's/^69,/SUPER SHIFT CTRL,/' \
|
|
||||||
-e 's/^72,/SUPER ALT,/' \
|
|
||||||
-e 's/^73,/SUPER SHIFT ALT,/' \
|
|
||||||
-e 's/^76,/SUPER CTRL ALT,/' \
|
|
||||||
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Hardcoded bindings, like the copy-url extension and such
|
|
||||||
static_bindings() {
|
|
||||||
echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Parse and format keybindings
|
|
||||||
#
|
|
||||||
# `awk` does the heavy lifting:
|
|
||||||
# - Set the field separator to a comma ','.
|
|
||||||
# - Joins the key combination (e.g., "SUPER + Q").
|
|
||||||
# - Joins the command that the key executes.
|
|
||||||
# - Prints everything in a nicely aligned format.
|
|
||||||
parse_bindings() {
|
|
||||||
awk -F, '
|
awk -F, '
|
||||||
{
|
{
|
||||||
|
# Strip trailing comments
|
||||||
|
sub(/#.*/, "");
|
||||||
|
|
||||||
|
# Remove the "bind... =" part and surrounding whitespace
|
||||||
|
sub(/^[[:space:]]*bind[^=]*=(\+[[:space:]])?(exec, )?[[:space:]]*/, "", $1);
|
||||||
|
|
||||||
# Combine the modifier and key (first two fields)
|
# Combine the modifier and key (first two fields)
|
||||||
key_combo = $1 " + " $2;
|
key_combo = $1 " + " $2;
|
||||||
|
|
||||||
@@ -134,12 +38,9 @@ parse_bindings() {
|
|||||||
gsub(/^[ \t]*\+?[ \t]*/, "", key_combo);
|
gsub(/^[ \t]*\+?[ \t]*/, "", key_combo);
|
||||||
gsub(/[ \t]+$/, "", key_combo);
|
gsub(/[ \t]+$/, "", key_combo);
|
||||||
|
|
||||||
# Use description, if set
|
|
||||||
action = $3;
|
|
||||||
|
|
||||||
if (action == "") {
|
|
||||||
# Reconstruct the command from the remaining fields
|
# Reconstruct the command from the remaining fields
|
||||||
for (i = 4; i <= NF; i++) {
|
action = "";
|
||||||
|
for (i = 3; i <= NF; i++) {
|
||||||
action = action $i (i < NF ? "," : "");
|
action = action $i (i < NF ? "," : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,81 +50,15 @@ parse_bindings() {
|
|||||||
gsub(/^[ \t]+|[ \t]+$/, "", action);
|
gsub(/^[ \t]+|[ \t]+$/, "", action);
|
||||||
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
|
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
|
||||||
|
|
||||||
|
if (action != "") {
|
||||||
# Escape XML entities
|
# Escape XML entities
|
||||||
gsub(/&/, "\\&", action);
|
gsub(/&/, "\\&", action);
|
||||||
gsub(/</, "\\<", action);
|
gsub(/</, "\\<", action);
|
||||||
gsub(/>/, "\\>", action);
|
gsub(/>/, "\\>", action);
|
||||||
gsub(/"/, "\\"", action);
|
gsub(/"/, "\\"", action);
|
||||||
gsub(/'"'"'/, "\\'", action);
|
gsub(/'"'"'/, "\\'", action);
|
||||||
}
|
|
||||||
|
|
||||||
if (action != "") {
|
|
||||||
printf "%-35s → %s\n", key_combo, action;
|
printf "%-35s → %s\n", key_combo, action;
|
||||||
}
|
}
|
||||||
}'
|
|
||||||
}
|
|
||||||
|
|
||||||
prioritize_entries() {
|
|
||||||
awk '
|
|
||||||
{
|
|
||||||
line = $0
|
|
||||||
prio = 50
|
|
||||||
if (match(line, /Terminal/)) prio = 0
|
|
||||||
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
|
|
||||||
if (match(line, /File manager/)) prio = 2
|
|
||||||
if (match(line, /Launch apps/)) prio = 3
|
|
||||||
if (match(line, /Omarchy menu/)) prio = 4
|
|
||||||
if (match(line, /System menu/)) prio = 5
|
|
||||||
if (match(line, /Theme menu/)) prio = 6
|
|
||||||
if (match(line, /Full screen/)) prio = 7
|
|
||||||
if (match(line, /Close window/)) prio = 8
|
|
||||||
if (match(line, /Toggle window floating/)) prio = 9
|
|
||||||
if (match(line, /Toggle window split/)) prio = 10
|
|
||||||
if (match(line, /Universal/)) prio = 11
|
|
||||||
if (match(line, /Clipboard/)) prio = 12
|
|
||||||
if (match(line, /Emoji picker/)) prio = 13
|
|
||||||
if (match(line, /Color picker/)) prio = 14
|
|
||||||
if (match(line, /Screenshot/)) prio = 15
|
|
||||||
if (match(line, /Screenrecording/)) prio = 16
|
|
||||||
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17
|
|
||||||
if (match(line, /Move window to workspace/)) prio = 18
|
|
||||||
if (match(line, /Swap window/)) prio = 19
|
|
||||||
if (match(line, /Move window focus/)) prio = 20
|
|
||||||
if (match(line, /Move window$/)) prio = 21
|
|
||||||
if (match(line, /Resize window/)) prio = 22
|
|
||||||
if (match(line, /Expand window/)) prio = 23
|
|
||||||
if (match(line, /Shrink window/)) prio = 24
|
|
||||||
if (match(line, /scratchpad/)) prio = 25
|
|
||||||
if (match(line, /notification/)) prio = 26
|
|
||||||
if (match(line, /Toggle window transparency/)) prio = 27
|
|
||||||
if (match(line, /Toggle workspace gaps/)) prio = 28
|
|
||||||
if (match(line, /Toggle nightlight/)) prio = 29
|
|
||||||
if (match(line, /group/)) prio = 94
|
|
||||||
if (match(line, /Scroll active workspace/)) prio = 95
|
|
||||||
if (match(line, /Cycle to/)) prio = 96
|
|
||||||
if (match(line, /Reveal active/)) prio = 97
|
|
||||||
if (match(line, /Apple Display/)) prio = 98
|
|
||||||
if (match(line, /XF86/)) prio = 99
|
|
||||||
|
|
||||||
# print "priority<TAB>line"
|
|
||||||
printf "%d\t%s\n", prio, line
|
|
||||||
}' |
|
}' |
|
||||||
sort -k1,1n -k2,2 |
|
walker --dmenu --theme keybindings -p 'Keybindings'
|
||||||
cut -f2-
|
|
||||||
}
|
|
||||||
|
|
||||||
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
|
|
||||||
menu_height=$((monitor_height * 40 / 100))
|
|
||||||
|
|
||||||
build_keymap_cache
|
|
||||||
|
|
||||||
{
|
|
||||||
dynamic_bindings
|
|
||||||
static_bindings
|
|
||||||
} |
|
|
||||||
sort -u |
|
|
||||||
parse_keycodes |
|
|
||||||
parse_bindings |
|
|
||||||
prioritize_entries |
|
|
||||||
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
|
|
||||||
|
|
||||||
|
|||||||
21
bin/omarchy-menu-power
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
show_power_menu() {
|
||||||
|
# The first characters are invisible sort keys.
|
||||||
|
local menu_options="\u200B Lock
|
||||||
|
\u200C Suspend
|
||||||
|
\u200D Relaunch
|
||||||
|
\u2060 Restart
|
||||||
|
\u2063 Shutdown"
|
||||||
|
local selection=$(echo -e "$menu_options" | walker --dmenu --theme dmenu_150)
|
||||||
|
|
||||||
|
case "$selection" in
|
||||||
|
*Lock*) hyprlock ;;
|
||||||
|
*Suspend*) systemctl suspend ;;
|
||||||
|
*Relaunch*) uwsm stop ;;
|
||||||
|
*Restart*) systemctl reboot ;;
|
||||||
|
*Shutdown*) systemctl poweroff ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
show_power_menu
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Where we store an empty file for each migration that has already been performed.
|
|
||||||
STATE_DIR="$HOME/.local/state/omarchy/migrations"
|
|
||||||
mkdir -p "$STATE_DIR"
|
|
||||||
|
|
||||||
# Skipped migrations are tracked separately
|
|
||||||
mkdir -p "$STATE_DIR/skipped"
|
|
||||||
|
|
||||||
# Run any pending migrations
|
|
||||||
for file in ~/.local/share/omarchy/migrations/*.sh; do
|
|
||||||
filename=$(basename "$file")
|
|
||||||
|
|
||||||
if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then
|
|
||||||
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
|
|
||||||
|
|
||||||
if bash $file; then
|
|
||||||
touch "$STATE_DIR/$filename"
|
|
||||||
else
|
|
||||||
if gum confirm "Migration ${filename%.sh} failed. Skip and continue?"; then
|
|
||||||
touch "$STATE_DIR/skipped/$filename"
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if (($# == 0)); then
|
|
||||||
echo "Usage: omarchy-notification-dismiss <summary>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the first notification whose 'summary' matches the regex in $1
|
|
||||||
notification_id=$(makoctl list | grep -F "$1" | head -n1 | sed -E 's/^Notification ([0-9]+):.*/\1/')
|
|
||||||
|
|
||||||
if [[ -n $notification_id ]]; then
|
|
||||||
makoctl dismiss -n $notification_id
|
|
||||||
fi
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if omarchy-pkg-missing "$@"; then
|
|
||||||
sudo pacman -S --noconfirm --needed "$@" || exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for pkg in "$@"; do
|
|
||||||
# Secondary check to handle states where pacman doesn't actually register an error
|
|
||||||
if ! pacman -Q "$pkg" &>/dev/null; then
|
|
||||||
echo -e "\033[31mError: Package '$pkg' did not install\033[0m" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
curl -sf --connect-timeout 30 --retry 3 --retry-delay 3 -A "omarchy-update" \
|
|
||||||
"https://aur.archlinux.org/rpc/?v=5&type=info&arg=base" >/dev/null
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
fzf_args=(
|
|
||||||
--multi
|
|
||||||
--preview 'yay -Siia {1}'
|
|
||||||
--preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select'
|
|
||||||
--preview-label-pos='bottom'
|
|
||||||
--preview-window 'down:65%:wrap'
|
|
||||||
--bind 'alt-p:toggle-preview'
|
|
||||||
--bind 'alt-d:preview-half-page-down,alt-u:preview-half-page-up'
|
|
||||||
--bind 'alt-k:preview-up,alt-j:preview-down'
|
|
||||||
--bind 'alt-b:change-preview:yay -Gpa {1} | tail -n +5'
|
|
||||||
--bind 'alt-B:change-preview:yay -Siia {1}'
|
|
||||||
--color 'pointer:green,marker:green'
|
|
||||||
)
|
|
||||||
|
|
||||||
pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}")
|
|
||||||
|
|
||||||
if [[ -n "$pkg_names" ]]; then
|
|
||||||
# Convert newline-separated selections to space-separated for yay
|
|
||||||
echo "$pkg_names" | tr '\n' ' ' | xargs yay -S --noconfirm
|
|
||||||
sudo updatedb
|
|
||||||
omarchy-show-done
|
|
||||||
fi
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for pkg in "$@"; do
|
|
||||||
if pacman -Q "$pkg" &>/dev/null; then
|
|
||||||
sudo pacman -Rns --noconfirm "$pkg"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
fzf_args=(
|
|
||||||
--multi
|
|
||||||
--preview 'pacman -Sii {1}'
|
|
||||||
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select'
|
|
||||||
--preview-label-pos='bottom'
|
|
||||||
--preview-window 'down:65%:wrap'
|
|
||||||
--bind 'alt-p:toggle-preview'
|
|
||||||
--bind 'alt-d:preview-half-page-down,alt-u:preview-half-page-up'
|
|
||||||
--bind 'alt-k:preview-up,alt-j:preview-down'
|
|
||||||
--color 'pointer:green,marker:green'
|
|
||||||
)
|
|
||||||
|
|
||||||
pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}")
|
|
||||||
|
|
||||||
if [[ -n "$pkg_names" ]]; then
|
|
||||||
# Convert newline-separated selections to space-separated for yay
|
|
||||||
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -S --noconfirm
|
|
||||||
omarchy-show-done
|
|
||||||
fi
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for pkg in "$@"; do
|
|
||||||
if ! pacman -Q "$pkg" &>/dev/null; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 1
|
|
||||||