diff --git a/README.md b/README.md
index 0a97dd4..8ad45f1 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,12 @@
-# Omasway
+
+
+
+
+Omasway
> ⚠️ **Warning: This project is under active development and is not stable. Use at your own risk.**
-This project is designed for minimal Ubuntu installations ([Ubuntu Server 24.04](https://ubuntu.com/download/server) or [Ubuntu from CD](https://wiki.ubuntu-it.org/Installazione/CdMinimale)) to avoid the need to uninstall the entire Ubuntu desktop environment.
+This project is designed for minimal Ubuntu installations ([Ubuntu Server 24.04](https://ubuntu.com/download/server) or [Ubuntu Minimal CD](https://help.ubuntu.com/community/Installation/MinimalCD#Status_of_the_Minimal_ISO_image)) to avoid the need to uninstall the entire Ubuntu desktop environment.
## Installation
diff --git a/applications/About.sh b/applications/About.sh
deleted file mode 100644
index c1267d0..0000000
--- a/applications/About.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-cat <~/.local/share/applications/About.desktop
-[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=/home/$USER/.local/share/omasway/applications/icons/Ubuntu.png
-Categories=GTK;
-StartupNotify=false
-EOF
diff --git a/applications/Activity.sh b/applications/Activity.sh
deleted file mode 100644
index 9e1c2f9..0000000
--- a/applications/Activity.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-cat <~/.local/share/applications/Activity.desktop
-[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=/home/$USER/.local/share/omasway/applications/icons/Activity.png
-Categories=GTK;
-StartupNotify=false
-EOF
diff --git a/applications/Docker.sh b/applications/Docker.sh
deleted file mode 100644
index 3bb9e7a..0000000
--- a/applications/Docker.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-cat <~/.local/share/applications/Docker.desktop
-[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=/home/$USER/.local/share/omasway/applications/icons/Docker.png
-Categories=GTK;
-StartupNotify=false
-EOF
diff --git a/applications/Neovim.sh b/applications/Neovim.sh
deleted file mode 100644
index c83a46e..0000000
--- a/applications/Neovim.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-cat <~/.local/share/applications/Neovim.desktop
-[Desktop Entry]
-Version=1.0
-Name=Neovim
-Comment=Edit text files
-Exec=alacritty --class=Neovim --title=Neovim -e nvim %F
-Terminal=false
-Type=Application
-Icon=nvim
-Categories=Utilities;TextEditor;
-StartupNotify=false
-EOF
diff --git a/applications/Omasway.sh b/applications/Omasway.sh
deleted file mode 100644
index 81e533d..0000000
--- a/applications/Omasway.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-cat <~/.local/share/applications/Omasway.desktop
-[Desktop Entry]
-Version=1.0
-Name=Omasway
-Comment=Omasway Controls
-Exec=alacritty --class=Omasway --title=Omasway -e omasway
-Terminal=false
-Type=Application
-Icon=/home/$USER/.local/share/omasway/applications/icons/Omasway.png
-Categories=GTK;
-StartupNotify=false
-EOF
diff --git a/applications/desktop/hidden/btop.desktop b/applications/desktop/hidden/btop.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/btop.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/fcitx5-configtool.desktop b/applications/desktop/hidden/fcitx5-configtool.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/fcitx5-configtool.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/htop.desktop b/applications/desktop/hidden/htop.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/htop.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/org.fcitx.Fcitx5.desktop b/applications/desktop/hidden/org.fcitx.Fcitx5.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/org.fcitx.Fcitx5.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/org.fcitx.fcitx5-config-qt.desktop b/applications/desktop/hidden/org.fcitx.fcitx5-config-qt.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/org.fcitx.fcitx5-config-qt.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/org.fcitx.fcitx5-migrator.desktop b/applications/desktop/hidden/org.fcitx.fcitx5-migrator.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/org.fcitx.fcitx5-migrator.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/org.fcitx.fcitx5-qt5-gui-wrapper.desktop b/applications/desktop/hidden/org.fcitx.fcitx5-qt5-gui-wrapper.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/org.fcitx.fcitx5-qt5-gui-wrapper.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/org.fcitx.fcitx5-qt6-gui-wrapper.desktop b/applications/desktop/hidden/org.fcitx.fcitx5-qt6-gui-wrapper.desktop
new file mode 100644
index 0000000..e1e3e17
--- /dev/null
+++ b/applications/desktop/hidden/org.fcitx.fcitx5-qt6-gui-wrapper.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/applications/desktop/hidden/vim.desktop b/applications/desktop/hidden/vim.desktop
new file mode 100644
index 0000000..4904a71
--- /dev/null
+++ b/applications/desktop/hidden/vim.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
\ No newline at end of file
diff --git a/applications/desktop/icons/imv.png b/applications/desktop/icons/imv.png
new file mode 100644
index 0000000..f9cac35
Binary files /dev/null and b/applications/desktop/icons/imv.png differ
diff --git a/applications/desktop/imv.desktop b/applications/desktop/imv.desktop
new file mode 100644
index 0000000..293afc8
--- /dev/null
+++ b/applications/desktop/imv.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=Image Viewer
+Exec=imv %F
+Icon=imv
+Type=Application
+MimeType=image/png;image/jpeg;image/jpg;image/gif;image/bmp;image/webp;image/tiff;image/x-xcf;image/x-portable-pixmap;image/x-xbitmap;
+Terminal=false
+Categories=Graphics;Viewer;
diff --git a/applications/desktop/mpv.desktop b/applications/desktop/mpv.desktop
new file mode 100644
index 0000000..776e2c9
--- /dev/null
+++ b/applications/desktop/mpv.desktop
@@ -0,0 +1,51 @@
+[Desktop Entry]
+Type=Application
+Name=Media Player
+Name[ar]=مشغل وسائط mpv
+Name[ca]=Reproductor multimèdia mpv
+Name[cs]=mpv přehrávač
+Name[da]=mpv-medieafspiller
+Name[fr]=Lecteur multimédia mpv
+Name[it]=Lettore multimediale mpv
+Name[ja]=mpv メディアプレイヤー
+Name[pl]=Odtwarzacz mpv
+Name[ru]=Проигрыватель mpv
+Name[tr]=mpv Ortam Oynatıcı
+Name[zh_CN]=mpv 媒体播放器
+Name[zh_TW]=mpv 媒體播放器
+GenericName=Multimedia player
+GenericName[ar]=مُشَغِّل وسائط متعددة
+GenericName[cs]=Multimediální přehrávač
+GenericName[da]=Multimedieafspiller
+GenericName[fr]=Lecteur multimédia
+GenericName[it]=Lettore multimediale
+GenericName[ja]=マルチメディアプレイヤー
+GenericName[ru]=Мультимедийный проигрыватель
+GenericName[tr]=Çoklu ortam oynatıcı
+GenericName[zh_CN]=多媒体播放器
+GenericName[zh_TW]=多媒體播放器
+Comment=Play movies and songs
+Comment[ar]=شَغِّل الأفلام والأغاني
+Comment[ca]=Reproduïu vídeos i cançons
+Comment[cs]=Přehrává filmy a hudbu
+Comment[da]=Afspil film og sange
+Comment[de]=Filme und Musik abspielen
+Comment[es]=Reproduzca vídeos y canciones
+Comment[fr]=Lire des vidéos et des musiques
+Comment[ja]=映画や音楽を再生する
+Comment[it]=Riproduci video e canzoni
+Comment[pl]=Odtwarzaj filmy i muzykę
+Comment[ru]=Воспроизведение фильмов и музыки
+Comment[tr]=Filmleri ve şarkıları oynatın
+Comment[zh_CN]=播放电影和歌曲
+Comment[zh_TW]=播放電影和歌曲
+Icon=mpv
+TryExec=mpv
+Exec=mpv --player-operation-mode=pseudo-gui -- %U
+Terminal=false
+Categories=AudioVideo;Audio;Video;Player;TV;
+MimeType=application/ogg;application/x-ogg;application/mxf;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/aiff;audio/x-aiff;audio/m4a;audio/x-m4a;application/x-extension-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/mpeg2;audio/mpeg3;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/musepack;audio/x-musepack;audio/ogg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg2;video/x-mpeg3;video/mp4v-es;video/x-m4v;video/mp4;application/x-extension-mp4;video/divx;video/vnd.divx;video/msvideo;video/x-msvideo;video/ogg;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;audio/x-ms-asf;application/vnd.ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/avi;video/x-flic;video/fli;video/x-flc;video/flv;video/x-flv;video/x-theora;video/x-theora+ogg;video/x-matroska;video/mkv;audio/x-matroska;application/x-matroska;video/webm;audio/webm;audio/vorbis;audio/x-vorbis;audio/x-vorbis+ogg;video/x-ogm;video/x-ogm+ogg;application/x-ogm;application/x-ogm-audio;application/x-ogm-video;application/x-shorten;audio/x-shorten;audio/x-ape;audio/x-wavpack;audio/x-tta;audio/AMR;audio/ac3;audio/eac3;audio/amr-wb;video/mp2t;audio/flac;audio/mp4;application/x-mpegurl;video/vnd.mpegurl;application/vnd.apple.mpegurl;audio/x-pn-au;video/3gp;video/3gpp;video/3gpp2;audio/3gpp;audio/3gpp2;video/dv;audio/dv;audio/opus;audio/vnd.dts;audio/vnd.dts.hd;audio/x-adpcm;application/x-cue;audio/m3u;audio/vnd.wave;video/vnd.avi;
+X-KDE-Protocols=appending,file,ftp,hls,http,https,mms,mpv,rtmp,rtmps,rtmpt,rtmpts,rtp,rtsp,rtsps,sftp,srt,srtp,webdav,webdavs
+StartupWMClass=mpv
+Keywords=mpv;media;player;video;audio;tv;
+Keywords[ar]=mpv;إم بي في;ام بي في;وسائط;مشغل;فيديو;مرئية;صوتي;تلفاز;
diff --git a/applications/desktop/nvim.desktop b/applications/desktop/nvim.desktop
new file mode 100644
index 0000000..86b8bdd
--- /dev/null
+++ b/applications/desktop/nvim.desktop
@@ -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++;
\ No newline at end of file
diff --git a/applications/icons/Activity.png b/applications/icons/Activity.png
deleted file mode 100644
index e0713bf..0000000
Binary files a/applications/icons/Activity.png and /dev/null differ
diff --git a/applications/icons/Docker.png b/applications/icons/Docker.png
deleted file mode 100644
index c025759..0000000
Binary files a/applications/icons/Docker.png and /dev/null differ
diff --git a/applications/icons/Omasway.png b/applications/icons/Omasway.png
deleted file mode 100644
index 1d0a6b5..0000000
Binary files a/applications/icons/Omasway.png and /dev/null differ
diff --git a/applications/icons/Ubuntu.png b/applications/icons/Ubuntu.png
deleted file mode 100644
index 602aa2b..0000000
Binary files a/applications/icons/Ubuntu.png and /dev/null differ
diff --git a/applications/install/chromium.sh b/applications/install/chromium.sh
new file mode 100644
index 0000000..5358113
--- /dev/null
+++ b/applications/install/chromium.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Browse the web with Chromium - open source browser
+sudo apt update -y
+sudo apt install -y chromium
\ No newline at end of file
diff --git a/applications/install/dbeaver.sh b/applications/install/dbeaver.sh
new file mode 100644
index 0000000..e448098
--- /dev/null
+++ b/applications/install/dbeaver.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# A Database management tool https://dbeaver.io/s
+cd /tmp
+wget https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb -O dbeaver.deb
+sudo apt install ./dbeaver.deb -y
+rm dbeaver.deb
+cd -
+
+
diff --git a/applications/install/discord.sh b/applications/install/discord.sh
new file mode 100644
index 0000000..04efc72
--- /dev/null
+++ b/applications/install/discord.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# A Communication platform for voice, video, and text messaging https://discord.com/
+cd /tmp
+wget https://discord.com/api/download?platform=linux -O discord.deb
+sudo apt install ./discord.deb -y
+rm discord.deb
+cd -
\ No newline at end of file
diff --git a/applications/install/docker.sh b/applications/install/docker.sh
new file mode 100644
index 0000000..9359c93
--- /dev/null
+++ b/applications/install/docker.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Install Docker
+# Add Docker's official GPG key:
+sudo apt-get update
+sudo apt-get install ca-certificates curl
+sudo install -m 0755 -d /etc/apt/keyrings
+sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+
+# Add the repository to Apt sources:
+echo \
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
+ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+sudo apt update
+
+sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
+
+# Configure Docker daemon:
+# - limit log size to avoid running out of disk
+# - use host's DNS resolver
+sudo mkdir -p /etc/docker
+sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
+{
+ "log-driver": "json-file",
+ "log-opts": { "max-size": "10m", "max-file": "5" },
+ "dns": ["172.17.0.1"],
+ "bip": "172.17.0.1/16"
+}
+EOF
+
+# Start Docker automatically
+sudo systemctl enable docker
+
+# Give this user privileged Docker access
+sudo usermod -aG docker ${USER}
+
+# Prevent Docker from preventing boot for network-online.target
+sudo mkdir -p /etc/systemd/system/docker.service.d
+sudo tee /etc/systemd/system/docker.service.d/no-block-boot.conf <<'EOF'
+[Unit]
+DefaultDependencies=no
+EOF
+
+sudo systemctl daemon-reload
\ No newline at end of file
diff --git a/applications/install/filezilla.sh b/applications/install/filezilla.sh
new file mode 100644
index 0000000..1c4f55c
--- /dev/null
+++ b/applications/install/filezilla.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# The free FTP solution for both client and server. https://filezilla-project.org
+sudo apt update -y
+sudo apt install filezilla -y
diff --git a/applications/install/firefox.sh b/applications/install/firefox.sh
new file mode 100644
index 0000000..5e9cd43
--- /dev/null
+++ b/applications/install/firefox.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# Install Firefox from Debian repositories or Firefox ESR
+# For Debian, we use the official repositories or install Firefox ESR
+sudo apt update -y
+
+# Try to install firefox first, fallback to firefox-esr if not available
+if sudo apt install firefox -y 2>/dev/null; then
+ echo "Firefox installed successfully"
+else
+ echo "Installing Firefox ESR (Extended Support Release)"
+ sudo apt install firefox-esr -y
+fi
\ No newline at end of file
diff --git a/install/optional/app-flameshot.sh b/applications/install/flameshot.sh
similarity index 88%
rename from install/optional/app-flameshot.sh
rename to applications/install/flameshot.sh
index c64b827..3220135 100644
--- a/install/optional/app-flameshot.sh
+++ b/applications/install/flameshot.sh
@@ -1,2 +1,4 @@
+#!/bin/bash
+
# Flameshot is a nice step-up over the default Gnome screenshot tool
sudo apt install flameshot -y
diff --git a/install/github-cli.sh b/applications/install/github-cli.sh
similarity index 97%
rename from install/github-cli.sh
rename to applications/install/github-cli.sh
index c73d7de..977ecce 100644
--- a/install/github-cli.sh
+++ b/applications/install/github-cli.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg &&
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg &&
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null &&
diff --git a/applications/install/gitlab-cli.sh b/applications/install/gitlab-cli.sh
new file mode 100644
index 0000000..deb2eda
--- /dev/null
+++ b/applications/install/gitlab-cli.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+LATEST_URL=$(curl -s https://gitlab.com/api/v4/projects/gitlab-org%2Fcli/releases | grep -o '"direct_asset_url":"[^"]*linux_amd64\.deb"' | head -1 | cut -d '"' -f 4)
+
+if [ -n "$LATEST_URL" ]; then
+ DEB_FILE=$(basename "$LATEST_URL")
+ curl -L -o "/tmp/$DEB_FILE" "$LATEST_URL"
+
+ if file "/tmp/$DEB_FILE" | grep -q "Debian binary package"; then
+ sudo dpkg -i "/tmp/$DEB_FILE" || sudo apt install -f -y
+ fi
+
+ rm -f "/tmp/$DEB_FILE"
+fi
\ No newline at end of file
diff --git a/install/optional/app-libreoffice.sh b/applications/install/libreoffice.sh
similarity index 84%
rename from install/optional/app-libreoffice.sh
rename to applications/install/libreoffice.sh
index fcb7fcf..a4cfcf5 100644
--- a/install/optional/app-libreoffice.sh
+++ b/applications/install/libreoffice.sh
@@ -1,2 +1,4 @@
+#!/bin/bash
+
# Work with Word, Excel, Powerpoint files
sudo apt install -y libreoffice
\ No newline at end of file
diff --git a/install/optional/app-localsend.sh b/applications/install/localsend.sh
similarity index 96%
rename from install/optional/app-localsend.sh
rename to applications/install/localsend.sh
index 5f3badc..dddfaaa 100644
--- a/install/optional/app-localsend.sh
+++ b/applications/install/localsend.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
cd /tmp
LOCALSEND_VERSION=$(curl -s "https://api.github.com/repos/localsend/localsend/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
wget -O localsend.deb "https://github.com/localsend/localsend/releases/latest/download/LocalSend-${LOCALSEND_VERSION}-linux-x86-64.deb"
diff --git a/install/nvim.sh b/applications/install/neovim.sh
similarity index 95%
rename from install/nvim.sh
rename to applications/install/neovim.sh
index 89850c4..f89e2d5 100644
--- a/install/nvim.sh
+++ b/applications/install/neovim.sh
@@ -1,4 +1,7 @@
+#!/bin/bash
+
if ! command -v nvim &>/dev/null; then
+ # Install Neovim
cd /tmp
wget -O nvim.tar.gz "https://github.com/neovim/neovim/releases/download/stable/nvim-linux-x86_64.tar.gz"
tar -xf nvim.tar.gz
@@ -17,4 +20,4 @@ if ! command -v nvim &>/dev/null; then
cp -R ~/.local/share/omasway/config/nvim/* ~/.config/nvim/
rm -rf ~/.config/nvim/.git
echo "vim.opt.relativenumber = false" >>~/.config/nvim/lua/config/options.lua
-fi
+fi
\ No newline at end of file
diff --git a/applications/install/obs-studio.sh b/applications/install/obs-studio.sh
new file mode 100644
index 0000000..61d8438
--- /dev/null
+++ b/applications/install/obs-studio.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# OBS Studio is a screen recording application that allows you to capture both display and webcam in the same recording
+sudo apt install -y obs-studio
\ No newline at end of file
diff --git a/install/optional/app-pinta.sh b/applications/install/pinta.sh
similarity index 81%
rename from install/optional/app-pinta.sh
rename to applications/install/pinta.sh
index 6b1b15d..735ed07 100644
--- a/install/optional/app-pinta.sh
+++ b/applications/install/pinta.sh
@@ -1 +1,3 @@
+#!/bin/bash
+
flatpak install -y flathub com.github.PintaProject.Pinta
\ No newline at end of file
diff --git a/applications/install/postman.sh b/applications/install/postman.sh
new file mode 100644
index 0000000..480feb8
--- /dev/null
+++ b/applications/install/postman.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Postman is an API platform for building and using APIs. See https://postman.com
+flatpak install -y flathub com.getpostman.Postman
diff --git a/install/optional/app-spotify.sh b/applications/install/spotify.sh
similarity index 59%
rename from install/optional/app-spotify.sh
rename to applications/install/spotify.sh
index 2ba6ceb..9d8dcbf 100644
--- a/install/optional/app-spotify.sh
+++ b/applications/install/spotify.sh
@@ -1,5 +1,12 @@
+#!/bin/bash
+
# Stream music using https://spotify.com
curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/spotify.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/spotify.gpg] http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
sudo apt update -y
-sudo apt install -y spotify-client
\ No newline at end of file
+sudo apt install -y spotify-client
+
+# Create a desktop entry if it doesn't exist
+if [ ! -f /usr/share/applications/spotify.desktop ]; then
+ sudo ln -s /usr/share/spotify/spotify.desktop /usr/share/applications/spotify.desktop
+fi
\ No newline at end of file
diff --git a/applications/install/starship.sh b/applications/install/starship.sh
new file mode 100644
index 0000000..580bea8
--- /dev/null
+++ b/applications/install/starship.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Install Starship
+curl -sS https://starship.rs/install.sh | sh -s -- -y
\ No newline at end of file
diff --git a/applications/install/thunderbird.sh b/applications/install/thunderbird.sh
new file mode 100644
index 0000000..9f50fd0
--- /dev/null
+++ b/applications/install/thunderbird.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# Install Thunderbird from Debian repositories
+# Thunderbird is a free email application that's easy to set up and customize - and it's loaded with great features! https://www.thunderbird.net
+sudo apt update -y
+sudo apt install thunderbird -y
\ No newline at end of file
diff --git a/install/optional/app-visual-studio-code.sh b/applications/install/visual-studio-code.sh
similarity index 97%
rename from install/optional/app-visual-studio-code.sh
rename to applications/install/visual-studio-code.sh
index b3efa23..ffe1df7 100644
--- a/install/optional/app-visual-studio-code.sh
+++ b/applications/install/visual-studio-code.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
cd /tmp
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
diff --git a/install/optional/app-xournalpp.sh b/applications/install/xournalpp.sh
similarity index 69%
rename from install/optional/app-xournalpp.sh
rename to applications/install/xournalpp.sh
index fe7e66f..4adb8bb 100644
--- a/install/optional/app-xournalpp.sh
+++ b/applications/install/xournalpp.sh
@@ -1 +1,3 @@
+#!/bin/bash
+
sudo apt install -y xournalpp
diff --git a/applications/install/zen.sh b/applications/install/zen.sh
new file mode 100644
index 0000000..6e69a80
--- /dev/null
+++ b/applications/install/zen.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# Install latest version of Zen Browser https://zen-browser.app
+cd /tmp
+curl -s https://updates.zen-browser.app/install.sh -o zen-install.sh 2>/dev/null
+chmod +x zen-install.sh 2>/dev/null
+bash zen-install.sh >/dev/null 2>&1
+rm -f zen-install.sh 2>/dev/null
+cd -
\ No newline at end of file
diff --git a/applications/remove/dbeaver.sh b/applications/remove/dbeaver.sh
new file mode 100644
index 0000000..c38627c
--- /dev/null
+++ b/applications/remove/dbeaver.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y dbeaver-ce
\ No newline at end of file
diff --git a/applications/remove/discord.sh b/applications/remove/discord.sh
new file mode 100644
index 0000000..657ed88
--- /dev/null
+++ b/applications/remove/discord.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y discord
diff --git a/uninstall/docker.sh b/applications/remove/docker.sh
similarity index 92%
rename from uninstall/docker.sh
rename to applications/remove/docker.sh
index f021887..738f7ca 100644
--- a/uninstall/docker.sh
+++ b/applications/remove/docker.sh
@@ -1,2 +1,4 @@
+#!/bin/bash
+
sudo apt purge --auto-remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo groupdel docker
diff --git a/applications/remove/filezilla.sh b/applications/remove/filezilla.sh
new file mode 100644
index 0000000..e75d58e
--- /dev/null
+++ b/applications/remove/filezilla.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y filezilla
\ No newline at end of file
diff --git a/applications/remove/firefox.sh b/applications/remove/firefox.sh
new file mode 100644
index 0000000..b33af5e
--- /dev/null
+++ b/applications/remove/firefox.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y firefox
diff --git a/applications/remove/flameshot.sh b/applications/remove/flameshot.sh
new file mode 100644
index 0000000..696dac1
--- /dev/null
+++ b/applications/remove/flameshot.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y flameshot
diff --git a/applications/remove/github-cli.sh b/applications/remove/github-cli.sh
new file mode 100644
index 0000000..161b576
--- /dev/null
+++ b/applications/remove/github-cli.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y gh
diff --git a/applications/remove/gitlab-cli.sh b/applications/remove/gitlab-cli.sh
new file mode 100644
index 0000000..d82ad5e
--- /dev/null
+++ b/applications/remove/gitlab-cli.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y glab
diff --git a/applications/remove/libreoffice.sh b/applications/remove/libreoffice.sh
new file mode 100644
index 0000000..2e578c4
--- /dev/null
+++ b/applications/remove/libreoffice.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+sudo apt-get remove --purge -y "libreoffice*"
+sudo apt-get -y clean
+sudo apt-get -y autoremove
\ No newline at end of file
diff --git a/applications/remove/localsend.sh b/applications/remove/localsend.sh
new file mode 100644
index 0000000..a7c2228
--- /dev/null
+++ b/applications/remove/localsend.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y localsend
diff --git a/uninstall/app-neovim.sh b/applications/remove/neovim.sh
similarity index 93%
rename from uninstall/app-neovim.sh
rename to applications/remove/neovim.sh
index baae9fb..7d1d621 100644
--- a/uninstall/app-neovim.sh
+++ b/applications/remove/neovim.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
sudo apt purge -y neovim neovim-runtime
rm ~/.local/share/applications/Neovim.desktop
rm -rf ~/.config/nvim
diff --git a/applications/remove/obs-studio.sh b/applications/remove/obs-studio.sh
new file mode 100644
index 0000000..952538b
--- /dev/null
+++ b/applications/remove/obs-studio.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y obs-studio
\ No newline at end of file
diff --git a/uninstall/app-pinta.sh b/applications/remove/pinta.sh
similarity index 79%
rename from uninstall/app-pinta.sh
rename to applications/remove/pinta.sh
index fe43770..b0bc4d7 100644
--- a/uninstall/app-pinta.sh
+++ b/applications/remove/pinta.sh
@@ -1 +1,3 @@
+#!/bin/bash
+
flatpak uninstall -y com.github.PintaProject.Pinta
diff --git a/applications/remove/postman.sh b/applications/remove/postman.sh
new file mode 100644
index 0000000..9b0108b
--- /dev/null
+++ b/applications/remove/postman.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+flatpak uninstall -y flathub com.getpostman.Postman
diff --git a/applications/remove/spotify.sh b/applications/remove/spotify.sh
new file mode 100644
index 0000000..7bef296
--- /dev/null
+++ b/applications/remove/spotify.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y spotify-client
diff --git a/applications/remove/starship.sh b/applications/remove/starship.sh
new file mode 100644
index 0000000..14537bd
--- /dev/null
+++ b/applications/remove/starship.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+sudo rm -rf /usr/local/bin/starship
+sudo rm -rf ~/.cache/starship
\ No newline at end of file
diff --git a/applications/remove/thunderbird.sh b/applications/remove/thunderbird.sh
new file mode 100644
index 0000000..557f207
--- /dev/null
+++ b/applications/remove/thunderbird.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y thunderbird
\ No newline at end of file
diff --git a/applications/remove/visual-studio-code.sh b/applications/remove/visual-studio-code.sh
new file mode 100644
index 0000000..cba9d73
--- /dev/null
+++ b/applications/remove/visual-studio-code.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+sudo apt remove --purge -y code
+rm -rf ~/.config/Code/User
diff --git a/applications/remove/xournalpp.sh b/applications/remove/xournalpp.sh
new file mode 100644
index 0000000..4a3a956
--- /dev/null
+++ b/applications/remove/xournalpp.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y xournalpp
diff --git a/applications/remove/zen.sh b/applications/remove/zen.sh
new file mode 100644
index 0000000..e523b2f
--- /dev/null
+++ b/applications/remove/zen.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sudo apt remove --purge -y zen
\ No newline at end of file
diff --git a/bin/omasway b/bin/omasway
deleted file mode 100755
index bf8705e..0000000
--- a/bin/omasway
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source $OMASWAY_PATH/bin/omasway-sub/header.sh
-source $OMASWAY_PATH/bin/omasway-sub/helper.sh
-source $OMASWAY_PATH/bin/omasway-sub/menu.sh
diff --git a/bin/omasway-app-install b/bin/omasway-app-install
new file mode 100755
index 0000000..71ff814
--- /dev/null
+++ b/bin/omasway-app-install
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+APP_DIR="$HOME/.local/share/omasway/applications/install"
+
+if [ "$#" -eq 0 ]; then
+ # Find all installable apps
+ APPS=()
+ while IFS= read -r path; do
+ filename=$(basename "$path" .sh)
+ APPS+=("$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')")
+ done < <(find "$APP_DIR" -mindepth 1 -maxdepth 1 -type f -name "*.sh" | sort)
+
+ if ((${#APPS[@]})); then
+ IFS=$'\n' SORTED_APPS=($(sort <<<"${APPS[*]}"))
+ unset IFS
+ APP_NAMES_STRING=$(gum choose --no-limit --header "Select app to install..." --selected-prefix="✓ " "${SORTED_APPS[@]}")
+ # Convert newline-separated string to array
+ APP_NAMES=()
+ while IFS= read -r line; do
+ [[ -n "$line" ]] && APP_NAMES+=("$line")
+ done <<< "$APP_NAMES_STRING"
+ else
+ echo "No apps to install."
+ exit 1
+ fi
+else
+ # Use array to preserve spaces in app names
+ APP_NAMES=("$@")
+fi
+
+if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
+ echo "You must provide app names."
+ exit 1
+fi
+
+for APP_NAME in "${APP_NAMES[@]}"; do
+ APP_NAME=$(echo "$APP_NAME" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+
+ # If APP_NAME exists in $APP_DIR, source it to install the app
+ if [[ -f "$APP_DIR/$APP_NAME.sh" ]]; then
+ source "$APP_DIR/$APP_NAME.sh"
+ # If the app is not recognized, print an error message
+ else
+ echo "Error: App $APP_NAME is not recognized or not available for installation." >&2
+ exit 1
+ fi
+done
\ No newline at end of file
diff --git a/bin/omasway-app-remove b/bin/omasway-app-remove
new file mode 100755
index 0000000..14fa1dc
--- /dev/null
+++ b/bin/omasway-app-remove
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+APP_DIR="$HOME/.local/share/omasway/applications/remove"
+
+if [ "$#" -eq 0 ]; then
+ # Find all removable apps
+ APPS=()
+ while IFS= read -r path; do
+ filename=$(basename "$path" .sh)
+ APPS+=("$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')")
+ done < <(find "$APP_DIR" -mindepth 1 -maxdepth 1 -type f -name "*.sh" | sort)
+
+ if ((${#APPS[@]})); then
+ IFS=$'\n' SORTED_APPS=($(sort <<<"${APPS[*]}"))
+ unset IFS
+ APP_NAMES_STRING=$(gum choose --no-limit --header "Select app to remove..." --selected-prefix="✗ " "${SORTED_APPS[@]}")
+ # Convert newline-separated string to array
+ APP_NAMES=()
+ while IFS= read -r line; do
+ [[ -n "$line" ]] && APP_NAMES+=("$line")
+ done <<< "$APP_NAMES_STRING"
+ else
+ echo "No apps to install."
+ exit 1
+ fi
+else
+ # Use array to preserve spaces in app names
+ APP_NAMES=("$@")
+fi
+
+if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
+ echo "You must provide app names."
+ exit 1
+fi
+
+for APP_NAME in "${APP_NAMES[@]}"; do
+ APP_NAME=$(echo "$APP_NAME" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+
+ # If APP_NAME exists in $APP_DIR, source it to uninstall the app
+ if [[ -f "$APP_DIR/$APP_NAME.sh" ]]; then
+ source "$APP_DIR/$APP_NAME.sh"
+ # If the app is not recognized, print an error message
+ else
+ echo "Error: App $APP_NAME is not recognized or not available for uninstallation." >&2
+ exit 1
+ fi
+done
\ No newline at end of file
diff --git a/bin/omasway-apps b/bin/omasway-apps
new file mode 100755
index 0000000..16f5777
--- /dev/null
+++ b/bin/omasway-apps
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+omasway-wofi --show drun --sort-order=alphabetical --width 600 --height 350 --prompt "Launch…"
diff --git a/bin/omasway-battery-monitor b/bin/omasway-battery-monitor
deleted file mode 100755
index db744a1..0000000
--- a/bin/omasway-battery-monitor
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-# @Source: https://github.com/basecamp/omarchy/blob/master/bin/omarchy-battery-monitor
-# Designed to be run by systemd timer every 30 seconds and alerts if battery is low
-
-BATTERY_THRESHOLD=10
-NOTIFICATION_FLAG="/run/user/$UID/omasway_battery_notified"
-
-get_battery_percentage() {
- upower -i $(upower -e | grep 'BAT') | grep -E "percentage" | grep -o '[0-9]\+%' | sed 's/%//'
-}
-
-get_battery_state() {
- upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}'
-}
-
-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
-else
- rm -f "$NOTIFICATION_FLAG"
-fi
diff --git a/bin/omasway-dev-add-migration b/bin/omasway-dev-add-migration
new file mode 100755
index 0000000..e1168bf
--- /dev/null
+++ b/bin/omasway-dev-add-migration
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+cd ~/.local/share/omasway
+migration_file="$HOME/.local/share/omasway/migrations/$(git log -1 --format=%cd --date=unix).sh"
+touch $migration_file
+nvim $migration_file
diff --git a/bin/omasway-font-current b/bin/omasway-font-current
new file mode 100755
index 0000000..c3dc4c9
--- /dev/null
+++ b/bin/omasway-font-current
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+grep -oP 'family\s*=\s*"\K[^"]+' ~/.config/alacritty/alacritty.toml | head -n1
diff --git a/bin/omasway-font-list b/bin/omasway-font-list
new file mode 100755
index 0000000..7fd6d49
--- /dev/null
+++ b/bin/omasway-font-list
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|omasway' | sort -u
diff --git a/bin/omasway-font-set b/bin/omasway-font-set
new file mode 100755
index 0000000..a79bcc7
--- /dev/null
+++ b/bin/omasway-font-set
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+font_name="$1"
+
+if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
+ if fc-list | grep -iq "$font_name"; then
+ sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
+ else
+ echo "Font '$font_name' not found."
+ exit 1
+ fi
+else
+ echo "Usage: omasway-font-set "
+fi
diff --git a/bin/omasway-font-size-set b/bin/omasway-font-size-set
new file mode 100755
index 0000000..228b4fb
--- /dev/null
+++ b/bin/omasway-font-size-set
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+if [ "$#" -ne 1 ]; then
+ echo -e "\e[32mLet's customize your terminal font size.\n\e[0m"
+ FONT_SIZE=$(gum choose {7..14} --height 10 --header "Choose your terminal font size")
+else
+ FONT_SIZE="$1"
+fi
+
+if [[ $FONT_SIZE =~ ^[0-9]+$ ]]; then
+ sed -i "s/^size = .*$/size = $FONT_SIZE/g" ~/.config/alacritty/alacritty.toml
+else
+ echo "Font size must be a number."
+fi
\ No newline at end of file
diff --git a/bin/omasway-install-dev-env b/bin/omasway-install-dev-env
new file mode 100755
index 0000000..ecdc427
--- /dev/null
+++ b/bin/omasway-install-dev-env
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+if [[ -z "$1" ]]; then
+ echo "Usage: omasway-install-dev-env " >&2
+ exit 1
+fi
+
+install_php() {
+ echo -e "Installing PHP...\n"
+ sudo apt -y install php php-{curl,apcu,intl,mbstring,opcache,pgsql,mysql,sqlite3,redis,xml,zip} --no-install-recommends
+ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
+ php composer-setup.php --quiet && sudo mv composer.phar /usr/local/bin/composer
+ rm composer-setup.php
+}
+
+install_node() {
+ echo -e "Installing Node.js...\n"
+ mise use --global node@lts
+}
+
+case "$1" in
+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
+ ;;
+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
+ ;;
+rust)
+ echo -e "Installing Rust...\n"
+ bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
+ ;;
+esac
diff --git a/bin/omasway-install-docker-dbs b/bin/omasway-install-docker-dbs
new file mode 100755
index 0000000..20a779f
--- /dev/null
+++ b/bin/omasway-install-docker-dbs
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB")
+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 ;;
+ 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 ;;
+ esac
+ done
+else
+ echo "No databases selected for installation."
+fi
diff --git a/bin/omasway-launch-terminal-with-presentation b/bin/omasway-launch-terminal-with-presentation
new file mode 100755
index 0000000..45f00a7
--- /dev/null
+++ b/bin/omasway-launch-terminal-with-presentation
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cmd="$*"
+alacritty --class Omasway -e bash -c -l "omasway-show-logo; $cmd; omasway-show-done"
diff --git a/bin/omasway-launch-webapp b/bin/omasway-launch-webapp
new file mode 100755
index 0000000..d3375e9
--- /dev/null
+++ b/bin/omasway-launch-webapp
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# omasway-launch-webapp: Launch a web application as a standalone window.
+# Usage: omasway-launch-webapp
+if [[ -z "$1" || -z "$2" ]]; then
+ echo "Usage: omasway-launch-webapp " >&2
+ exit 1
+fi
+
+APP_URL="$1"
+APP_NAME="$2"
+# This prevents data loss and force to open in a separate profile
+OMASWAY_DATA_DIR="$HOME/.config/omasway/webapp"
+WEBAPP_DATA_DIR="$OMASWAY_DATA_DIR/$(echo "$APP_NAME" | tr ' ' '-' | tr '[:upper:]' '[:lower:]')"
+
+browser=$(xdg-settings get default-web-browser)
+
+case $browser in
+google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi*) ;;
+*) browser="chromium.desktop" ;;
+esac
+
+if [ ! -d "$WEBAPP_DATA_DIR" ]; then
+ mkdir -p "$WEBAPP_DATA_DIR"
+fi
+
+exec $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$browser 2>/dev/null | head -1) --user-data-dir="$WEBAPP_DATA_DIR" --window-size=800,600 --app="$APP_URL" --name="$APP_NAME" --class="$APP_NAME"
diff --git a/bin/omasway-menu b/bin/omasway-menu
new file mode 100755
index 0000000..9dd8cd7
--- /dev/null
+++ b/bin/omasway-menu
@@ -0,0 +1,247 @@
+#!/bin/bash
+
+export PATH="$HOME/.local/share/omasway/bin:$PATH"
+
+menu() {
+ local prompt="$1"
+ local options="$2"
+ local extra="$3"
+ local preselect="$4"
+
+ read -r -a args <<<"$extra"
+
+ if [[ -n "$preselect" ]]; then
+ options=$(echo -e "$options" | sed "s|^$preselect$|$preselect|")
+ fi
+
+ # Show Wofi menu (with markup support)
+ selection=$(echo -e "$options" | omasway-wofi \
+ --show dmenu \
+ --allow-markup \
+ --prompt "$prompt..." \
+ "${args[@]}" \
+ "$wofi_options" 2>>/tmp/omasway.log)
+
+ echo -e "$selection"
+}
+
+terminal() {
+ alacritty --class Omasway -e "$@"
+}
+
+present_terminal() {
+ omasway-launch-terminal-with-presentation "$@"
+}
+
+edit_in_nvim() {
+ notify-send "Editing config file" "$1"
+ alacritty -e nvim "$1"
+}
+
+app_install() {
+ present_terminal "echo 'Installing $1...'; omasway-app-install $1"
+}
+
+show_learn_menu() {
+ case $(menu "Learn" " Keybindings\n Omasway\n Debian\n Neovim\n Zellij\n Bash" "--width 250 --height 300") in
+ *Keybindings*) omasway-launch-webapp "https://learn.omacom.io/1/read/29/hotkeys" "Omasway Keybindings" ;;
+ *Omasway*) omasway-launch-webapp "https://learn.omacom.io/1/read#leaf_40" "Omasway" ;;
+ *Debian*) omasway-launch-webapp "https://www.debian.org/doc/" "Debian" ;;
+ *Bash*) omasway-launch-webapp "https://devhints.io/bash" "Bash" ;;
+ *Neovim*) omasway-launch-webapp "https://www.lazyvim.org/keymaps" "Neovim" ;;
+ *Zellij*) omasway-launch-webapp "https://zellij.dev/documentation/keybindings.html" "Zellij" ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_style_menu() {
+ case $(menu "Style" " Theme\n Font\n Background" "--width 250 --height 250") in
+ *Theme*) show_theme_menu ;;
+ *Font*) show_font_menu ;;
+ *Background*) omasway-theme-bg-next ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_theme_menu() {
+ theme=$(menu "Theme" "$(omasway-theme-list)" "--width 250 --height 400 -O alphabetical" "$(omasway-theme-current)")
+ if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
+ show_main_menu
+ else
+ omasway-theme-set "$theme"
+ fi
+}
+
+show_font_menu() {
+ case $(menu "Font" " Family\n Size" "--width 200 --height 200") in
+ *Family*) show_font_family_menu ;;
+ *Size*) present_terminal omasway-font-size-set ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_font_family_menu() {
+ font=$(menu "Font" "$(omasway-font-list)" "--width 350" "$(omasway-font-current)")
+ if [[ "$font" == "CNCLD" || -z "$font" ]]; then
+ show_main_menu
+ else
+ omasway-font-set "$font"
+ fi
+}
+
+show_setup_menu() {
+ case $(menu "Setup" " Folders\n Starship\n Zellij\n Wofi" "--width 250 --height 300") in
+ *Folders*) show_setup_folders_menu ;;
+ *Starship*) edit_in_nvim ~/.config/starship.toml ;;
+ *Zellij*) edit_in_nvim ~/.config/zellij/config.kdl ;;
+ *Wofi*) edit_in_nvim ~/.config/wofi/config ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_setup_folders_menu() {
+ case $(menu "Folders" " Add\n Remove" "--width 200 --height 200") in
+ *Add*) present_terminal omasway-app-folder-add ;;
+ *Remove*) present_terminal omasway-app-folder-remove ;;
+ *) show_setup_menu ;;
+ esac
+}
+
+show_install_menu() {
+ case $(menu "Install" " Web App\n TUI\n Tools\n Style\n Service\n Development\n Editor" "--width 250 --height 350") in
+ *Web*) present_terminal omasway-webapp-install ;;
+ *TUI*) present_terminal omasway-tui-install ;;
+ *Tools*) show_install_tools_menu ;;
+ *Style*) show_install_style_menu ;;
+ *Service*) show_install_service_menu ;;
+ *Development*) show_install_development_menu ;;
+ *Editor*) show_install_editor_menu ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_install_tools_menu() {
+ case $(menu "Install" " Flameshot\n Mainline Kernels\n Pinta\n Starship\n Xournalpp" "--width 250 --height 300") in
+ *Flameshot*) app_install "flameshot" ;;
+ *Pinta*) app_install "pinta" ;;
+ *Mainline*) app_install "mainline-kernels" ;;
+ *Xournalpp*) app_install "xournalpp" ;;
+ *Starship*) app_install "starship" ;;
+ *) show_install_menu ;;
+ esac
+}
+
+show_install_service_menu() {
+ case $(menu "Install" " Chromium\n Firefox\n Discord\n Filezilla\n LibreOffice\n LocalSend\n OBS Studio\n Postman\n Spotify\n Thunderbird\n Zen Browser" "--width 250 --height 500") in
+ *Chromium*) app_install "chromium" ;;
+ *Firefox*) app_install "firefox" ;;
+ *Discord*) app_install "discord" ;;
+ *Filezilla*) app_install "filezilla" ;;
+ *LibreOffice*) app_install "libreoffice" ;;
+ *LocalSend*) app_install "localsend" ;;
+ *OBS*) app_install "obs-studio" ;;
+ *Postman*) app_install "postman" ;;
+ *Spotify*) app_install "spotify" ;;
+ *Thunderbird*) app_install "thunderbird" ;;
+ *Zen*) app_install "zen" ;;
+ *) show_install_menu ;;
+ esac
+}
+
+show_install_editor_menu() {
+ case $(menu "Install" " DBeaver\n NeoVim\n Visual Studio Code" "--width 250 --height 200") in
+ *Visual*) app_install "visual-studio-code" ;;
+ *NeoVim*) app_install "neovim" ;;
+ *DBeaver*) app_install "dbeaver" ;;
+ *) show_install_menu ;;
+ esac
+}
+
+show_install_development_menu() {
+ case $(menu "Install" " Docker\n Databases\n Github\n Gitlab\\n JavaScript\n Go\n PHP\n Python\n Rust" "--width 250 --height 400") in
+ *Docker*) app_install "docker" ;;
+ *Databases*) present_terminal "omasway-install-docker-dbs" ;;
+ *Github*) app_install "github-cli" ;;
+ *Gitlab*) app_install "gitlab-cli" ;;
+ *JavaScript*) show_install_javascript_menu ;;
+ *Go*) present_terminal "omasway-install-dev-env go" ;;
+ *PHP*) present_terminal "omasway-install-dev-env php" ;;
+ *Python*) present_terminal "omasway-install-dev-env python" ;;
+ *Rust*) present_terminal "omasway-install-dev-env rust" ;;
+ *) show_install_menu ;;
+ esac
+}
+
+show_install_javascript_menu() {
+ case $(menu "Install" " Node.js\n Bun\n Deno") in
+ *Node*) present_terminal "omasway-install-dev-env node" ;;
+ *Bun*) present_terminal "omasway-install-dev-env bun" ;;
+ *Deno*) present_terminal "omasway-install-dev-env deno" ;;
+ *) show_install_development_menu ;;
+ esac
+}
+
+# TODO: Add font installation
+show_install_style_menu() {
+ case $(menu "Install" " Theme\n Background" "--width 350") in
+ *Theme*) present_terminal omasway-theme-install ;;
+ *Background*) nautilus ~/.config/omasway/current/theme/backgrounds ;;
+ *) show_install_menu ;;
+ esac
+}
+
+show_remove_menu() {
+ case $(menu "Remove" " Web App\n TUI\n App\n Theme" "--width 250 --height 300") in
+ *Web*) present_terminal omasway-webapp-remove ;;
+ *TUI*) present_terminal omasway-tui-remove ;;
+ *App*) present_terminal omasway-app-remove ;;
+ *Theme*) present_terminal omasway-theme-remove ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_update_menu() {
+ case $(menu "Update" " Omasway\n Firmware\n Config\n Themes" "--width 250 --height 300") in
+ *Omasway*) present_terminal omasway-update ;;
+ *Firmware*) present_terminal omasway-update-firmware ;;
+ *Config*) show_update_config_menu ;;
+ *Themes*) present_terminal omasway-theme-update ;;
+ *) show_main_menu ;;
+ esac
+}
+
+show_update_config_menu() {
+ case $(menu "Use default config" " Starship\n Zellij\n Gnome\n GDM\n Plymouth\n Wofi" "--width 250") in
+ *Starship*) present_terminal omasway-refresh-config starship.toml ;;
+ *Zellij*) present_terminal omasway-refresh-config zellij/config.kdl ;;
+ *Gnome*) present_terminal omasway-refresh-gnome ;;
+ *GDM*) present_terminal omasway-refresh-gdm ;;
+ *Plymouth*) present_terminal omasway-refresh-plymouth ;;
+ *Wofi*) present_terminal omasway-refresh-wofi ;;
+ *) show_update_menu ;;
+ esac
+}
+
+show_main_menu() {
+ go_to_menu "$(menu "Go" " Apps\n Learn\n Style\n Setup\n Install\n Remove\n Update\n About" "--width 250 --height 400")"
+}
+
+go_to_menu() {
+ case "${1,,}" in
+ *apps*) omasway-apps ;;
+ *learn*) show_learn_menu ;;
+ *style*) show_style_menu ;;
+ *theme*) show_theme_menu ;;
+ *setup*) show_setup_menu ;;
+ *install*) show_install_menu ;;
+ *remove*) show_remove_menu ;;
+ *update*) show_update_menu ;;
+ *about*) alacritty --class Omasway -o font.size=9 -e bash -c -l 'fastfetch; read -n 1 -s' ;;
+ esac
+}
+
+if [[ -n "$1" ]]; then
+ go_to_menu "$1"
+else
+ show_main_menu
+fi
diff --git a/bin/omasway-migrate b/bin/omasway-migrate
new file mode 100755
index 0000000..0554e5c
--- /dev/null
+++ b/bin/omasway-migrate
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -e
+
+# Where we store an empty file for each migration that has already been performed.
+STATE_DIR="$HOME/.local/state/omasway/migrations"
+mkdir -p "$STATE_DIR"
+
+# Run any pending migrations
+if [ -n "$(ls -A ~/.local/share/omasway/migrations/*.sh 2>/dev/null)" ]; then
+ for file in ~/.local/share/omasway/migrations/*.sh; do
+ filename=$(basename "$file")
+
+ if [[ ! -f "$STATE_DIR/$filename" ]]; then
+ echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
+ source $file
+ touch "$STATE_DIR/$filename"
+ fi
+ done
+fi
\ No newline at end of file
diff --git a/bin/omasway-refresh-applications b/bin/omasway-refresh-applications
new file mode 100755
index 0000000..e068a81
--- /dev/null
+++ b/bin/omasway-refresh-applications
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Copy and sync icon files
+mkdir -p ~/.local/share/icons/hicolor/48x48/apps/
+cp ~/.local/share/omasway/applications/desktop/icons/*.png ~/.local/share/icons/hicolor/48x48/apps/
+gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
+
+# Copy .desktop declarations
+mkdir -p ~/.local/share/applications
+cp ~/.local/share/omasway/applications/desktop/*.desktop ~/.local/share/applications/
+if [ -d ~/.local/share/omasway/applications/desktop/hidden ]; then
+ cp ~/.local/share/omasway/applications/desktop/hidden/*.desktop ~/.local/share/applications/
+fi
+
+update-desktop-database ~/.local/share/applications
diff --git a/bin/omasway-refresh-config b/bin/omasway-refresh-config
new file mode 100755
index 0000000..adf10fb
--- /dev/null
+++ b/bin/omasway-refresh-config
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# This script deploys ~/.local/share/omasway/config/X/Y/Z -> ~/.config/X/Y/Z
+config_file=$1
+
+if [[ -z "$config_file" ]]; then
+ cat </dev/null
+
+ # Replace config with new default
+ cp -f "$default_config_file" "$user_config_file" 2>/dev/null
+
+ # Compare and delete/inform accordingly
+ if cmp -s "$user_config_file" "$backup_config_file"; then
+ rm "$backup_config_file"
+ else
+ echo -e "\e[31mReplaced $user_config_file with new Omasway default.\nSaved backup as ${backup_config_file}.\n\n\e[32mChanges:\e[0m"
+ diff "$user_config_file" "$backup_config_file" || true
+ fi
+else
+ # Config file did not exist already
+ cp -f "$default_config_file" "$user_config_file" 2>/dev/null
+fi
diff --git a/bin/omasway-refresh-fastfetch b/bin/omasway-refresh-fastfetch
new file mode 100755
index 0000000..620e6f9
--- /dev/null
+++ b/bin/omasway-refresh-fastfetch
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+omasway-refresh-config fastfetch/config.jsonc
diff --git a/bin/omasway-refresh-gnome b/bin/omasway-refresh-gnome
new file mode 100755
index 0000000..e9e520b
--- /dev/null
+++ b/bin/omasway-refresh-gnome
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+gum confirm "Do you want to refresh GNOME settings? You will lose your current settings." && {
+ # Backup current dconf (with timestamp) to avoid clobbering (Ex: omasway.dconf.bak.1753817951)
+ dconf dump / > "$HOME/gnome.dconf.bak.$(date +%s)"
+
+ # Apply dconf settings
+ if [ -f ~/.local/share/omasway/default/dconf/omasway.dconf ]; then
+ # Replace placeholder with actual background URL
+ temp_dconf_file=$(mktemp /tmp/omasway-gnome.XXXXXX.ini)
+ cp ~/.local/share/omasway/default/dconf/omasway.dconf "$temp_dconf_file"
+ sed -i "s|{{OMASWAY_BACKGROUND_URL}}|file://$HOME/.config/omasway/current/background|g" "$temp_dconf_file"
+ # Load dconf settings
+ dconf reset /org/gnome/
+ dconf load / < "$temp_dconf_file" 2>/dev/null || echo "Error: Failed to load dconf settings from $temp_dconf_file"
+ rm -f "$temp_dconf_file"
+ else
+ echo "Error: dconf settings file not found at ~/.local/share/omasway/default/dconf/omasway.dconf"
+ exit 1
+ fi
+}
\ No newline at end of file
diff --git a/bin/omasway-refresh-plymouth b/bin/omasway-refresh-plymouth
new file mode 100755
index 0000000..ee0e0b1
--- /dev/null
+++ b/bin/omasway-refresh-plymouth
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+if [[ "$1" == "-y" ]]; then
+ sudo cp ~/.local/share/omasway/default/plymouth/* /usr/share/plymouth/themes/omasway/
+ # Install the theme as an alternative
+ sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/omasway/omasway.plymouth 100
+ # Set it as the default
+ sudo update-alternatives --set default.plymouth /usr/share/plymouth/themes/omasway/omasway.plymouth
+fi
diff --git a/bin/omasway-refresh-wofi b/bin/omasway-refresh-wofi
new file mode 100755
index 0000000..738b1ae
--- /dev/null
+++ b/bin/omasway-refresh-wofi
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+omasway-refresh-config wofi/config
+omasway-refresh-config wofi/style.css
+omasway-refresh-config wofi/search.css
diff --git a/bin/omasway-restart-xcompose b/bin/omasway-restart-xcompose
new file mode 100755
index 0000000..717c400
--- /dev/null
+++ b/bin/omasway-restart-xcompose
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+ibus restart
diff --git a/bin/omasway-show-done b/bin/omasway-show-done
new file mode 100755
index 0000000..de5fe2a
--- /dev/null
+++ b/bin/omasway-show-done
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+echo
+gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -n 1 -s'
diff --git a/bin/omasway-show-logo b/bin/omasway-show-logo
new file mode 100755
index 0000000..5e8982a
--- /dev/null
+++ b/bin/omasway-show-logo
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+clear
+echo -e "\033[32m"
+cat <~/.local/share/omasway/logo.txt
+echo -e "\033[0m"
+echo
diff --git a/bin/omasway-state b/bin/omasway-state
new file mode 100755
index 0000000..2d8d1ec
--- /dev/null
+++ b/bin/omasway-state
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+STATE_DIR="$HOME/.local/state/omasway"
+mkdir -p "$STATE_DIR"
+
+COMMAND="$1"
+STATE_NAME="$2"
+
+if [[ -z "$COMMAND" ]]; then
+ echo "Usage: omasway-state "
+ exit 1
+fi
+
+if [[ -z "$STATE_NAME" ]]; then
+ echo "Usage: omasway-state $COMMAND "
+ exit 1
+fi
+
+case "$COMMAND" in
+set) touch "$STATE_DIR/$STATE_NAME" ;;
+clear) find "$STATE_DIR" -maxdepth 1 -type f -name "$STATE_NAME" -delete ;;
+esac
diff --git a/bin/omasway-sub/appearance.sh b/bin/omasway-sub/appearance.sh
deleted file mode 100644
index 24a6745..0000000
--- a/bin/omasway-sub/appearance.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-CHOICES=(
- "Theme Change the system theme"
- "<< Back "
-)
-
-CHOICE=$(gum choose "${CHOICES[@]}" --height 5 --header "Change system appearance")
-
-if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
- # Don't update anything
- echo ""
-else
- APPEARANCE=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-
- case "$APPEARANCE" in
- "theme") APPEARANCE_FILE="$OMASWAY_PATH/bin/omasway-sub/appearance/theme.sh" ;;
- esac
-
- source $APPEARANCE_FILE && gum spin --spinner globe --title "Change completed!" -- sleep 3
-fi
-
-clear
-source $OMASWAY_PATH/bin/omasway
diff --git a/bin/omasway-sub/appearance/theme.sh b/bin/omasway-sub/appearance/theme.sh
deleted file mode 100644
index 29149c3..0000000
--- a/bin/omasway-sub/appearance/theme.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-THEME_NAMES=("Tokyo Night" "Catppuccin" "Nord" "Everforest" "Gruvbox" "Kanagawa")
-THEME=$(gum choose "${THEME_NAMES[@]}" "<< Back" --header "Choose your theme" --height 10 | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-
-if [ -n "$THEME" ] && [ "$THEME" != "<<-back" ]; then
- cp $OMAKUB_PATH/themes/$THEME/alacritty.toml ~/.config/alacritty/theme.toml
-
- if [ -f "$OMAKUB_PATH/themes/$THEME/btop.theme" ]; then
- cp $OMAKUB_PATH/themes/$THEME/btop.theme ~/.config/btop/themes/$THEME.theme
- sed -i "s/theme = \".*\"/theme = \"$THEME\"/g" ~/.config/btop/btop.conf
- else
- sed -i "s/theme = \".*\"/theme = \"Default\"/g" ~/.config/btop/btop.conf
- fi
-
- if [ -d "$HOME/.config/nvim" ]; then
- cp $OMAKUB_PATH/themes/$THEME/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
- fi
-
- gum spin --spinner globe --title "Theme changed!" -- sleep 3
-fi
-
-clear
-source $OMAKUB_PATH/bin/omakub-sub/header.sh
-source $OMAKUB_PATH/bin/omakub-sub/appearance.sh
diff --git a/bin/omasway-sub/header.sh b/bin/omasway-sub/header.sh
deleted file mode 100644
index 0e524c1..0000000
--- a/bin/omasway-sub/header.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-source $OMASWAY_PATH/ascii.sh
-echo "" # Add spacing
-echo " $(cat $OMASWAY_PATH/version) $(cd $OMASWAY_PATH && git branch --show-current | grep -q "dev" && echo -e "\033[0;33m(dev)\033[0m" || echo "")"
-echo "" # Add spacing
-
diff --git a/bin/omasway-sub/helper.sh b/bin/omasway-sub/helper.sh
deleted file mode 100644
index 1224c15..0000000
--- a/bin/omasway-sub/helper.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-# This script checks if there is a new version of Omasway available
-
-# Check if current git branch is main
-current_branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
-if [ "$current_branch" != "main" ]; then
- # Return silently if not on main branch
- return 0 2>/dev/null || true
-fi
-
-# Check if the script is running in a git repository
-if ! git rev-parse --is-inside-work-tree &>/dev/null; then
- # Return silently if not in a git repository
- return 0 2>/dev/null || true
-fi
-
-# Try to fetch the latest release tag from GitHub API (with a timeout of 3 seconds)
-if timeout 3 curl -s --head "https://api.github.com/repos/Kasui92/omasway/releases/latest" &>/dev/null; then
- # Check if the last release tag is available
- last_release_tag=$(curl -s "https://api.github.com/repos/Kasui92/omasway/releases/latest" | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4)
-
- # Check if the last release tag is not empty and if the version file exists
- if [ -n "$last_release_tag" ] && [ -f "$OMASWAY_PATH/version" ]; then
- last_release_number=${last_release_tag#v}
- last_release_number=${last_release_number//./}
-
- local_version_tag=$(cat "$OMASWAY_PATH/version")
- local_version_number=${local_version_tag#v}
- local_version_number=${local_version_number//./}
-
- # Compare the last release number with the local version number
- if [ "$last_release_number" -gt "$local_version_number" ]; then
- echo -e "\033[1;35mA new version of Omasway is available! \033[1m\033[32m($last_release_tag)\033[0m"
- echo "" # Add spacing
- fi
- fi
-fi
-
diff --git a/bin/omasway-sub/install.sh b/bin/omasway-sub/install.sh
deleted file mode 100644
index aaa9503..0000000
--- a/bin/omasway-sub/install.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-CHOICES=(
- "Mainline Kernels Install newer Linux kernels than Ubuntu defaults"
- "FlameShot Screenshot tool with annotation"
- "Libreoffice Free and open source office suite"
- "LocalSend Send files to nearby devices"
- "Pinta Simple and easy to use drawing program"
- "Spotify Stream music from the world's most popular service"
- "Visual Studio Code Source code editor with support for development operations"
- "Xournalpp Note taking and PDF annotation application"
- "> All Re-run any of the default installers"
- "<< Back "
-)
-
-CHOICE=$(gum choose "${CHOICES[@]}" --height 23 --header "Install application")
-
-if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
- # Don't install anything
- echo ""
-elif [[ "$CHOICE" == "> All"* ]]; then
- INSTALLER_FILE=$(gum file $OMASWAY_PATH/install)
-
- [[ -n "$INSTALLER_FILE" ]] &&
- gum confirm "Run installer?" &&
- source $INSTALLER_FILE &&
- gum spin --spinner globe --title "Install completed!" -- sleep 3
-else
- INSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-
- case "$INSTALLER" in
- *) INSTALLER_FILE="$OMASWAY_PATH/install/optional/app-$INSTALLER.sh" ;;
- esac
-
- source $INSTALLER_FILE && gum spin --spinner globe --title "Install completed!" -- sleep 3
-fi
-
-clear
-source $OMASWAY_PATH/bin/omasway
diff --git a/bin/omasway-sub/manual.sh b/bin/omasway-sub/manual.sh
deleted file mode 100644
index 06cb1c3..0000000
--- a/bin/omasway-sub/manual.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-if ! xdg-open "https://github.com/Kasui92/omasway/wiki" &>/dev/null; then
- echo -e "\nUnable to open the manual in your browser."
-fi
-source $OMASWAY_PATH/bin/omasway-sub/menu.sh
diff --git a/bin/omasway-sub/menu.sh b/bin/omasway-sub/menu.sh
deleted file mode 100644
index c91dae8..0000000
--- a/bin/omasway-sub/menu.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-CHOICES=(
- "Appearance "
- "Update "
- "Install "
- "Uninstall "
- "Manual "
- "Quit "
-)
-
-CHOICE=$(gum choose "${CHOICES[@]}" --height 10 --header "")
-
-if [[ "$CHOICE" == "Quit"* ]] || [[ -z "$CHOICE" ]]; then
- clear
- exit 0
-else
- MENU=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
- source $OMASWAY_PATH/bin/omasway-sub/$MENU.sh
-fi
-
diff --git a/bin/omasway-sub/uninstall.sh b/bin/omasway-sub/uninstall.sh
deleted file mode 100644
index f2883f7..0000000
--- a/bin/omasway-sub/uninstall.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-CHOICES=(
- "Docker "
- "Mainline Kernels "
- "Firefox "
- "NeoVim "
- "Libreoffice "
- "LocalSend "
- "Pinta "
- "Spotify "
- "Visual Studio Code"
- "Xournalpp "
- "> All Remove all applications"
- "<< Back "
-)
-
-CHOICE=$(gum choose "${CHOICES[@]}" --height 29 --header "Uninstall application")
-
-if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
- # Don't install anything
- echo ""
-elif [[ "$CHOICE" == "> All"* ]]; then
- UNINSTALLER_FILE=$(gum file $OMASWAY_PATH/uninstall)
-
- [[ -n "$UNINSTALLER_FILE" ]] &&
- gum confirm "Run uninstaller?" &&
- source $UNINSTALLER_FILE &&
- gum spin --spinner globe --title "Uninstall completed!" -- sleep 3
-else
- UNINSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-
- case "$UNINSTALLER" in
- "docker") UNINSTALLER_FILE="$OMASWAY_PATH/uninstall/docker.sh" ;;
- *) UNINSTALLER_FILE="$OMASWAY_PATH/uninstall/app-$UNINSTALLER.sh" ;;
- esac
-
- [[ -n "$UNINSTALLER_FILE" ]] &&
- gum confirm "Run uninstaller?" &&
- source $UNINSTALLER_FILE &&
- gum spin --spinner globe --title "Uninstall completed!" -- sleep 3
-fi
-
-clear
-source $OMASWAY_PATH/bin/omasway
diff --git a/bin/omasway-sub/update.sh b/bin/omasway-sub/update.sh
deleted file mode 100644
index 2696b5b..0000000
--- a/bin/omasway-sub/update.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-CHOICES=(
- "Omasway Update Omasway itself and run any migrations"
- "System Update all system packages and remove unused packages"
- "Firmware Update firmware packages"
- "<< Back "
-)
-
-CHOICE=$(gum choose "${CHOICES[@]}" --height 10 --header "Update manually-managed applications")
-
-if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
- # Don't update anything
- echo ""
-else
- INSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-
- case "$INSTALLER" in
- "omasway") INSTALLER_FILE="$OMASWAY_PATH/bin/omasway-sub/update/migrate.sh" ;;
- "system") INSTALLER_FILE="$OMASWAY_PATH/bin/omasway-sub/update/update-system.sh" ;;
- "firmware") INSTALLER_FILE="$OMASWAY_PATH/bin/omasway-sub/update/update-firmware.sh" ;;
- esac
-
- source $INSTALLER_FILE && gum spin --spinner globe --title "Update completed!" -- sleep 3
-fi
-
-clear
-source $OMASWAY_PATH/bin/omasway
diff --git a/bin/omasway-sub/update/migrate.sh b/bin/omasway-sub/update/migrate.sh
deleted file mode 100644
index b59885d..0000000
--- a/bin/omasway-sub/update/migrate.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-cd $OMASWAY_PATH
-last_updated_at=$(git log -1 --format=%cd --date=unix)
-git pull
-
-if [ -d "$OMASWAY_PATH/migrations" ] && [ "$(ls -A $OMASWAY_PATH/migrations)" ]; then
- for file in $OMASWAY_PATH/migrations/*.sh; do
- filename=$(basename "$file")
- migrate_at="${filename%.sh}"
-
- if [ $migrate_at -gt $last_updated_at ]; then
- echo "Running migration for $migrate_at"
- source $file
- fi
- done
-fi
-
-cd -
-
diff --git a/bin/omasway-sub/update/update-system.sh b/bin/omasway-sub/update/update-system.sh
deleted file mode 100644
index 17f4411..0000000
--- a/bin/omasway-sub/update/update-system.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-sudo apt -y update
-sudo apt -y upgrade
-sudo apt -y dist-upgrade
-sudo apt -y autoremove
-sudo apt -y clean
-
diff --git a/bin/omasway-theme-bg-next b/bin/omasway-theme-bg-next
new file mode 100755
index 0000000..53f5769
--- /dev/null
+++ b/bin/omasway-theme-bg-next
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# Cycles through the background images available
+
+BACKGROUNDS_DIR="$HOME/.config/omasway/current/theme/backgrounds/"
+CURRENT_BACKGROUND_LINK="$HOME/.config/omasway/current/background"
+
+mapfile -d '' -t BACKGROUNDS < <(find "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
+TOTAL=${#BACKGROUNDS[@]}
+
+if [[ $TOTAL -eq 0 ]]; then
+ notify-send "No background was found for theme" -t 2000
+ gsettings set org.gnome.desktop.background picture-uri 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+ gsettings set org.gnome.desktop.background picture-uri-dark 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+else
+ # Get current background from symlink
+ if [[ -L "$CURRENT_BACKGROUND_LINK" ]]; then
+ CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
+ else
+ # Default to first background if no symlink exists
+ CURRENT_BACKGROUND=""
+ fi
+
+ # Find current background index
+ INDEX=-1
+ for i in "${!BACKGROUNDS[@]}"; do
+ if [[ "${BACKGROUNDS[$i]}" == "$CURRENT_BACKGROUND" ]]; then
+ INDEX=$i
+ break
+ fi
+ done
+
+ # Get next background (wrap around)
+ if [[ $INDEX -eq -1 ]]; then
+ # Use the first background when no match was found
+ NEW_BACKGROUND="${BACKGROUNDS[0]}"
+ else
+ NEXT_INDEX=$(((INDEX + 1) % TOTAL))
+ NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}"
+ fi
+
+ # Set new background symlink
+ ln -nsf "$NEW_BACKGROUND" "$CURRENT_BACKGROUND_LINK"
+
+ # Update GNOME background settings
+ gsettings set org.gnome.desktop.background picture-uri $CURRENT_BACKGROUND_LINK
+ gsettings set org.gnome.desktop.background picture-uri-dark $CURRENT_BACKGROUND_LINK
+ gsettings set org.gnome.desktop.background picture-options 'zoom'
+fi
diff --git a/bin/omasway-theme-current b/bin/omasway-theme-current
new file mode 100755
index 0000000..46fb84a
--- /dev/null
+++ b/bin/omasway-theme-current
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+basename "$(realpath "$HOME/.config/omasway/current/theme")" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
\ No newline at end of file
diff --git a/bin/omasway-theme-install b/bin/omasway-theme-install
new file mode 100755
index 0000000..23fcacf
--- /dev/null
+++ b/bin/omasway-theme-install
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# omasway-theme-install: Install a new theme from a git repo for Omasway
+# Usage: omasway-theme-install
+
+if [ -z "$1" ]; then
+ REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
+else
+ REPO_URL="$1"
+fi
+
+if [ -z "$REPO_URL" ]; then
+ exit 1
+fi
+
+THEMES_DIR="$HOME/.config/omasway/themes"
+THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omasway-//; s/-theme$//')
+THEME_PATH="$THEMES_DIR/$THEME_NAME"
+
+# Remove existing theme if present
+if [ -d "$THEME_PATH" ]; then
+ rm -rf "$THEME_PATH"
+fi
+
+# Clone the repo directly to ~/.config/omasway/themes
+if ! git clone "$REPO_URL" "$THEME_PATH"; then
+ echo "Error: Failed to clone theme repo."
+ exit 1
+fi
+
+# Apply the new theme with omasway-theme-set
+omasway-theme-set $THEME_NAME
diff --git a/bin/omasway-theme-list b/bin/omasway-theme-list
new file mode 100755
index 0000000..1d0737b
--- /dev/null
+++ b/bin/omasway-theme-list
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+find ~/.config/omasway/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do
+ echo "$(basename "$path" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')"
+done
diff --git a/bin/omasway-theme-next b/bin/omasway-theme-next
new file mode 100755
index 0000000..ec6c75d
--- /dev/null
+++ b/bin/omasway-theme-next
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+THEMES_DIR="$HOME/.config/omasway/themes/"
+CURRENT_THEME_LINK="$HOME/.config/omasway/current/theme"
+
+THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 | sort))
+TOTAL=${#THEMES[@]}
+
+# Get current theme from symlink
+if [[ -L "$CURRENT_THEME_LINK" ]]; then
+ CURRENT_THEME=$(realpath "$CURRENT_THEME_LINK")
+else
+ # Default to first theme if no symlink exists
+ CURRENT_THEME=$(realpath "${THEMES[0]}")
+fi
+
+# Find current theme index
+INDEX=0
+for i in "${!THEMES[@]}"; do
+ THEMES[$i]=$(realpath "${THEMES[$i]}")
+
+ if [[ "${THEMES[$i]}" == "$CURRENT_THEME" ]]; then
+ INDEX=$i
+ break
+ fi
+done
+
+# Get next theme (wrap around)
+NEXT_INDEX=$(((INDEX + 1) % TOTAL))
+NEW_THEME=${THEMES[$NEXT_INDEX]}
+NEW_THEME_NAME=$(basename "$NEW_THEME")
+
+omasway-theme-set $NEW_THEME_NAME
+notify-send "Theme changed to $NEW_THEME_NAME" -t 2000
diff --git a/bin/omasway-theme-remove b/bin/omasway-theme-remove
new file mode 100755
index 0000000..7443474
--- /dev/null
+++ b/bin/omasway-theme-remove
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# omasway-theme-remove: Remove a theme from Omasway by name
+# Usage: omasway-theme-remove
+
+if [ -z "$1" ]; then
+ mapfile -t extra_themes < <(find ~/.config/omasway/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
+
+ if [[ ${#extra_themes[@]} -gt 0 ]]; then
+ THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}")
+ else
+ echo "No extra themes installed."
+ exit 1
+ fi
+else
+ THEME_NAME="$1"
+fi
+
+THEMES_DIR="$HOME/.config/omasway/themes"
+CURRENT_DIR="$HOME/.config/omasway/current"
+THEME_PATH="$THEMES_DIR/$THEME_NAME"
+
+# Ensure a theme was set
+if [ -z "$THEME_NAME" ]; then
+ exit 1
+fi
+
+# Check if theme exists before attempting removal
+if [ ! -d "$THEME_PATH" ]; then
+ echo "Error: Theme '$THEME_NAME' not found."
+ exit 1
+fi
+
+# Move to the next theme if the current theme is the one being removed
+if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then
+ omasway-theme-next
+fi
+
+# Now remove the theme directory for THEME_NAME
+rm -rf "$THEME_PATH"
diff --git a/bin/omasway-theme-set b/bin/omasway-theme-set
new file mode 100755
index 0000000..88cd45d
--- /dev/null
+++ b/bin/omasway-theme-set
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+# omasway-theme-set: Set a theme, specified by its name.
+# Usage: omasway-theme-set
+
+if [[ -z "$1" && "$1" != "CNCLD" ]]; then
+ echo "Usage: omasway-theme-set " >&2
+ exit 1
+fi
+
+THEMES_DIR="$HOME/.config/omasway/themes/"
+CURRENT_THEME_DIR="$HOME/.config/omasway/current/theme"
+
+THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
+THEME_PATH="$THEMES_DIR/$THEME_NAME"
+
+# Check if the theme entered exists
+if [[ ! -d "$THEME_PATH" ]]; then
+ echo "Theme '$THEME_NAME' does not exist in $THEMES_DIR" >&2
+ exit 2
+fi
+
+# Update theme symlinks
+ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
+
+# Change gnome modes
+if [[ -f ~/.config/omasway/current/theme/gnome.theme ]]; then
+ OMASWAY_THEME_COLOR=$(<~/.config/omasway/current/theme/gnome.theme)
+else
+ OMASWAY_THEME_COLOR="blue"
+fi
+
+if [[ -f ~/.config/omasway/current/theme/light.mode ]]; then
+ gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
+ gsettings set org.gnome.desktop.interface gtk-theme "Yaru-$OMASWAY_THEME_COLOR"
+ gsettings set org.gnome.shell.extensions.user-theme name "Yaru-$OMASWAY_THEME_COLOR"
+else
+ gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
+ gsettings set org.gnome.desktop.interface gtk-theme "Yaru-$OMASWAY_THEME_COLOR-dark"
+ gsettings set org.gnome.shell.extensions.user-theme name "Yaru-$OMASWAY_THEME_COLOR-dark"
+fi
+gsettings set org.gnome.desktop.interface accent-color "$OMASWAY_THEME_COLOR" 2>/dev/null || true
+
+# Change gnome cursor theme color
+if [[ -f ~/.config/omasway/current/theme/cursor.theme ]]; then
+ gsettings set org.gnome.desktop.interface cursor-theme "$(<~/.config/omasway/current/theme/cursor.theme)"
+else
+ gsettings set org.gnome.desktop.interface cursor-theme "Yaru"
+fi
+
+# Change gnome icon theme color
+if [[ -f ~/.config/omasway/current/theme/icons.theme ]]; then
+ gsettings set org.gnome.desktop.interface icon-theme "$(<~/.config/omasway/current/theme/icons.theme)"
+else
+ gsettings set org.gnome.desktop.interface icon-theme "Yaru-$OMASWAY_THEME_COLOR"
+fi
+
+# Change gnome extensions theme
+if [[ -f ~/.config/omasway/current/theme/tophat.theme ]]; then
+ gsettings set org.gnome.shell.extensions.tophat meter-fg-color "$(<~/.config/omasway/current/theme/tophat.theme)"
+else
+ if [[ -f ~/.config/omasway/current/theme/light.mode ]]; then
+ gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#e92020"
+ else
+ gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#33ccff"
+ fi
+fi
+
+# Change vscode colors
+if command -v code &>/dev/null; then
+ if [[ -f ~/.config/omasway/current/theme/vscode.theme ]]; then
+ declare -A vscode
+ source ~/.config/omasway/current/theme/vscode.theme
+
+ # Install extension if specified
+ if [[ -n "${vscode[extension]}" ]]; then
+ code --install-extension "${vscode[extension]}" --force
+ fi
+
+ # Set theme if specified
+ if [[ -n "${vscode[theme]}" ]]; then
+ sed -i "s/\"workbench.colorTheme\": \".*\"/\"workbench.colorTheme\": \"${vscode[theme]}\"/g" ~/.config/Code/User/settings.json
+ fi
+ # Fallback to default themes
+ else
+ if [[ -f ~/.config/omasway/current/theme/light.mode ]]; then
+ sed -i "s/\"workbench.colorTheme\": \".*\"/\"workbench.colorTheme\": \"Default Light+\"/g" ~/.config/Code/User/settings.json
+ else
+ sed -i "s/\"workbench.colorTheme\": \".*\"/\"workbench.colorTheme\": \"Default Dark+\"/g" ~/.config/Code/User/settings.json
+ fi
+ fi
+fi
+
+# Change Chromium colors
+if command -v chromium &>/dev/null; then
+ if [[ -f ~/.config/omasway/current/theme/light.mode ]]; then
+ chromium --no-startup-window --set-color-scheme="light"
+ else
+ chromium --no-startup-window --set-color-scheme="dark"
+ fi
+
+ if [[ -f ~/.config/omasway/current/theme/chromium.theme ]]; then
+ chromium --no-startup-window --set-theme-color="$(<~/.config/omasway/current/theme/chromium.theme)"
+ else
+ # Use a default, neutral grey if theme doesn't have a color
+ chromium --no-startup-window --set-theme-color="28,32,39"
+ fi
+fi
+
+# Touch alacritty config to pickup the changed theme
+touch "$HOME/.config/alacritty/alacritty.toml"
+
+# Restart components to apply new theme
+pkill -SIGUSR2 btop
+
+# Set new background
+omasway-theme-bg-next
\ No newline at end of file
diff --git a/bin/omasway-theme-update b/bin/omasway-theme-update
new file mode 100755
index 0000000..ebb123e
--- /dev/null
+++ b/bin/omasway-theme-update
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+for dir in ~/.config/omasway/themes/*/; do
+ [ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
+done
diff --git a/bin/omasway-tui-install b/bin/omasway-tui-install
new file mode 100755
index 0000000..a15d364
--- /dev/null
+++ b/bin/omasway-tui-install
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+if [ "$#" -ne 4 ]; then
+ echo -e "\e[32mLet's create a TUI shortcut you can start with the app launcher.\n\e[0m"
+ APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")
+ APP_EXEC=$(gum input --prompt "Launch Command> " --placeholder "lazydocker or bash -c 'dust; read -n 1 -s'")
+ WINDOW_STYLE=$(gum choose --header "Window style" float tile)
+ ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
+else
+ APP_NAME="$1"
+ APP_EXEC="$2"
+ WINDOW_STYLE="$3"
+ ICON_URL="$4"
+fi
+
+if [[ -z "$APP_NAME" || -z "$APP_EXEC" || -z "$ICON_URL" ]]; then
+ echo "You must set app name, app command, and icon URL!"
+ exit 1
+fi
+
+ICON_DIR="$HOME/.local/share/applications/icons"
+DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop"
+ICON_PATH="$ICON_DIR/$APP_NAME.png"
+
+mkdir -p "$ICON_DIR"
+
+if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then
+ echo "Error: Failed to download icon."
+ return 1
+fi
+
+if [[ $WINDOW_STYLE == "float" ]]; then
+ APP_CLASS="TUI.float"
+else
+ APP_CLASS="TUI.tile"
+fi
+
+cat >"$DESKTOP_FILE" < /dev/null; then
+ echo -e "\e[32m\nUpdate flatpak packages\e[0m"
+ flatpak update -y
+fi
\ No newline at end of file
diff --git a/bin/omasway-version b/bin/omasway-version
new file mode 100755
index 0000000..90fc919
--- /dev/null
+++ b/bin/omasway-version
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+git -C "$OMASWAY_PATH" describe --tags $(git -C "$OMASWAY_PATH" rev-list --tags --max-count=1)
diff --git a/bin/omasway-version-branch b/bin/omasway-version-branch
new file mode 100755
index 0000000..e6f3977
--- /dev/null
+++ b/bin/omasway-version-branch
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo $(git -C "$OMASWAY_PATH" rev-parse --abbrev-ref HEAD)
diff --git a/bin/omasway-webapp-install b/bin/omasway-webapp-install
new file mode 100755
index 0000000..50accb7
--- /dev/null
+++ b/bin/omasway-webapp-install
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+if [ "$#" -ne 3 ]; then
+ echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m"
+ APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app")
+ APP_URL=$(gum input --prompt "URL> " --placeholder "https://example.com")
+ ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
+else
+ APP_NAME="$1"
+ APP_URL="$2"
+ ICON_URL="$3"
+fi
+
+if [[ -z "$APP_NAME" || -z "$APP_URL" || -z "$ICON_URL" ]]; then
+ echo "You must set app name, app URL, and icon URL!"
+ exit 1
+fi
+
+ICON_DIR="$HOME/.local/share/applications/icons"
+DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop"
+ICON_PATH="$ICON_DIR/$APP_NAME.png"
+
+mkdir -p "$ICON_DIR"
+
+if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then
+ echo "Error: Failed to download icon."
+ return 1
+fi
+
+cat >"$DESKTOP_FILE" < /dev/null; then
+ pkill wofi
+fi
+
+exec wofi $@
\ No newline at end of file
diff --git a/boot.sh b/boot.sh
index 9957440..fa4fe7e 100755
--- a/boot.sh
+++ b/boot.sh
@@ -1,40 +1,33 @@
+#!/bin/bash
+
set -o pipefail
ascii_art='
██████╗ ███╗ ███╗ █████╗ ███████╗██╗ ██╗ █████╗ ██╗ ██╗
██╔═══██╗████╗ ████║██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝
-██║ ██║██╔████╔██║███████║███████╗██║ █╗ ██║███████║ ╚████╔╝
-██║ ██║██║╚██╔╝██║██╔══██║╚════██║██║███╗██║██╔══██║ ╚██╔╝
-╚██████╔╝██║ ╚═╝ ██║██║ ██║███████║╚███╔███╔╝██║ ██║ ██║
- ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝
+██║ ██║██╔████╔██║███████║███████╗██║ █╗ ██║███████║ ╚████╔╝
+██║ ██║██║╚██╔╝██║██╔══██║╚════██║██║███╗██║██╔══██║ ╚██╔╝
+╚██████╔╝██║ ╚═╝ ██║██║ ██║███████║╚███╔███╔╝██║ ██║ ██║
+ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝
'
-
-# ANSI escape
-color='\033[38;2;27;74;73m'
-reset='\033[0m'
-
-# Apply colors
-echo
-IFS=$'\n' read -rd '' -a lines <<<"$ascii_art"
-for line in "${lines[@]}"; do
- echo -e "${color}${line}"
-done
-
-# Reset colors
-echo -e "$reset"
+clear
+echo -e "\n$ascii_art\n"
sudo apt-get update >/dev/null
sudo apt-get install -y git >/dev/null
-echo -e "\nCloning Omasway..."
+# Use custom repo if specified, otherwise use default
+OMASWAY_REPO="${OMASWAY_REPO:-Kasui92/omasway}"
+
+echo -e "\e[32m\nCloning Omasway...\e[0m"
rm -rf ~/.local/share/omasway
-git clone https://github.com/Kasui92/omasway.git ~/.local/share/omasway >/dev/null
+git clone https://github.com/$OMASWAY_REPO.git ~/.local/share/omasway >/dev/null
-if [[ $OMASWAY_REF ]]; then
- echo -e "\nUsing branch: $OMASWAY_REF"
- cd ~/.local/share/omasway
- git fetch origin "${OMASWAY_REF}" && git checkout "${OMASWAY_REF}"
- cd -
+if [[ -n "$OMASWAY_REF" ]]; then
+ echo -e "\e[32mUsing branch: $OMASWAY_REF\e[0m"
+ cd ~/.local/share/omasway
+ git fetch origin "${OMASWAY_REF}" && git checkout "${OMASWAY_REF}"
+ cd -
fi
echo -e "\nInstallation starting..."
diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml
index f074596..460e4ef 100644
--- a/config/alacritty/alacritty.toml
+++ b/config/alacritty/alacritty.toml
@@ -18,4 +18,4 @@ opacity = 0.98
[keyboard]
bindings = [
{ key = "F11", action = "ToggleFullscreen" }
-]
+]
\ No newline at end of file
diff --git a/config/brave-flags.conf b/config/brave-flags.conf
new file mode 100644
index 0000000..d6d120e
--- /dev/null
+++ b/config/brave-flags.conf
@@ -0,0 +1,3 @@
+--ozone-platform=wayland
+--ozone-platform-hint=wayland
+--enable-features=TouchpadOverscrollHistoryNavigation
diff --git a/config/btop/btop.conf b/config/btop/btop.conf
index cc9176f..7d2da4e 100644
--- a/config/btop/btop.conf
+++ b/config/btop/btop.conf
@@ -242,4 +242,4 @@ custom_gpu_name3 = ""
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
-custom_gpu_name5 = ""
+custom_gpu_name5 = ""
\ No newline at end of file
diff --git a/config/chromium-flags.conf b/config/chromium-flags.conf
new file mode 100644
index 0000000..d6d120e
--- /dev/null
+++ b/config/chromium-flags.conf
@@ -0,0 +1,3 @@
+--ozone-platform=wayland
+--ozone-platform-hint=wayland
+--enable-features=TouchpadOverscrollHistoryNavigation
diff --git a/config/chromium/Default/Preferences b/config/chromium/Default/Preferences
new file mode 100644
index 0000000..946204c
--- /dev/null
+++ b/config/chromium/Default/Preferences
@@ -0,0 +1,15 @@
+{
+ "extensions": {
+ "theme": {
+ "id": "",
+ "use_system": false,
+ "use_custom": false
+ }
+ },
+ "browser": {
+ "theme": {
+ "color_scheme": 2,
+ "user_color": 2
+ }
+ }
+}
\ No newline at end of file
diff --git a/config/environment.d/fcitx.conf b/config/environment.d/fcitx.conf
new file mode 100644
index 0000000..ecedbcc
--- /dev/null
+++ b/config/environment.d/fcitx.conf
@@ -0,0 +1,4 @@
+INPUT_METHOD=fcitx
+QT_IM_MODULE=fcitx
+XMODIFIERS=@im=fcitx
+SDL_IM_MODULE=fcitx
diff --git a/config/fastfetch/config.jsonc b/config/fastfetch/config.jsonc
index 687e919..c86a5e1 100644
--- a/config/fastfetch/config.jsonc
+++ b/config/fastfetch/config.jsonc
@@ -1,143 +1,140 @@
{
- "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
- "logo": {
- "padding": {
- "top": 5,
- "right": 6
- }
- },
- "modules": [
- "break",
- {
- "type": "custom",
- "format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
- },
- {
- "type": "host",
- "key": " PC",
- "keyColor": "green"
- },
- {
- "type": "cpu",
- "key": "│ ├",
- "showPeCoreCount": true,
- "keyColor": "green"
- },
- {
- "type": "gpu",
- "key": "│ ├",
- "detectionMethod": "pci",
- "keyColor": "green"
- },
- {
- "type": "display",
- "key": "│ ├",
- "keyColor": "green"
- },
- {
- "type": "disk",
- "key": "│ ├",
- "keyColor": "green"
- },
- {
- "type": "memory",
- "key": "│ ├",
- "keyColor": "green"
- },
- {
- "type": "swap",
- "key": "└ └ ",
- "keyColor": "green"
- },
- {
- "type": "custom",
- "format": "\u001b[90m└────────────────────────────────────────────────────┘"
- },
- "break",
- {
- "type": "custom",
- "format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
- },
- {
- "type": "os",
- "key": " OS",
- "keyColor": "yellow"
- },
- {
- "type": "kernel",
- "key": "│ ├",
- "keyColor": "yellow"
- },
- {
- "type": "packages",
- "key": "│ ├",
- "keyColor": "yellow"
- },
- {
- "type": "shell",
- "key": "└ └",
- "keyColor": "yellow"
- },
- "break",
- {
- "type": "de",
- "key": " DE",
- "keyColor": "blue"
- },
- {
- "type": "wm",
- "key": "│ ├",
- "keyColor": "blue"
- },
- {
- "type": "wmtheme",
- "key": "│ ├",
- "keyColor": "blue"
- },
- {
- "type": "icons",
- "key": "│ ├",
- "keyColor": "blue"
- },
- {
- "type": "cursor",
- "key": "│ ├",
- "keyColor": "blue"
- },
- {
- "type": "terminalfont",
- "key": "│ ├",
- "keyColor": "blue"
- },
- {
- "type": "terminal",
- "key": "└ └",
- "keyColor": "blue"
- },
- {
- "type": "custom",
- "format": "\u001b[90m└────────────────────────────────────────────────────┘"
- },
- "break",
- {
- "type": "custom",
- "format": "\u001b[90m┌────────────────────Uptime / Age────────────────────┐"
- },
- {
- "type": "command",
- "key": " OS Age ",
- "keyColor": "magenta",
- "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
- },
- {
- "type": "uptime",
- "key": " Uptime ",
- "keyColor": "magenta"
- },
- {
- "type": "custom",
- "format": "\u001b[90m└────────────────────────────────────────────────────┘"
- },
- "break"
- ]
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "padding": {
+ "top": 5,
+ "right": 6
+ }
+ },
+ "modules": [
+ "break",
+ {
+ "type": "custom",
+ "format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
+ },
+ {
+ "type": "host",
+ "key": " PC",
+ "keyColor": "green"
+ },
+ {
+ "type": "cpu",
+ "key": "│ ├",
+ "showPeCoreCount": true,
+ "keyColor": "green"
+ },
+ {
+ "type": "gpu",
+ "key": "│ ├",
+ "detectionMethod": "pci",
+ "keyColor": "green"
+ },
+ {
+ "type": "display",
+ "key": "│ ├",
+ "keyColor": "green"
+ },
+ {
+ "type": "disk",
+ "key": "│ ├",
+ "keyColor": "green"
+ },
+ {
+ "type": "memory",
+ "key": "│ ├",
+ "keyColor": "green"
+ },
+ {
+ "type": "swap",
+ "key": "└ └ ",
+ "keyColor": "green"
+ },
+ {
+ "type": "custom",
+ "format": "\u001b[90m└────────────────────────────────────────────────────┘"
+ },
+ "break",
+ {
+ "type": "custom",
+ "format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
+ },
+ {
+ "type": "command",
+ "key": " OS",
+ "keyColor": "blue",
+ "text": "version=$(omasway-version); echo \"Omasway $version\""
+ },
+ {
+ "type": "command",
+ "key": "│ ├",
+ "keyColor": "blue",
+ "text": "branch=$(omasway-version-branch); echo \"$branch\""
+ },
+ {
+ "type": "kernel",
+ "key": "│ ├",
+ "keyColor": "blue"
+ },
+ {
+ "type": "de",
+ "key": "│ ├ ",
+ "keyColor": "blue"
+ },
+ {
+ "type": "wm",
+ "key": "│ ├",
+ "keyColor": "blue"
+ },
+ {
+ "type": "terminal",
+ "key": "│ ├",
+ "keyColor": "blue"
+ },
+ {
+ "type": "packages",
+ "key": "│ ├",
+ "keyColor": "blue"
+ },
+ {
+ "type": "wmtheme",
+ "key": "│ ├",
+ "keyColor": "blue"
+ },
+ {
+ "type": "command",
+ "key": "│ ├",
+ "keyColor": "blue",
+ "text": "theme=$(omasway-theme-current); echo \"$theme \\e[38m●\\e[37m●\\e[36m●\\e[35m●\\e[34m●\\e[33m●\\e[32m●\\e[31m●\""
+ },
+ {
+ "type": "terminalfont",
+ "key": "└ └",
+ "keyColor": "blue"
+ },
+ {
+ "type": "custom",
+ "format": "\u001b[90m└────────────────────────────────────────────────────┘"
+ },
+ "break",
+ {
+ "type": "custom",
+ "format": "\u001b[90m┌────────────────────Uptime / Age────────────────────┐"
+ },
+ {
+ "type": "command",
+ "key": " OS Age",
+ "keyColor": "magenta",
+ "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
+ },
+ {
+ "type": "uptime",
+ "key": " Uptime",
+ "keyColor": "magenta"
+ },
+ {
+ "type": "custom",
+ "format": "\u001b[90m└────────────────────────────────────────────────────┘"
+ },
+ "break"
+ ]
}
diff --git a/config/fcitx5/conf/xcb.conf b/config/fcitx5/conf/xcb.conf
new file mode 100644
index 0000000..90f5316
--- /dev/null
+++ b/config/fcitx5/conf/xcb.conf
@@ -0,0 +1 @@
+Allow Overriding System XKB Settings=False
diff --git a/config/starship.toml b/config/starship.toml
new file mode 100644
index 0000000..d5c6f08
--- /dev/null
+++ b/config/starship.toml
@@ -0,0 +1,32 @@
+add_newline = true
+command_timeout = 200
+format = "[$directory$git_branch$git_status]($style)$character"
+
+[character]
+error_symbol = "[✗](bold cyan)"
+success_symbol = "[❯](bold cyan)"
+
+[directory]
+truncation_length = 2
+truncation_symbol = "…/"
+repo_root_style = "bold cyan"
+repo_root_format = "[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) "
+
+[git_branch]
+format = "[$branch]($style) "
+style = "italic cyan"
+
+[git_status]
+format = '[$all_status]($style)'
+style = "cyan"
+ahead = "⇡${count} "
+diverged = "⇕⇡${ahead_count}⇣${behind_count} "
+behind = "⇣${count} "
+conflicted = " "
+up_to_date = " "
+untracked = "? "
+modified = " "
+stashed = ""
+staged = ""
+renamed = ""
+deleted = ""
\ No newline at end of file
diff --git a/config/sway/config b/config/sway/config
index fa2ff01..7f25996 100644
--- a/config/sway/config
+++ b/config/sway/config
@@ -1,15 +1,32 @@
-# Use defaults Omasway defaults
+# Globals variables
+include /etc/sway/config-vars.d/*
+
+# Omasway variables
include ~/.local/share/omasway/default/sway/variables
+
+# User variables
+include $HOME/.config/sway/variables.d/*.conf
+
+# Autostart applications
include ~/.local/share/omasway/default/sway/autostart
-include ~/.local/share/omasway/default/sway/input
+# Globals defaults
+include /etc/sway/config.d/*.conf
+# Omasway defaults
+include ~/.local/share/omasway/default/sway/input
include ~/.local/share/omasway/default/sway/bindings/tiling
include ~/.local/share/omasway/default/sway/bindings/utilities
include ~/.local/share/omasway/default/sway/bindings/media
-
include ~/.local/share/omasway/default/sway/looknfeel
+
+# Users defaults
+include $HOME/.config/sway/config.d/*.conf
+
+# Omasway theme
include ~/.config/omasway/current/theme/sway.conf
-# Include the default sway config
-include /etc/sway/config.d/*
+# Keyboard Layout
+include ~/.config/sway/keyboard
+
+
diff --git a/config/swayosd/config.toml b/config/swayosd/config.toml
new file mode 100644
index 0000000..598c1f2
--- /dev/null
+++ b/config/swayosd/config.toml
@@ -0,0 +1,4 @@
+[server]
+show_percentage = true
+max_volume = 100
+style = "./style.css"
diff --git a/config/swayosd/style.css b/config/swayosd/style.css
new file mode 100644
index 0000000..7c887a1
--- /dev/null
+++ b/config/swayosd/style.css
@@ -0,0 +1,28 @@
+@import "../omasway/current/theme/swayosd.css";
+
+window {
+ border-radius: 0;
+ opacity: 0.97;
+ border: 2px solid @border-color;
+
+ background-color: @background-color;
+}
+
+label {
+ font-family: "CaskaydiaMono Nerd Font";
+ font-size: 11pt;
+
+ color: @label;
+}
+
+image {
+ color: @image;
+}
+
+progressbar {
+ border-radius: 0;
+}
+
+progress {
+ background-color: @progress;
+}
diff --git a/config/uwsm/env b/config/uwsm/env
new file mode 100644
index 0000000..80e464a
--- /dev/null
+++ b/config/uwsm/env
@@ -0,0 +1,7 @@
+export OMASWAY_PATH=$HOME/.local/share/omaway
+export PATH=$OMASWAY_PATH/bin/:$PATH
+export TERMINAL=alacritty
+
+if command -v mise &> /dev/null; then
+ eval "$(mise activate bash)"
+fi
diff --git a/config/waybar/config b/config/waybar/config.jsonc
similarity index 51%
rename from config/waybar/config
rename to config/waybar/config.jsonc
index 5adcb1c..0ec9af4 100644
--- a/config/waybar/config
+++ b/config/waybar/config.jsonc
@@ -4,59 +4,66 @@
"position": "top",
"spacing": 0,
"height": 26,
- "modules-left": [
- "sway/workspaces"
- ],
- "modules-center": [
- "clock"
- ],
+ "modules-left": ["custom/omarchy", "hyprland/workspaces"],
+ "modules-center": ["clock", "custom/update"],
"modules-right": [
+ "group/tray-expander",
"bluetooth",
"network",
"pulseaudio",
"cpu",
"battery"
],
- "sway/workspaces": {
+ "hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
+ "default": "",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
- "default": "",
- "focused": ""
+ "7": "7",
+ "8": "8",
+ "9": "9",
+ "active": ""
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
- "5": [],
- "6": []
+ "5": []
}
},
+ "custom/omarchy": {
+ "format": "\ue900",
+ "on-click": "omarchy-menu",
+ "tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
+ },
+ "custom/update": {
+ "format": "",
+ "exec": "omarchy-update-available",
+ "on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
+ "tooltip-format": "Omarchy update available",
+ "interval": 3600
+ },
+
"cpu": {
"interval": 5,
"format": "",
"on-click": "alacritty -e btop"
},
"clock": {
- "format": "{:%A %H:%M}",
- "format-alt": "{:%d %B W%V %Y}",
- "tooltip": false
+ "format": "{:L%A %H:%M}",
+ "format-alt": "{:L%d %B W%V %Y}",
+ "tooltip": false,
+ "on-click-right": "omarchy-cmd-tzupdate"
},
"network": {
- "format-icons": [
- "",
- "",
- "",
- "",
- ""
- ],
+ "format-icons": ["", "", "", "", ""],
"format": "{icon}",
"format-wifi": "{icon}",
"format-ethernet": "",
@@ -65,8 +72,8 @@
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
- "nospacing": 1,
- "on-click": "GTK_THEME=Adwaita-dark nm-connection-editor"
+ "spacing": 1,
+ "on-click": "alacritty --class=Impala -e impala"
},
"battery": {
"format": "{capacity}% {icon}",
@@ -74,35 +81,14 @@
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
- "charging": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ],
- "default": [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ]
+ "charging": ["", "", "", "", "", "", "", "", "", ""],
+ "default": ["", "", "", "", "", "", "", "", "", ""]
},
"format-full": "",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
+ "on-click": "omarchy-menu power",
"states": {
"warning": 20,
"critical": 10
@@ -113,17 +99,33 @@
"format-disabled": "",
"format-connected": "",
"tooltip-format": "Devices connected: {num_connections}",
- "on-click": "GTK_THEME=Adwaita-dark blueberry"
+ "on-click": "blueberry"
},
"pulseaudio": {
- "format": "",
- "format-muted": "",
- "scroll-step": 5,
- "on-click": "GTK_THEME=Adwaita-dark pavucontrol",
- "tooltip-format": "Playing at {volume}%",
+ "format": "{icon}",
+ "on-click": "alacritty --class=Wiremix -e wiremix",
"on-click-right": "pamixer -t",
- "ignored-sinks": [
- "Easy Effects Sink"
- ]
+ "tooltip-format": "Playing at {volume}%",
+ "scroll-step": 5,
+ "format-muted": "",
+ "format-icons": {
+ "default": ["", "", ""]
+ }
+ },
+ "group/tray-expander": {
+ "orientation": "inherit",
+ "drawer": {
+ "transition-duration": 600,
+ "children-class": "tray-group-item"
+ },
+ "modules": ["custom/expand-icon", "tray"]
+ },
+ "custom/expand-icon": {
+ "format": " ",
+ "tooltip": false
+ },
+ "tray": {
+ "icon-size": 12,
+ "spacing": 12
}
}
diff --git a/config/waybar/style.css b/config/waybar/style.css
index 1aea777..924e185 100644
--- a/config/waybar/style.css
+++ b/config/waybar/style.css
@@ -1,39 +1,63 @@
+@import "../omarchy/current/theme/waybar.css";
+
* {
+ background-color: @background;
+ color: @foreground;
+
border: none;
border-radius: 0;
min-height: 0;
- font-family: CaskaydiaMono Nerd Font Propo;
+ font-family: CaskaydiaMono Nerd Font;
font-size: 12px;
}
-#workspaces {
- margin-left: 7px;
+.modules-left {
+ margin-left: 8px;
+}
+
+.modules-right {
+ margin-right: 8px;
}
#workspaces button {
all: initial;
- padding: 2px 6px;
- margin-right: 3px;
+ padding: 0 6px;
+ margin: 0 1.5px;
+ min-width: 9px;
+}
+
+#workspaces button.empty {
+ opacity: 0.5;
}
-#custom-dropbox,
+#tray,
#cpu,
#battery,
#network,
#bluetooth,
#pulseaudio,
-#clock,
-#custom-power-menu {
+#custom-omarchy,
+#custom-update {
min-width: 12px;
- margin-right: 13px;
+ margin: 0 7.5px;
+}
+
+#custom-expand-icon {
+ margin-right: 7px;
}
tooltip {
padding: 2px;
}
-tooltip label {
- padding: 2px;
+#custom-update {
+ font-size: 10px;
}
-@import "../omasway/current/theme/waybar.css";
+#clock {
+ margin-left: 8.75px;
+}
+
+.hidden {
+ opacity: 0;
+}
diff --git a/config/wofi/select.css b/config/wofi/select.css
new file mode 100644
index 0000000..da378ef
--- /dev/null
+++ b/config/wofi/select.css
@@ -0,0 +1,11 @@
+/* Use by power menu, theme selector, and other menus without visible search bar */
+
+@import ".config/wofi/style.css";
+
+#input {
+ display: none;
+ opacity: 0;
+ margin-top: -200px;
+}
+
+@import ".config/omasway/current/theme/wofi.css";
diff --git a/default/wofi/search.css b/config/wofi/style.css
similarity index 82%
rename from default/wofi/search.css
rename to config/wofi/style.css
index 6d67df5..1f55450 100644
--- a/default/wofi/search.css
+++ b/config/wofi/style.css
@@ -1,4 +1,4 @@
-@import ".config/omasway/current/theme/wofi.css";
+/* Colors are defined by theme file and can be referenced via @base, @text, @selected-text, and @border */
* {
font-family: "CaskaydiaMono Nerd Font", monospace;
@@ -7,8 +7,8 @@
window {
margin: 0px;
- padding: 20px;
- background-color: @base;
+ padding: 0px;
+ background-color: transparent;
opacity: 0.95;
}
@@ -20,11 +20,10 @@ window {
}
#outer-box {
- margin: 0;
padding: 20px;
- border: none;
background-color: @base;
border: 2px solid @border;
+ border-radius: 14px;
}
#scroll {
@@ -70,3 +69,5 @@ window {
#entry image {
-gtk-icon-transform: scale(0.7);
}
+
+@import ".config/omasway/current/theme/wofi.css";
diff --git a/config/xournalpp/settings.xml b/config/xournalpp/settings.xml
deleted file mode 100644
index 5f98a90..0000000
--- a/config/xournalpp/settings.xml
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/default/alacritty/screensaver.toml b/default/alacritty/screensaver.toml
new file mode 100644
index 0000000..7db389e
--- /dev/null
+++ b/default/alacritty/screensaver.toml
@@ -0,0 +1,11 @@
+[colors.primary]
+background = "0x000000"
+
+[colors.cursor]
+cursor = "0x000000"
+
+[font]
+size = 18.0
+
+[window]
+opacity = 1.0
diff --git a/default/bash/aliases b/default/bash/aliases
index b7b89fc..6146d99 100644
--- a/default/bash/aliases
+++ b/default/bash/aliases
@@ -15,8 +15,8 @@ zd() {
fi
}
md() {
- mkdir -p $1
- cd $1
+ mkdir -p $1
+ cd $1
}
# Directories
@@ -25,12 +25,13 @@ alias ...='cd ../..'
alias ....='cd ../../..'
# Tools
-alias n='nvim'
alias g='git'
alias d='docker'
+alias gl='glab'
alias bat='batcat'
alias lzg='lazygit'
alias lzd='lazydocker'
+n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; }
# Browser
open() {
diff --git a/default/bash/envs b/default/bash/envs
index 50a7d42..1f88605 100644
--- a/default/bash/envs
+++ b/default/bash/envs
@@ -1,3 +1,11 @@
# Editor used by CLI
export EDITOR="nvim"
-export SUDO_EDITOR="$EDITOR"
\ No newline at end of file
+export SUDO_EDITOR="$EDITOR"
+export BAT_THEME=ansi
+
+# Terminal
+export TERMINAL="alacritty"
+
+# Omasway
+export OMASWAY_PATH=$HOME/.local/share/omasway
+export PATH=$OMASWAY_PATH/bin/:$PATH
\ No newline at end of file
diff --git a/default/bash/functions b/default/bash/functions
index c65c060..039bbe3 100644
--- a/default/bash/functions
+++ b/default/bash/functions
@@ -2,13 +2,6 @@
compress() { tar -czf "${1%/}.tar.gz" "${1%/}"; }
alias decompress="tar -xzf"
-# Convert webm files generated by the Gnome screenshot video recorder to mp4s that are more compatible
-webm2mp4() {
- input_file="$1"
- output_file="${input_file%.webm}.mp4"
- ffmpeg -i "$input_file" -c:v libx264 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -preset slow -crf 22 -c:a aac -b:a 192k "$output_file"
-}
-
# Write iso file to sd card
iso2sd() {
if [ $# -ne 2 ]; then
@@ -22,19 +15,19 @@ iso2sd() {
fi
}
-# Ensure changes to ~/.XCompose are immediately available
-refresh-xcompose() {
- pkill fcitx5
- setsid fcitx5 &>/dev/null &
+# Convert webm files generated by the Gnome screenshot video recorder to mp4s that are more compatible
+webm2mp4() {
+ input_file="$1"
+ output_file="${input_file%.webm}.mp4"
+ ffmpeg -i "$input_file" -c:v libx264 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -preset slow -crf 22 -c:a aac -b:a 192k "$output_file"
}
-# Ensure that external keyboards that use an fn key has the F keys as the default
-alias fix_fkeys='echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode'
-
-# Spotify window is too large on many displays, so fix this by zooming it down
-alias fix_spotify_window_size="sudo sed -i 's|^Exec=.*|Exec=spotify --force-device-scale-factor=1.5 %U|' /usr/local/share/applications/spotify.desktop"
-
-# SSH key management
-function ssh-key-put() {
- cat ~/.ssh/id_ed25519.pub | ssh "$1" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys";
+# Transcode a video to a good-balance 1080p that's great for sharing online
+transcode-video-1080p() {
+ ffmpeg -i $1 -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy ${1%.*}-1080p.mp4
}
+
+# Transcode a video to a good-balance 4K that's great for sharing online
+transcode-video-4K() {
+ ffmpeg -i $1 -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k ${1%.*}-optimized.mp4
+}
\ No newline at end of file
diff --git a/default/bash/init b/default/bash/init
index ea41bfd..7f24ae2 100644
--- a/default/bash/init
+++ b/default/bash/init
@@ -2,6 +2,10 @@ if command -v mise &> /dev/null; then
eval "$(mise activate bash)"
fi
+if command -v starship &> /dev/null; then
+ eval "$(starship init bash)"
+fi
+
if command -v zoxide &> /dev/null; then
eval "$(zoxide init bash)"
fi
diff --git a/default/bash/inputrc b/default/bash/inputrc
index 9b0f307..6d42e9c 100644
--- a/default/bash/inputrc
+++ b/default/bash/inputrc
@@ -28,14 +28,12 @@ set completion-query-items 200
# Show extra file information when completing, like `ls -F` does
set visible-stats on
-$if Bash
- # Be more intelligent when autocompleting by also looking at the text after
- # the cursor. For example, when the current line is "cd ~/src/mozil", and
- # the cursor is on the "z", pressing Tab will not autocomplete it to "cd
- # ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
- # Readline used by Bash 4.)
- set skip-completed-text on
-
- # Coloring for Bash 4 tab completions.
- set colored-stats on
-$endif
\ No newline at end of file
+# Be more intelligent when autocompleting by also looking at the text after
+# the cursor. For example, when the current line is "cd ~/src/mozil", and
+# the cursor is on the "z", pressing Tab will not autocomplete it to "cd
+# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
+# Readline used by Bash 4.)
+set skip-completed-text on
+
+# Coloring for Bash 4 tab completions.
+set colored-stats on
\ No newline at end of file
diff --git a/default/bash/prompt b/default/bash/prompt
index ceadf7f..e985052 100644
--- a/default/bash/prompt
+++ b/default/bash/prompt
@@ -2,15 +2,7 @@
force_color_prompt=yes
color_prompt=yes
-# get current git branch
-git_branch() {
- local branch
- branch=$(git symbolic-ref --short HEAD 2>/dev/null)
- if [ -n "$branch" ]; then
- echo -e "\001\e[1;36m\002git:(\001\e[0;38;5;107m\002${branch}\001\e[1;36m\002)\001\e[0m\002 "
- fi
-}
+# Simple prompt with path in the window/pane title and caret for typing line
+PS1=$'\uf0a9 '
+PS1="\[\e]0;\w\a\]$PS1"
-# Simple prompt with path in the window/pane title and carat for typing line
-PS1=$' $(git_branch)\[\e[31m\]→ \[\e[0m\]'
-PS1="\[\e]0;\w\a\]$PS1"
\ No newline at end of file
diff --git a/default/bash/rc b/default/bash/rc
index 60c15d7..faac875 100644
--- a/default/bash/rc
+++ b/default/bash/rc
@@ -4,3 +4,4 @@ source ~/.local/share/omasway/default/bash/functions
source ~/.local/share/omasway/default/bash/prompt
source ~/.local/share/omasway/default/bash/init
source ~/.local/share/omasway/default/bash/envs
+[[ $- == *i* ]] && bind -f ~/.local/share/omasway/default/bash/inputrc
diff --git a/default/bash/shell b/default/bash/shell
index e933686..37d61ca 100644
--- a/default/bash/shell
+++ b/default/bash/shell
@@ -9,6 +9,4 @@ source /usr/share/bash-completion/bash_completion
# Set complete path
export PATH="./bin:$HOME/.local/bin:$HOME/.local/share/omasway/bin:$PATH"
-set +h
-
-export OMASWAY_PATH="/home/$USER/.local/share/omasway"
+set +h
\ No newline at end of file
diff --git a/default/bashrc b/default/bashrc
new file mode 100644
index 0000000..000f095
--- /dev/null
+++ b/default/bashrc
@@ -0,0 +1,14 @@
+# All the default Omasway aliases and functions
+# (don't mess with these directly, just overwrite them here!)
+source ~/.local/share/omasway/default/bash/rc
+
+# Add your own exports, aliases, and functions here.
+#
+# Make an alias for invoking commands you use constantly
+# alias p='python'
+#
+# Use VSCode instead of neovim as your default editor
+# export EDITOR="code"
+#
+# Set a custom prompt with the directory revealed (alternatively use https://starship.rs)
+# PS1="\W \[\e]0;\w\a\]$PS1"
diff --git a/default/mako/core.ini b/default/mako/core.ini
new file mode 100644
index 0000000..0301e82
--- /dev/null
+++ b/default/mako/core.ini
@@ -0,0 +1,16 @@
+anchor=top-right
+default-timeout=5000
+width=420
+height=110
+
+[app-name=Spotify]
+invisible=1
+
+[mode=do-not-disturb]
+invisible=true
+
+[mode=do-not-disturb app-name=notify-send]
+invisible=false
+
+[urgency=critical]
+default-timeout=0
\ No newline at end of file
diff --git a/default/plymouth/logo.png b/default/plymouth/logo.png
new file mode 100644
index 0000000..ee87e86
Binary files /dev/null and b/default/plymouth/logo.png differ
diff --git a/default/plymouth/omasway.plymouth b/default/plymouth/omasway.plymouth
new file mode 100644
index 0000000..49d9d59
--- /dev/null
+++ b/default/plymouth/omasway.plymouth
@@ -0,0 +1,11 @@
+[Plymouth Theme]
+Name=Omasway
+Description=Omasway splash screen.
+ModuleName=script
+
+[script]
+ImageDir=/usr/share/plymouth/themes/omasway
+ScriptFile=/usr/share/plymouth/themes/omasway/omasway.script
+ConsoleLogBackgroundColor=0x1a1b26
+MonospaceFont=Cantarell 11
+Font=Cantarell 11
diff --git a/default/plymouth/omasway.script b/default/plymouth/omasway.script
new file mode 100644
index 0000000..5c4a14e
--- /dev/null
+++ b/default/plymouth/omasway.script
@@ -0,0 +1,174 @@
+# Omasway Plymouth Theme Script - Boot loading only
+
+Window.SetBackgroundTopColor(0.101, 0.105, 0.149);
+Window.SetBackgroundBottomColor(0.101, 0.105, 0.149);
+
+logo.image = Image("logo.png");
+logo.sprite = Sprite(logo.image);
+logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
+logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
+logo.sprite.SetOpacity (1);
+
+# Progress bar animation variables
+global.fake_progress = 0.0;
+global.real_progress = 0.0;
+global.fake_progress_active = 0;
+global.animation_frame = 0;
+global.max_progress = 0.0;
+
+# Use these to adjust the progress bar timing
+global.fake_progress_limit = 0.7;
+global.fake_progress_duration = 15.0;
+
+fun refresh_callback ()
+ {
+ global.animation_frame++;
+
+ # Animate fake progress to limit over time with easing
+ if (global.fake_progress_active == 1)
+ {
+ # Calculate elapsed time since start
+ elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS)
+
+ # Calculate linear progress ratio (0 to 1) based on time
+ time_ratio = elapsed_time / global.fake_progress_duration;
+ if (time_ratio > 1.0)
+ time_ratio = 1.0;
+
+ # Apply easing curve: ease-out quadratic
+ eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio));
+
+ # Calculate fake progress based on eased ratio
+ global.fake_progress = eased_ratio * global.fake_progress_limit;
+
+ # Update progress bar with fake progress
+ update_progress_bar(global.fake_progress);
+ }
+ }
+
+Plymouth.SetRefreshFunction (refresh_callback);
+
+#----------------------------------------- Helper Functions --------------------------------
+
+fun update_progress_bar(progress)
+ {
+ # Only update if progress is moving forward
+ if (progress > global.max_progress)
+ {
+ global.max_progress = progress;
+ width = Math.Int(progress_bar.original_image.GetWidth() * progress);
+ if (width < 1) width = 1;
+
+ progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight());
+ progress_bar.sprite.SetImage(progress_bar.image);
+ }
+ }
+
+fun show_progress_bar()
+ {
+ progress_box.sprite.SetOpacity(1);
+ progress_bar.sprite.SetOpacity(1);
+ }
+
+fun start_fake_progress()
+ {
+ if (global.max_progress == 0.0)
+ {
+ global.fake_progress = 0.0;
+ global.real_progress = 0.0;
+ update_progress_bar(0.0);
+ }
+ global.fake_progress_active = 1;
+ global.animation_frame = 0;
+ }
+
+fun stop_fake_progress()
+ {
+ global.fake_progress_active = 0;
+ }
+
+#----------------------------------------- Display Functions --------------------------------
+
+fun display_normal_callback ()
+ {
+ # Show progress bar immediately for boot/resume modes
+ mode = Plymouth.GetMode();
+ if (mode == "boot" || mode == "resume")
+ {
+ show_progress_bar();
+ start_fake_progress();
+ }
+ }
+
+# No password dialog - we go straight to GDM
+fun display_password_callback (prompt, bullets)
+ {
+ # Do nothing - let GDM handle authentication
+ }
+
+Plymouth.SetDisplayNormalFunction(display_normal_callback);
+Plymouth.SetDisplayPasswordFunction(display_password_callback);
+
+#----------------------------------------- Progress Bar --------------------------------
+
+progress_box.image = Image("progress_box.png");
+progress_box.sprite = Sprite(progress_box.image);
+
+progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
+progress_box.y = logo.sprite.GetY() + logo.image.GetHeight() + 40;
+progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0);
+progress_box.sprite.SetOpacity(0);
+
+progress_bar.original_image = Image("progress_bar.png");
+progress_bar.sprite = Sprite();
+progress_bar.image = progress_bar.original_image.Scale(1, progress_bar.original_image.GetHeight());
+
+progress_bar.x = Window.GetWidth() / 2 - progress_bar.original_image.GetWidth() / 2;
+progress_bar.y = progress_box.y + (progress_box.image.GetHeight() - progress_bar.original_image.GetHeight()) / 2;
+progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1);
+progress_bar.sprite.SetOpacity(0);
+
+fun progress_callback (duration, progress)
+ {
+ global.real_progress = progress;
+
+ # If real progress is above limit, stop fake progress and use real progress
+ if (progress > global.fake_progress_limit)
+ {
+ stop_fake_progress();
+ update_progress_bar(progress);
+ }
+ }
+
+Plymouth.SetBootProgressFunction(progress_callback);
+
+#----------------------------------------- Quit --------------------------------
+
+fun quit_callback ()
+{
+ # Keep logo visible until GDM takes over
+ logo.sprite.SetOpacity (1);
+}
+
+Plymouth.SetQuitFunction(quit_callback);
+
+#----------------------------------------- Message --------------------------------
+
+message_sprite = Sprite();
+message_sprite.SetPosition(10, 10, 10000);
+
+fun display_message_callback (text)
+{
+ # Show messages in white text at top-left
+ my_image = Image.Text(text, 1, 1, 1);
+ message_sprite.SetImage(my_image);
+ message_sprite.SetOpacity(1);
+}
+
+fun hide_message_callback (text)
+{
+ message_sprite.SetOpacity(0);
+}
+
+Plymouth.SetDisplayMessageFunction (display_message_callback);
+Plymouth.SetHideMessageFunction (hide_message_callback);
diff --git a/default/plymouth/progress_bar.png b/default/plymouth/progress_bar.png
new file mode 100644
index 0000000..dbb9fd7
Binary files /dev/null and b/default/plymouth/progress_bar.png differ
diff --git a/default/plymouth/progress_box.png b/default/plymouth/progress_box.png
new file mode 100644
index 0000000..6a263f2
Binary files /dev/null and b/default/plymouth/progress_box.png differ
diff --git a/default/sway/bindings/tiling b/default/sway/bindings/tiling
index 539a420..bb7b0df 100644
--- a/default/sway/bindings/tiling
+++ b/default/sway/bindings/tiling
@@ -45,6 +45,10 @@ bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
+# Moving through workspaces
+bindsym $mod+$alt+Right workspace next
+bindsym $mod+$alt+Left workspace prev
+
# Make the current focus fullscreen
bindsym $mod+f fullscreen
@@ -75,4 +79,9 @@ mode "resize" {
bindsym Return mode "default"
bindsym Escape mode "default"
}
-bindsym $mod+r mode "resize"
\ No newline at end of file
+bindsym $mod+r mode "resize"
+
+# Gestures
+bindgesture swipe:right workspace prev
+bindgesture swipe:left workspace next
+bindgesture swipe:down floating toggle
\ No newline at end of file
diff --git a/default/sway/input b/default/sway/input
index 8c7a9eb..cddeff0 100644
--- a/default/sway/input
+++ b/default/sway/input
@@ -1,9 +1,11 @@
+# Keyboard
input type:keyboard {
xkb_layout us
}
+# Touchpad
input type:touchpad {
dwt enabled
tap enabled
natural_scroll disabled
-}
\ No newline at end of file
+}
diff --git a/default/sway/variables b/default/sway/variables
index a0b6889..12a0a2f 100644
--- a/default/sway/variables
+++ b/default/sway/variables
@@ -24,19 +24,16 @@ set $menu wofi --show drun --sort-order=alphabetical --style="$HOME/.local/share
# Browser
set $browser firefox
-set $browser_pwa --new-window --ozone-platform=wayland
+set $browser_pwa chromium --new-window --ozone-platform=wayland
# File Manager
-set $fileManager = nautilus --new-window
+set $fileManager nautilus --new-window
# PolicyKit agent
set $polkit_agent /usr/bin/mate-polkit
# Autotiling script
-set $autotiling '[ -x "$(command -v autotiling)" ] && autotiling -w 1 3 5 7 9'
+set $autotiling '[ -x "$(command -v autotiling)" ] && autotiling -w 1 2 3 4 5 6'
# Swaybg command
set $swaybg swaybg -i ~/.config/omasway/current/background -m fill
-
-# Include Sway configuration files
-include /etc/sway/config-vars.d/*
\ No newline at end of file
diff --git a/default/sway/windows b/default/sway/windows
new file mode 100644
index 0000000..7d88774
--- /dev/null
+++ b/default/sway/windows
@@ -0,0 +1,63 @@
+# This settings are based on default settings from Ubuntu Sway Remix
+# @source https://github.com/Ubuntu-Sway/ubuntu-sway-default-settings
+
+# set floating mode for specific application
+for_window [app_id="[Ff]irefox" title="^Library$"] floating enable, border pixel 1
+for_window [app_id="thunderbird" title=".*Reminder"] floating enable
+for_window [app_id="floating_shell_portrait"] floating enable, border pixel 1, sticky enable, resize set width 30 ppt height 40 ppt
+for_window [app_id="floating_shell"] floating enable, border pixel 1, sticky enable
+for_window [app_id="" title="Picture in picture"] floating enable, sticky enable
+for_window [app_id="" title="Picture-in-Picture"] floating enable, sticky enable
+for_window [instance="around"] floating enable, sticky enable
+for_window [app_id="xsensors"] floating enable
+for_window [app_id = "qt5ct"] floating enable
+for_window [app_id = "qt6ct"] floating enable
+for_window [app_id="nm-connection-editor"] floating enable
+for_window [app_id="pavucontrol"] floating enable
+for_window [app_id="nwg-look"] floating enable
+for_window [app_id="engrampa"] floating enable
+for_window [app_id="software-properties-gtk"] floating enable
+for_window [app_id="wdisplays"] floating enable
+for_window [app_id="gpk-update-viewer"] floating enable
+for_window [app_id="gpk-application"] floating enable
+for_window [app_id="nwg-displays"] floating enable
+for_window [app_id="calamares"] floating enable
+for_window [app_id="sway-input-config"] floating enable
+for_window [title="Save File"] floating enable
+for_window [title="[Ff]irefox .*— Sharing Indicator"] floating enable, sticky enable, move to scratchpad
+for_window [app_id="" title=".* is sharing your screen."] floating enable
+
+# set floating mode for generated windows
+for_window [window_role="pop-up"] floating enable
+for_window [window_role="bubble"] floating enable
+for_window [window_role="dialog"] floating enable
+for_window [window_type="dialog"] floating enable
+for_window [window_role = "task_dialog"] floating enable
+for_window [window_type = "menu"] floating enable
+for_window [window_role = "GtkFileChooserDialog"] resize set 600 400
+for_window [window_role = "GtkFiileChooserDialog"] move position center
+for_window [window_role="Preferences"] floating enable
+for_window [title="(?:Open|Save) (?:File|Folder|As)"] floating enable;
+for_window [title="(?:Open|Save) (?:File|Folder|As)"] resize set 600 400
+for_window [title="Choose an Application"] floating enable
+for_window [title="Removable medium is inserted"] floating enable
+
+# apply mark for Xwayland and wayland native browser windows
+for_window [class="Chromium-browser"] mark Browser
+for_window [class="Brave-browser"] mark Browser
+for_window [app_id="Chromium-browser"] mark Browser
+for_window [app_id="brave-browser"] mark Browser
+for_window [app_id="[Ff]irefox"] mark Browser
+
+# inhibit scrensaver for fullscreen browser windows
+for_window [con_mark="Browser"] {
+ inhibit_idle fullscreen
+}
+
+# Don't allow applications to inhibit shortcuts, i.e. grab total control of the
+# keyboard. Chrome currently abuses this by enabling it for all "--app=..."
+# shortcuts.
+seat * shortcuts_inhibitor disable
+
+# inhibit keyboard shortcuts for marked applications
+for_window [con_mark="Grabbing"] shortcuts_inhibitor enable
diff --git a/install.sh b/install.sh
index 2afcb36..5f4c1cb 100644
--- a/install.sh
+++ b/install.sh
@@ -1,16 +1,80 @@
+#!/bin/bash
+
# Exit immediately if a command exits with a non-zero status
-set -e
+set -eE
+
+show_logo() {
+ clear
+ echo -e "\n\e[1;36m$(cat ~/.local/share/omasway/logo.txt)\e[0m"
+ echo
+}
+
+show_subtext() {
+ echo "$1"
+ echo
+}
+
+export PATH="$HOME/.local/share/omasway/bin:$PATH"
+OMASWAY_INSTALL=~/.local/share/omasway/install
+
+# Preparation
+source $OMASWAY_INSTALL/preflight/trap-errors.sh
+source $OMASWAY_INSTALL/preflight/guard.sh
+source $OMASWAY_INSTALL/preflight/migrations.sh
+source $OMASWAY_INSTALL/preflight/presentation.sh
+
+# User Inputs
+show_logo
+show_subtext "Get ready to fill out some configuration... [1/5]"
+source $OMASWAY_INSTALL/preflight/identification.sh
+source $OMASWAY_INSTALL/preflight/timezone.sh
+
+# Packaging
+show_logo
+show_subtext "Installing packages [2/5]"
+source $OMASWAY_INSTALL/packages.sh
+source $OMASWAY_INSTALL/packaging/fonts.sh
+source $OMASWAY_INSTALL/packaging/nvim.sh
+source $OMASWAY_INSTALL/packaging/tools.sh
+source $OMASWAY_INSTALL/packaging/apps.sh
+source $OMASWAY_INSTALL/packaging/webapps.sh
+source $OMASWAY_INSTALL/packaging/tuis.sh
+source $OMASWAY_INSTALL/packaging/uwsm.sh
+
+# Configuration
+show_logo
+show_subtext "Apply Omasway configuration! [3/5]"
+source $OMASWAY_INSTALL/config/config.sh
+source $OMASWAY_INSTALL/config/theme.sh
+source $OMASWAY_INSTALL/config/branding.sh
+source $OMASWAY_INSTALL/config/git.sh
+source $OMASWAY_INSTALL/config/increase-lockout-limit.sh
+source $OMASWAY_INSTALL/config/detect-keyboard-layout.sh
+source $OMASWAY_INSTALL/config/xcompose.sh
+source $OMASWAY_INSTALL/config/mimetypes.sh
+source $OMASWAY_INSTALL/config/firewall.sh
+source $OMASWAY_INSTALL/config/localdb.sh
+source $OMASWAY_INSTALL/config/hardware/fix-fkeys.sh
+source $OMASWAY_INSTALL/config/hardware/bluetooth.sh
+source $OMASWAY_INSTALL/config/hardware/printer.sh
-# Give people a chance to retry running the installation
-trap 'echo -e "\nOmasway installation failed! You can retry by running: source ~/.local/share/omasway/install.sh"' ERR
+# Login
+show_logo
+show_subtext "Configuring login settings! [4/5]"
+source $OMASWAY_INSTALL/login/plymouth.sh
+source $OMASWAY_INSTALL/login/autologin.sh
+source $OMASWAY_INSTALL/login/alt-bootloaders.sh
-# Install everything
-for f in ~/.local/share/omasway/install/*.sh; do
- echo -e "\nRunning installer: $f"
- source "$f"
-done
+# Landing
+show_logo
+show_subtext "Preparing system and cleaning up [5/5]"
+source $OMASWAY_INSTALL/landing/cleanup.sh
+source $OMASWAY_INSTALL/landing/battery-monitor.sh
+source $OMASWAY_INSTALL/landing/network.sh
-# Ensure locate is up to date now that everything has been installed
-sudo updatedb
+# Reboot
+show_logo
+show_subtext "You're done! So we'll be rebooting now..."
-gum confirm "Reboot to apply all settings?" && reboot
+sleep 5
+reboot
\ No newline at end of file
diff --git a/install/0-prerequisites.sh b/install/0-prerequisites.sh
deleted file mode 100644
index 34780fa..0000000
--- a/install/0-prerequisites.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-if [ ! -f /etc/os-release ]; then
- echo "$(tput setaf 1)Error: Unable to determine OS. /etc/os-release file not found."
- echo "Installation stopped."
- exit 1
-fi
-
-. /etc/os-release
-
-# Check if running on Ubuntu 24.04 or higher
-if [ "$ID" != "ubuntu" ] || [ $(echo "$VERSION_ID >= 24.04" | bc) != 1 ]; then
- echo "$(tput setaf 1)Error: OS requirement not met"
- echo "You are currently running: $ID $VERSION_ID"
- echo "OS required: Ubuntu 24.04 or higher"
- echo "Installation stopped."
- exit 1
-fi
-
-# Check if running on x86
-ARCH=$(uname -m)
-if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then
- echo "$(tput setaf 1)Error: Unsupported architecture detected"
- echo "Current architecture: $ARCH"
- echo "This installation is only supported on x86 architectures (x86_64 or i686)."
- echo "Installation stopped."
- exit 1
-fi
diff --git a/install/2-first-run-choices.sh b/install/2-first-run-choices.sh
deleted file mode 100644
index 3a1680d..0000000
--- a/install/2-first-run-choices.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-# Theme
-AVAILABLE_THEMES=(
- "Tokyo Night"
- "Catppuccin"
- "Nord"
- "Everforest"
- "Gruvbox"
- "Kanagawa"
-)
-DEFAULT_THEME="Tokyo Night"
-OMASWAY_FIRST_RUN_THEME=$(gum choose "${AVAILABLE_THEMES[@]}" --limit 1 --selected "$DEFAULT_THEME" --height 10 --header "Select your theme" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
-if [[ -z "$OMASWAY_FIRST_RUN_THEME" ]]; then
- OMASWAY_FIRST_RUN_THEME="tokyo-night"
-fi
-export OMASWAY_FIRST_RUN_THEME
-
-# Apps
-OPTIONAL_APPS=(
- "FlameShot"
- "Libreoffice"
- "LocalSend"
- "Pinta"
- "Spotify"
- "Xournalpp"
- "Visual Studio Code"
-)
-DEFAULT_OPTIONAL_APPS='FlameShot','LocalSend','Pinta','Spotify'
-export OMASWAY_FIRST_RUN_OPTIONAL_APPS=$(gum choose "${OPTIONAL_APPS[@]}" --no-limit --selected $DEFAULT_OPTIONAL_APPS --height 10 --header "Select optional apps" | tr ' ' '-')
diff --git a/install/4-terminal.sh b/install/4-terminal.sh
deleted file mode 100644
index b898822..0000000
--- a/install/4-terminal.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-# Needed for all installers
-sudo apt update -y
-sudo apt upgrade -y
-sudo apt install -y \
- wget gpg curl unzip \
- fd-find eza fzf ripgrep zoxide bat \
- wl-clipboard btop \
- plocate whois tldr
diff --git a/install/5-sway.sh b/install/5-sway.sh
deleted file mode 100644
index 47d4d15..0000000
--- a/install/5-sway.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-# Sway - A Wayland compositor
-sudo apt install -y \
- sway swaybg swaylock swayidle mate-polkit-bin \
- waybar wofi mako-notifier \
- xwayland wayland-protocols wayland-utils xdg-desktop-portal-wlr xdg-desktop-portal-gtk \
- qtwayland5 qt6-wayland
-
-# Autotiling - a tiling script for Sway
-sudo apt install -y python3-i3ipc
-
-cd /tmp
-AUTOTILING_VERSION=$(curl -s "https://api.github.com/repos/nwg-piotr/autotiling/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
-curl -sLo autotiling.tar.gz "https://github.com/nwg-piotr/autotiling/archive/refs/tags/v${AUTOTILING_VERSION}.tar.gz"
-tar -xf autotiling.tar.gz "autotiling-${AUTOTILING_VERSION}"
-mv "autotiling-${AUTOTILING_VERSION}/autotiling/main.py" /usr/bin/autotiling
-chmod +x ~/.local/bin/autotiling
-rm -R autotiling.tar.gz "autotiling-${AUTOTILING_VERSION}"
-cd -
\ No newline at end of file
diff --git a/install/6-config.sh b/install/6-config.sh
deleted file mode 100644
index 2d89523..0000000
--- a/install/6-config.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copy over Omasway configs
-mkdir -p ~/.config
-cp -R ~/.local/share/omasway/config/* ~/.config/
-
-# Ensure application directory exists for update-desktop-database
-mkdir -p ~/.local/share/applications
-
-# Configure the bash shell using Omasway defaults
-[ -f "~/.bashrc" ] && mv ~/.bashrc ~/.bashrc.bak
-echo "source ~/.local/share/omasway/default/bash/rc" >~/.bashrc
-
-# Load the PATH for use later in the installers
-source ~/.local/share/omasway/default/bash/shell
-
-# Configure the inputrc using Omasway defaults
-[ -f "~/.inputrc" ] && mv ~/.inputrc ~/.inputrc.bak
-echo "\$include ~/.local/share/omasway/default/bash/inputrc" >~/.inputrc
-
-# Start Sway on first session - Ubuntu compatible approach
-echo '[ "$(tty)" = "/dev/tty1" ] && exec sway' >> ~/.bash_profile
-
-# Login directly as user
-sudo mkdir -p /etc/systemd/system/getty@tty1.service.d
-sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf >/dev/null </dev/null < : "$OMASWAY_USER_NAME"
- : "$OMASWAY_USER_EMAIL"
-EOF
-
diff --git a/install/7-flatpak.sh b/install/7-flatpak.sh
deleted file mode 100644
index 72061a6..0000000
--- a/install/7-flatpak.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-# Add FlatHub
-sudo apt install -y flatpak
-sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
diff --git a/install/alacritty.sh b/install/alacritty.sh
deleted file mode 100644
index 04d6546..0000000
--- a/install/alacritty.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-# Alacritty is a GPU-powered and highly extensible terminal. See https://alacritty.org/
-sudo apt install -y alacritty
-
-# Migrate config format if needed
-alacritty migrate 2>/dev/null || true
-
-# Make alacritty default terminal emulator
-sudo update-alternatives --set x-terminal-emulator /usr/bin/alacritty
-
-# Adding alacritty to nautilus contextual menu requires the python wrapper for the libraries
-sudo apt install -y python3-nautilus
-mkdir -p ~/.local/share/nautilus-python/extensions/
-
-cat >~/.local/share/nautilus-python/extensions/open-alacritty.py < None:
- filename = unquote(file.get_uri()[7:])
-
- os.chdir(filename)
- os.system("alacritty")
-
- def menu_activate_cb(
- self,
- menu: Nautilus.MenuItem,
- file: Nautilus.FileInfo,
- ) -> None:
- self._open_terminal(file)
-
- def menu_background_activate_cb(
- self,
- menu: Nautilus.MenuItem,
- file: Nautilus.FileInfo,
- ) -> None:
- self._open_terminal(file)
-
- def get_file_items(
- self,
- files: List[Nautilus.FileInfo],
- ) -> List[Nautilus.MenuItem]:
- if len(files) != 1:
- return []
-
- file = files[0]
- if not file.is_directory() or file.get_uri_scheme() != "file":
- return []
-
- item = Nautilus.MenuItem(
- name="NautilusPython::openterminal_file_item",
- label="Open in Alacritty",
- tip="Open Alacritty In %s" % file.get_name(),
- )
- item.connect("activate", self.menu_activate_cb, file)
-
- return [
- item,
- ]
-
- def get_background_items(
- self,
- current_folder: Nautilus.FileInfo,
- ) -> List[Nautilus.MenuItem]:
- item = Nautilus.MenuItem(
- name="NautilusPython::openterminal_file_item2",
- label="Open in Alacritty",
- tip="Open Alacritty In %s" % current_folder.get_name(),
- )
- item.connect("activate", self.menu_background_activate_cb, current_folder)
-
- return [
- item,
- ]
-TECHNICALLYNOTACONFIGSOHEREDOCCEDITIS
diff --git a/install/backgrounds.sh b/install/backgrounds.sh
deleted file mode 100644
index 6e6174f..0000000
--- a/install/backgrounds.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-BACKGROUNDS_DIR=~/.config/omasway/backgrounds/
-
-download_background_image() {
- local url="$1"
- local path="$2"
- gum spin --title "Downloading $url as $path..." -- curl -sL -o "$BACKGROUNDS_DIR/$path" "$url"
-}
-
-for t in ~/.local/share/omasway/themes/*; do source "$t/backgrounds.sh"; done
diff --git a/install/bluetooth.sh b/install/bluetooth.sh
deleted file mode 100644
index 4cb085e..0000000
--- a/install/bluetooth.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-# Install bluetooth controls
-sudo apt install -y bluez blueman
-sudo systemctl enable --now bluetooth
\ No newline at end of file
diff --git a/install/chromium.sh b/install/chromium.sh
deleted file mode 100644
index 300e942..0000000
--- a/install/chromium.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# Browse the web with the most popular browser. See https://www.google.com/chrome/
-sudo add-apt-repository -y ppa:xtradeb/apps
-sudo apt update -y
-sudo apt install -y chromium
diff --git a/install/config/branding.sh b/install/config/branding.sh
new file mode 100755
index 0000000..4266ae4
--- /dev/null
+++ b/install/config/branding.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Allow the user to change the branding for fastfetch and screensaver
+mkdir -p ~/.config/omasway/branding
+cp ~/.local/share/omasway/logo.txt ~/.config/omasway/branding/screensaver.txt
diff --git a/install/config/config.sh b/install/config/config.sh
new file mode 100644
index 0000000..502c904
--- /dev/null
+++ b/install/config/config.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Copy over Omasway configs
+mkdir -p ~/.config
+cp -R ~/.local/share/omasway/config/* ~/.config/
+
+# Configure the bash shell using Omasway defaults
+cp ~/.local/share/omasway/default/bashrc ~/.bashrc
\ No newline at end of file
diff --git a/install/config/detect-keyboard-layout.sh b/install/config/detect-keyboard-layout.sh
new file mode 100755
index 0000000..84b30d5
--- /dev/null
+++ b/install/config/detect-keyboard-layout.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Copy over the keyboard layout that's been set in Arch during install to Sway
+conf="$HOME/.config/sway/input.conf"
+
+layout=$(localectl status | grep "X11 Layout" | awk '{print $3}')
+variant=$(localectl status | grep "X11 Variant" | awk '{print $3}')
+
+if [[ -n "$layout" ]]; then
+ sed -i "/^[[:space:]]*kb_options *=/i\ kb_layout = $layout" "$conf"
+fi
+
+if [[ -n "$variant" ]]; then
+ sed -i "/^[[:space:]]*kb_options *=/i\ kb_variant = $variant" "$conf"
+fi
diff --git a/install/config/firewall.sh b/install/config/firewall.sh
new file mode 100644
index 0000000..7d0982a
--- /dev/null
+++ b/install/config/firewall.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Allow nothing in, everything out
+sudo ufw default deny incoming
+sudo ufw default allow outgoing
+
+# Allow ports for LocalSend
+sudo ufw allow 53317/udp
+sudo ufw allow 53317/tcp
+
+# Allow SSH in
+sudo ufw allow 22/tcp
+
+# Allow Docker containers to use DNS on host
+sudo ufw allow in on docker0 to any port 53
+
+# Turn on the firewall
+sudo ufw enable
+
+# Enable UFW systemd service to start on boot
+sudo systemctl enable ufw
+
+# Install ufw-docker script to manage Docker firewall rules
+sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
+sudo chmod +x /usr/local/bin/ufw-docker
+
+# Turn on Docker protections
+sudo ufw-docker install
+sudo ufw reload
diff --git a/install/config/git.sh b/install/config/git.sh
new file mode 100644
index 0000000..362fee4
--- /dev/null
+++ b/install/config/git.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Ensure git settings live under ~/.config
+mkdir -p ~/.config/git
+touch ~/.config/git/config
+
+# Set common git aliases
+git config --global alias.co checkout
+git config --global alias.br branch
+git config --global alias.ci commit
+git config --global alias.st status
+git config --global pull.rebase true
+
+# Set identification from install inputs
+if [[ -n "${OMASWAY_USER_NAME//[[:space:]]/}" ]]; then
+ git config --global user.name "$OMASWAY_USER_NAME"
+fi
+
+if [[ -n "${OMASWAY_USER_EMAIL//[[:space:]]/}" ]]; then
+ git config --global user.email "$OMASWAY_USER_EMAIL"
+fi
diff --git a/install/config/hardware/bluetooth.sh b/install/config/hardware/bluetooth.sh
new file mode 100755
index 0000000..803bef1
--- /dev/null
+++ b/install/config/hardware/bluetooth.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Turn on bluetooth by default
+sudo systemctl enable bluetooth
diff --git a/install/config/hardware/fix-fkeys.sh b/install/config/hardware/fix-fkeys.sh
new file mode 100644
index 0000000..29f4b84
--- /dev/null
+++ b/install/config/hardware/fix-fkeys.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then
+ echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf
+fi
diff --git a/install/config/hardware/printer.sh b/install/config/hardware/printer.sh
new file mode 100644
index 0000000..640b40e
--- /dev/null
+++ b/install/config/hardware/printer.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+sudo systemctl enable --now cups.service
+
+# Disable multicast dns in resolved. Avahi will provide this for better network printer discovery
+sudo mkdir -p /etc/systemd/resolved.conf.d
+echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-disable-multicast.conf
+sudo systemctl enable --now avahi-daemon.service
+
+# Enable automatically adding remote printers
+if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then
+ echo 'CreateRemotePrinters Yes' | sudo tee -a /etc/cups/cups-browsed.conf
+fi
+
+sudo systemctl enable --now cups-browsed.service
\ No newline at end of file
diff --git a/install/config/increase-lockout-limit.sh b/install/config/increase-lockout-limit.sh
new file mode 100755
index 0000000..1fdbf7d
--- /dev/null
+++ b/install/config/increase-lockout-limit.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Increase lockout limit to 10 and decrease timeout to 2 minutes
+sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
+sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth"
diff --git a/install/config/localdb.sh b/install/config/localdb.sh
new file mode 100755
index 0000000..d7ee802
--- /dev/null
+++ b/install/config/localdb.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Update localdb so that locate will find everything installed
+sudo updatedb
diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh
new file mode 100644
index 0000000..ec27d63
--- /dev/null
+++ b/install/config/mimetypes.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Refresh applications .desktop files
+omasway-refresh-applications
+update-desktop-database ~/.local/share/applications
+
+# Open all images with imv
+xdg-mime default imv.desktop image/png
+xdg-mime default imv.desktop image/jpeg
+xdg-mime default imv.desktop image/gif
+xdg-mime default imv.desktop image/webp
+xdg-mime default imv.desktop image/bmp
+xdg-mime default imv.desktop image/tiff
+
+# Open PDFs with the Document Viewer
+xdg-mime default org.gnome.Evince.desktop application/pdf
+
+# Use Firefox as the default browser
+xdg-settings set default-web-browser firefox.desktop 2>/dev/null || true
+xdg-mime default firefox.desktop x-scheme-handler/http
+xdg-mime default firefox.desktop x-scheme-handler/https
+
+# Open video files with mpv
+xdg-mime default mpv.desktop video/mp4
+xdg-mime default mpv.desktop video/x-msvideo
+xdg-mime default mpv.desktop video/x-matroska
+xdg-mime default mpv.desktop video/x-flv
+xdg-mime default mpv.desktop video/x-ms-wmv
+xdg-mime default mpv.desktop video/mpeg
+xdg-mime default mpv.desktop video/ogg
+xdg-mime default mpv.desktop video/webm
+xdg-mime default mpv.desktop video/quicktime
+xdg-mime default mpv.desktop video/3gpp
+xdg-mime default mpv.desktop video/3gpp2
+xdg-mime default mpv.desktop video/x-ms-asf
+xdg-mime default mpv.desktop video/x-ogm+ogg
+xdg-mime default mpv.desktop video/x-theora+ogg
+xdg-mime default mpv.desktop application/ogg
diff --git a/install/config/theme.sh b/install/config/theme.sh
new file mode 100644
index 0000000..1ccacfd
--- /dev/null
+++ b/install/config/theme.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
+gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
+gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
+
+# Set links for Nautilius action icons
+sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-previous-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg
+sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg
+sudo gtk-update-icon-cache /usr/share/icons/Yaru
+
+# Setup theme links
+if [ -d ~/.config/omasway/themes ]; then
+ rm -rf ~/.config/omasway/themes
+fi
+mkdir -p ~/.config/omasway/themes
+for f in ~/.local/share/omasway/themes/*; do ln -s "$f" ~/.config/omasway/themes/; done
+
+# Set initial theme
+mkdir -p ~/.config/omasway/current
+ln -snf ~/.config/omasway/themes/tokyo-night ~/.config/omasway/current/theme
+ln -snf $(find "$HOME/.config/omasway/current/theme/backgrounds/" -type f | head -n 1) "$HOME/.config/omasway/current/background"
+
+# Set specific app links for current theme
+ln -snf ~/.config/omasway/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
+
+mkdir -p ~/.config/btop/themes
+ln -snf ~/.config/omasway/current/theme/btop.theme ~/.config/btop/themes/current.theme
+
+mkdir -p ~/.config/mako
+ln -snf ~/.config/omasway/current/theme/mako.ini ~/.config/mako/config
\ No newline at end of file
diff --git a/install/config/xcompose.sh b/install/config/xcompose.sh
new file mode 100644
index 0000000..d255479
--- /dev/null
+++ b/install/config/xcompose.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Set XCompose
+if [ -f ~/.XCompose ]; then
+ rm ~/.XCompose
+fi
+
+tee ~/.XCompose >/dev/null < : "$OMASWAY_USER_NAME"
+ : "$OMASWAY_USER_EMAIL"
+EOF
diff --git a/install/desktop.sh b/install/desktop.sh
deleted file mode 100644
index 0fa2204..0000000
--- a/install/desktop.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-sudo apt update -y
-sudo apt install -y \
- brightnessctl pipewire wireplumber pavucontrol \
- fcitx5 fcitx5-config-qt \
- nautilus gnome-sushi gnome-calculator \
- evince imv ffmpeg
diff --git a/install/development.sh b/install/development.sh
deleted file mode 100644
index 93e76bf..0000000
--- a/install/development.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-sudo apt install -y \
- build-essential pkg-config autoconf bison clang rustc cargo \
- imagemagick \
- libmysqlclient-dev libpq-dev postgresql-client postgresql-client-common
\ No newline at end of file
diff --git a/install/docker.sh b/install/docker.sh
deleted file mode 100644
index beb54b3..0000000
--- a/install/docker.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add the official Docker repo
-if ! command -v "docker" &>/dev/null; then
- sudo install -m 0755 -d /etc/apt/keyrings
- sudo wget -qO /etc/apt/keyrings/docker.asc https://download.docker.com/linux/ubuntu/gpg
- sudo chmod a+r /etc/apt/keyrings/docker.asc
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
- sudo apt update
-
- # Install Docker engine and standard plugins
- sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
-
- # Give this user privileged Docker access
- sudo usermod -aG docker ${USER}
-
- # Limit log size to avoid running out of disk
- echo '{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"}}' | sudo tee /etc/docker/daemon.json
-fi
diff --git a/install/fastfetch.sh b/install/fastfetch.sh
deleted file mode 100644
index 26b598b..0000000
--- a/install/fastfetch.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-# Display system information in the terminal
-sudo add-apt-repository -y ppa:zhangsongcui3371/fastfetch
-sudo apt update -y
-sudo apt install -y fastfetch
-
diff --git a/install/firefox.sh b/install/firefox.sh
deleted file mode 100644
index c5fe0c3..0000000
--- a/install/firefox.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-# Install latest version of Firefox https://www.mozilla.org/firefox/
-if ! grep -q "^deb .*\bmozillateam/ppa\b" /etc/apt/sources.list /etc/apt/sources.list.d/* 2>/dev/null; then
- sudo add-apt-repository -y ppa:mozillateam/ppa
-fi
-
-if [ ! -f /etc/apt/preferences.d/mozilla ]; then
- sudo tee /etc/apt/preferences.d/mozilla > /dev/null </dev/null; then
+ # This computer runs on a battery
+ powerprofilesctl set balanced || true
+
+ # Enable battery monitoring timer for low battery notifications
+ systemctl --user enable --now omasway-battery-monitor.timer
+else
+ # This computer runs on power outlet
+ powerprofilesctl set performance || true
+fi
diff --git a/install/landing/cleanup.sh b/install/landing/cleanup.sh
new file mode 100644
index 0000000..e80e711
--- /dev/null
+++ b/install/landing/cleanup.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Update the package database
+sudo updatedb
+
+# Update and upgrade system packages
+sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y
+
+# Clean up unnecessary packages
+sudo apt autoremove -y && sudo apt clean
\ No newline at end of file
diff --git a/install/landing/network.sh b/install/landing/network.sh
new file mode 100644
index 0000000..4aaf82d
--- /dev/null
+++ b/install/landing/network.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Disable systemd-networkd services if present
+sudo systemctl disable systemd-networkd.service systemd-networkd-wait-online.service 2>/dev/null || true
+
+# Stop networking service if running
+sudo systemctl stop networking 2>/dev/null || true
+
+# Enable and start NetworkManager
+sudo systemctl enable NetworkManager
+sudo systemctl start NetworkManager
\ No newline at end of file
diff --git a/install/lazydocker.sh b/install/lazydocker.sh
deleted file mode 100644
index 6f62afb..0000000
--- a/install/lazydocker.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-cd /tmp
-LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
-curl -sLo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz"
-tar -xf lazydocker.tar.gz lazydocker
-sudo install lazydocker /usr/local/bin
-rm lazydocker.tar.gz lazydocker
-cd -
diff --git a/install/lazygit.sh b/install/lazygit.sh
deleted file mode 100644
index b7bd893..0000000
--- a/install/lazygit.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-cd /tmp
-LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | \grep -Po '"tag_name": *"v\K[^"]*')
-curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
-tar xf lazygit.tar.gz lazygit
-sudo install lazygit -D -t /usr/local/bin/
-rm lazygit.tar.gz lazygit
-cd -
-
diff --git a/install/login/alt-bootloaders.sh b/install/login/alt-bootloaders.sh
new file mode 100644
index 0000000..f0e85cf
--- /dev/null
+++ b/install/login/alt-bootloaders.sh
@@ -0,0 +1,111 @@
+#!/bin/bash
+
+# Check if Plymouth is available before proceeding
+if ! command -v plymouth >/dev/null 2>&1 && ! dpkg -l | grep -q plymouth; then
+ echo "Plymouth not installed, skipping bootloader configuration"
+ exit 0
+fi
+
+if [ -d "/boot/loader/entries" ]; then # systemd-boot
+ echo "Detected systemd-boot"
+
+ for entry in /boot/loader/entries/*.conf; do
+ if [ -f "$entry" ]; then
+ # Skip fallback entries
+ if [[ "$(basename "$entry")" == *"fallback"* ]]; then
+ echo "Skipped: $(basename "$entry") (fallback entry)"
+ continue
+ fi
+
+ # Skip if splash it already present for some reason
+ if ! grep -q "splash" "$entry"; then
+ sudo sed -i '/^options/ s/$/ splash quiet/' "$entry"
+ else
+ echo "Skipped: $(basename "$entry") (splash already present)"
+ fi
+ fi
+ done
+elif [ -f "/etc/default/grub" ]; then # GRUB (standard on Debian)
+ echo "Detected GRUB"
+
+ # Backup GRUB config before modifying
+ backup_timestamp=$(date +"%Y%m%d%H%M%S")
+ sudo cp /etc/default/grub "/etc/default/grub.bak.${backup_timestamp}"
+
+ # Check if splash is already in GRUB_CMDLINE_LINUX_DEFAULT
+ if ! grep -q "GRUB_CMDLINE_LINUX_DEFAULT.*splash" /etc/default/grub; then
+ # Get current GRUB_CMDLINE_LINUX_DEFAULT value
+ current_cmdline=$(grep "^GRUB_CMDLINE_LINUX_DEFAULT=" /etc/default/grub | cut -d'"' -f2)
+
+ # Add splash and quiet if not present
+ new_cmdline="$current_cmdline"
+ if [[ ! "$current_cmdline" =~ splash ]]; then
+ new_cmdline="$new_cmdline splash"
+ fi
+ if [[ ! "$current_cmdline" =~ quiet ]]; then
+ new_cmdline="$new_cmdline quiet"
+ fi
+
+ # Trim any leading/trailing spaces
+ new_cmdline=$(echo "$new_cmdline" | xargs)
+
+ sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=\".*\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$new_cmdline\"/" /etc/default/grub
+
+ # Debian standard GRUB configuration
+ if command -v update-grub >/dev/null 2>&1; then
+ # Use Debian's update-grub wrapper (preferred)
+ sudo update-grub
+ elif command -v grub-mkconfig >/dev/null 2>&1; then
+ # Fallback to direct grub-mkconfig
+ sudo grub-mkconfig -o /boot/grub/grub.cfg
+ else
+ echo "Error: No GRUB update command found"
+ echo "Please install grub2-common package"
+ exit 1
+ fi
+ else
+ echo "GRUB already configured with splash kernel parameters"
+ fi
+elif [ -d "/etc/cmdline.d" ]; then # UKI
+ echo "Detected a UKI setup"
+ # Relying on mkinitcpio to assemble a UKI
+ # https://wiki.archlinux.org/title/Unified_kernel_image
+ if ! grep -q splash /etc/cmdline.d/*.conf; then
+ # Need splash, create the omasway file
+ echo "splash" | sudo tee -a /etc/cmdline.d/omasway.conf
+ fi
+ if ! grep -q quiet /etc/cmdline.d/*.conf; then
+ # Need quiet, create or append the omasway file
+ echo "quiet" | sudo tee -a /etc/cmdline.d/omasway.conf
+ fi
+elif [ -f "/etc/kernel/cmdline" ]; then # UKI Alternate
+ # Alternate UKI kernel cmdline location
+ echo "Detected a UKI setup"
+
+ # Backup kernel cmdline config before modifying
+ backup_timestamp=$(date +"%Y%m%d%H%M%S")
+ sudo cp /etc/kernel/cmdline "/etc/kernel/cmdline.bak.${backup_timestamp}"
+
+ current_cmdline=$(cat /etc/kernel/cmdline)
+
+ # Add splash and quiet if not present
+ new_cmdline="$current_cmdline"
+ if [[ ! "$current_cmdline" =~ splash ]]; then
+ new_cmdline="$new_cmdline splash"
+ fi
+ if [[ ! "$current_cmdline" =~ quiet ]]; then
+ new_cmdline="$new_cmdline quiet"
+ fi
+
+ # Trim any leading/trailing spaces
+ new_cmdline=$(echo "$new_cmdline" | xargs)
+
+ # Write new file
+ echo $new_cmdline | sudo tee /etc/kernel/cmdline
+else
+ echo ""
+ echo " None of systemd-boot, GRUB, or UKI detected. Please manually add these kernel parameters:"
+ echo " - splash (to see the graphical splash screen)"
+ echo " - quiet (for silent boot)"
+ echo ""
+fi
\ No newline at end of file
diff --git a/install/login/autologin.sh b/install/login/autologin.sh
new file mode 100644
index 0000000..25c1882
--- /dev/null
+++ b/install/login/autologin.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# Temp Autologin Script for Omasway
+# Start Sway on first session
+echo '[ "$(tty)" = "/dev/tty1" ] && exec sway' >> ~/.bash_profile
+
+# Login directly as user
+sudo mkdir -p /etc/systemd/system/getty@tty1.service.d
+sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf >/dev/null </dev/null; then
+ echo "plymouth" | sudo tee -a /etc/initramfs-tools/modules
+ fi
+else
+ # Create the file if it doesn't exist
+ echo "plymouth" | sudo tee /etc/initramfs-tools/modules
+fi
+
+# Update initramfs
+sudo update-initramfs -u
+
+# Install and configure Omasway Plymouth theme
+THEME_SOURCE_DIR="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")")/default/plymouth"
+
+if [ -d "$THEME_SOURCE_DIR" ]; then
+ sudo mkdir -p /usr/share/plymouth/themes/omasway/
+ sudo cp -r "$THEME_SOURCE_DIR"/* /usr/share/plymouth/themes/omasway/
+
+ # Check if the theme is already set
+ current_theme=$(readlink /etc/alternatives/default.plymouth 2>/dev/null)
+ if [[ "$current_theme" != *"omasway"* ]]; then
+ # Install the theme as an alternative (Debian compatible)
+ if [ -f "/usr/share/plymouth/themes/omasway/omasway.plymouth" ]; then
+ sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/omasway/omasway.plymouth 100
+ sudo update-alternatives --set default.plymouth /usr/share/plymouth/themes/omasway/omasway.plymouth
+ else
+ echo "Warning: Plymouth theme file not found"
+ fi
+ fi
+else
+ echo "Warning: Plymouth theme source directory not found: $THEME_SOURCE_DIR"
+fi
+
+if [ ! -f /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf ]; then
+ # Make plymouth remain until graphical.target
+ sudo mkdir -p /etc/systemd/system/plymouth-quit.service.d
+ sudo tee /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf <<'EOF'
+[Unit]
+After=multi-user.target
+EOF
+fi
+
+# Mask plymouth-quit-wait.service only if not already masked
+if ! systemctl is-enabled plymouth-quit-wait.service | grep -q masked; then
+ sudo systemctl mask plymouth-quit-wait.service
+ sudo systemctl daemon-reload
+fi
+
+# Final initramfs update to ensure all Plymouth changes are applied
+sudo update-initramfs -u
\ No newline at end of file
diff --git a/install/mise.sh b/install/mise.sh
deleted file mode 100644
index 93c10c3..0000000
--- a/install/mise.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-# Install mise for managing multiple versions of languages. See https://mise.jdx.dev/
-sudo install -dm 755 /etc/apt/keyrings
-wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1>/dev/null
-echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
-sudo apt update
-sudo apt install -y mise
diff --git a/install/network.sh b/install/network.sh
deleted file mode 100644
index 7e4b54a..0000000
--- a/install/network.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-# Add network management tools
-sudo apt install -y \
- network-manager network-manager-gnome
\ No newline at end of file
diff --git a/install/optional/app-mainline-kernels.sh b/install/optional/app-mainline-kernels.sh
deleted file mode 100644
index bc47046..0000000
--- a/install/optional/app-mainline-kernels.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-sudo add-apt-repository -y ppa:cappelikan/ppa
-sudo apt update -y
-sudo apt install -y mainline
diff --git a/install/packages.sh b/install/packages.sh
new file mode 100644
index 0000000..57f85da
--- /dev/null
+++ b/install/packages.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+# Base Packages
+packages=(
+ acpi
+ acpid
+ alacritty
+ alsa-utils
+ apt-transport-https
+ autoconf
+ automake
+ autotiling
+ bat
+ bison
+ brightnessctl
+ bluez
+ blueman
+ btop
+ build-essential
+ ca-certificates
+ cargo
+ clang
+ cmake
+ curl
+ cups
+ cups-filters
+ dbus-user-session
+ evince
+ eza
+ fcitx5
+ fcitx5-config-qt
+ fd-find
+ ffmpeg
+ ffmpegthumbnailer
+ flatpak
+ fonts-font-awesome
+ fonts-noto
+ fonts-dejavu-core
+ fonts-noto-color-emoji
+ fonts-liberation2
+ fzf
+ git
+ gnome-calculator
+ gnome-keyring
+ gnome-sushi
+ gnome-themes-extra
+ gnupg
+ golang-go
+ gpg
+ grim
+ imagemagick
+ initramfs-tools
+ imv
+ jq
+ libnotify-bin
+ libnotify-dev
+ lsb-release
+ mako-notifier
+ mpv
+ mupdf
+ mupdf-tools
+ nautilus
+ network-manager
+ network-manager-gnome
+ python3-pip
+ pipewire
+ pipewire-pulse
+ pipx
+ pkg-config
+ playerctl
+ plocate
+ plymouth
+ plymouth-themes
+ polkitd
+ printer-driver-cups-pdf
+ rfkill
+ ripgrep
+ rustc
+ slurp
+ system-config-printer
+ sway
+ swaybg
+ swayidle
+ swaylock
+ tar
+ tlp
+ unzip
+ ufw
+ xdg-user-dirs
+ xdg-desktop-portal
+ xdg-desktop-portal-gtk
+ xdg-desktop-portal-wlr
+ xwayland
+ yaru-theme-gtk
+ yaru-theme-icon
+ waybar
+ wayland-protocols
+ wayland-utils
+ wget
+ wf-recorder
+ wireplumber
+ wl-clipboard
+ wofi
+ zoxide
+)
+
+# Install packages
+sudo apt install -y "${packages[@]}"
\ No newline at end of file
diff --git a/install/packaging/apps.sh b/install/packaging/apps.sh
new file mode 100644
index 0000000..8901389
--- /dev/null
+++ b/install/packaging/apps.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
+
+# Base Apps
+apps=(
+ "Chromium"
+ "LocalSend"
+ "LibreOffice"
+ "Spotify"
+ "Pinta"
+)
+
+# Install optional apps
+for app in "${apps[@]}"; do
+ if [[ -f "$HOME/.local/share/omasway/applications/install/${app,,}.sh" ]]; then
+ source "$HOME/.local/share/omasway/applications/install/${app,,}.sh"
+ else
+ echo "Warning: Installation script for $app not found."
+ fi
+done
\ No newline at end of file
diff --git a/install/packaging/fonts.sh b/install/packaging/fonts.sh
new file mode 100644
index 0000000..7245846
--- /dev/null
+++ b/install/packaging/fonts.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+mkdir -p ~/.local/share/fonts
+
+# Install Nerd Fonts
+cd /tmp
+wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaMono.zip
+unzip CascadiaMono.zip -d CascadiaFont
+cp CascadiaFont/*.ttf ~/.local/share/fonts
+rm -rf CascadiaMono.zip CascadiaFont
+
+fc-cache
+cd -
\ No newline at end of file
diff --git a/install/packaging/nvim.sh b/install/packaging/nvim.sh
new file mode 100644
index 0000000..1f5e5d3
--- /dev/null
+++ b/install/packaging/nvim.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Install Neovim
+source ~/.local/share/omasway/applications/install/neovim.sh
\ No newline at end of file
diff --git a/install/packaging/tools.sh b/install/packaging/tools.sh
new file mode 100644
index 0000000..f34a4cc
--- /dev/null
+++ b/install/packaging/tools.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+# Install Fastfetch - Manual installation for Debian compatibility
+cd /tmp
+wget -O fastfetch.deb "https://github.com/fastfetch-cli/fastfetch/releases/latest/download/fastfetch-linux-amd64.deb"
+sudo dpkg -i fastfetch.deb
+sudo apt-get install -f -y # Fix any missing dependencies
+rm fastfetch.deb
+cd -
+
+# Install mise for managing multiple versions of languages. See https://mise.jdx.dev/
+sudo install -dm 755 /etc/apt/keyrings
+wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1>/dev/null
+echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
+sudo apt update
+sudo apt install -y mise
+
+# Install Starship
+source ~/.local/share/omasway/applications/install/starship.sh
+
+# Install Docker
+source ~/.local/share/omasway/applications/install/docker.sh
+
+# Install GitHub CLI
+source ~/.local/share/omasway/applications/install/github-cli.sh
+
+# Install GitLab CLI
+source ~/.local/share/omasway/applications/install/gitlab-cli.sh
+
+# Install Terminal Text Effects
+pipx install terminaltexteffects
\ No newline at end of file
diff --git a/install/packaging/tuis.sh b/install/packaging/tuis.sh
new file mode 100644
index 0000000..d72ad31
--- /dev/null
+++ b/install/packaging/tuis.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# LazyDocker
+cd /tmp
+LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
+curl -sLo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz"
+tar -xf lazydocker.tar.gz lazydocker
+sudo install lazydocker /usr/local/bin
+rm lazydocker.tar.gz lazydocker
+cd -
+
+# LazyGit
+cd /tmp
+LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
+curl -sLo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
+tar -xf lazygit.tar.gz lazygit
+sudo install lazygit /usr/local/bin
+rm lazygit.tar.gz lazygit
+mkdir -p ~/.config/lazygit/
+touch ~/.config/lazygit/config.yml
+cd -
\ No newline at end of file
diff --git a/install/packaging/uwsm.sh b/install/packaging/uwsm.sh
new file mode 100644
index 0000000..741d1b3
--- /dev/null
+++ b/install/packaging/uwsm.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Install UWSM (Universal Wayland Session Manager)
+cd /tmp
+UWSM_VERSION="v0.23.3" # Tested version
+curl -sLo uwsm.tar.gz "https://github.com/Vladimir-csp/uwsm/archive/refs/tags/${UWSM_VERSION}.tar.gz"
+tar -xf uwsm.tar.gz "uwsm-${UWSM_VERSION#v}"
+mv "uwsm-${UWSM_VERSION#v}" uwsm
+sudo ./uwsm/build-deb.sh -i
+rm -rf uwsm.tar.gz uwsm
+cd -
\ No newline at end of file
diff --git a/install/packaging/webapps.sh b/install/packaging/webapps.sh
new file mode 100644
index 0000000..c0f94a6
--- /dev/null
+++ b/install/packaging/webapps.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+omasway-webapp-install "ChatGPT" https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png
+omasway-webapp-install "YouTube" https://youtube.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/youtube.png
+omasway-webapp-install "GitHub" https://github.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/github-light.png
\ No newline at end of file
diff --git a/install/preflight/guard.sh b/install/preflight/guard.sh
new file mode 100644
index 0000000..8a1dc37
--- /dev/null
+++ b/install/preflight/guard.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+#!/bin/bash
+
+abort() {
+ echo -e "\e[31mOmasway install requires: $1\e[0m"
+ echo
+ gum confirm "Proceed anyway on your own accord and without assistance?" || exit 1
+}
+
+# Must be a valid OS
+[[ -f /etc/os-release ]] || abort "/etc/os-release"
+
+. /etc/os-release
+
+# Check if running on Debian 13 (Trixie)
+[[ "$ID" != "debian" ]] && abort "Debian 13 (Trixie)"
+[[ "$VERSION_ID" != "13" ]] && abort "Debian 13 (Trixie)"
+
+# Must be x86 only to fully work
+ARCH=$(uname -m)
+if [[ "$ARCH" != "x86_64" ]] && [[ "$ARCH" != "i686" ]]; then
+ abort "x86_64 CPU"
+fi
+
+# Must not have a desktop environment installed
+[[ -n "$XDG_CURRENT_DESKTOP" ]] && abort "No desktop environment should be installed"
+
+# Cleared all guards
+echo "Guards: OK"
diff --git a/install/3-identification.sh b/install/preflight/identification.sh
similarity index 73%
rename from install/3-identification.sh
rename to install/preflight/identification.sh
index d69a778..e1c2f67 100644
--- a/install/3-identification.sh
+++ b/install/preflight/identification.sh
@@ -1,5 +1,5 @@
-echo -e "\nEnter identification for git and autocomplete..."
+#!/bin/bash
+
SYSTEM_NAME=$(getent passwd "$USER" | cut -d ':' -f 5 | cut -d ',' -f 1)
export OMASWAY_USER_NAME=$(gum input --placeholder "Enter full name" --value "$SYSTEM_NAME" --prompt "Name> ")
-export OMASWAY_USER_EMAIL=$(gum input --placeholder "Enter email address" --prompt "Email> ")
-
+export OMASWAY_USER_EMAIL=$(gum input --placeholder "Enter email address" --prompt "Email> ")
\ No newline at end of file
diff --git a/install/preflight/migrations.sh b/install/preflight/migrations.sh
new file mode 100644
index 0000000..ec9318f
--- /dev/null
+++ b/install/preflight/migrations.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+omasway_migrations_state_path=~/.local/state/omasway/migrations
+mkdir -p $omasway_migrations_state_path
+
+for file in ~/.local/share/omasway/migrations/*.sh; do
+ touch "$omasway_migrations_state_path/$(basename "$file")"
+done
diff --git a/install/1-gum.sh b/install/preflight/presentation.sh
similarity index 57%
rename from install/1-gum.sh
rename to install/preflight/presentation.sh
index 7635e8d..60e4144 100644
--- a/install/1-gum.sh
+++ b/install/preflight/presentation.sh
@@ -1,9 +1,18 @@
+#!/bin/bash
+
+export PATH="$PATH:$HOME/.local/bin"
+
# Gum is used for the Omasway commands for tailoring Omasway after the initial install
if ! command -v gum &> /dev/null; then
cd /tmp
- GUM_VERSION="0.14.3" # Use known good version
+ GUM_VERSION="0.16.2" # Tested Version
wget -qO gum.deb "https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_amd64.deb"
sudo apt-get install -y --allow-downgrades ./gum.deb
rm gum.deb
cd -
fi
+
+# Fzf is used for the Omasway commands for tailoring Omasway after the initial install
+if ! command -v fzf &> /dev/null; then
+ sudo apt install -y fzf
+fi
\ No newline at end of file
diff --git a/install/preflight/timezone.sh b/install/preflight/timezone.sh
new file mode 100644
index 0000000..4014278
--- /dev/null
+++ b/install/preflight/timezone.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+echo -e "\e[31mSelect your timezone:\e[0m"
+timezone=$(timedatectl list-timezones | fzf --prompt="Timezone > " --height=40% --border)
+if [ -n "$timezone" ]; then
+ sudo timedatectl set-timezone "$timezone"
+ echo -e "\e[32mTimezone set to: $timezone\e[0m"
+else
+ echo -e "\e[31mNo timezone selected.\e[0m"
+fi
\ No newline at end of file
diff --git a/install/preflight/trap-errors.sh b/install/preflight/trap-errors.sh
new file mode 100755
index 0000000..89464f9
--- /dev/null
+++ b/install/preflight/trap-errors.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Give people a chance to retry running the installation
+catch_errors() {
+ echo -e "\n\e[31mOmasway installation failed!\e[0m"
+ echo
+ echo "This command halted with exit code $?:"
+ echo "$BASH_COMMAND"
+ echo
+
+ if command -v gum >/dev/null && gum confirm "Retry installation?"; then
+ bash ~/.local/share/omasway/install.sh
+ else
+ echo "You can retry later by running: bash ~/.local/share/omasway/install.sh"
+ fi
+}
+
+trap catch_errors ERR
diff --git a/install/theme.sh b/install/theme.sh
deleted file mode 100644
index 3526302..0000000
--- a/install/theme.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-# Prefer dark mode everything
-gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
-gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
-
-# Setup theme links
-mkdir -p ~/.config/omasway/themes
-for f in ~/.local/share/omasway/themes/*; do ln -s "$f" ~/.config/omasway/themes/; done
-
-# Set initial theme
-mkdir -p ~/.config/omasway/current
-ln -snf ~/.config/omasway/themes/$OMASWAY_FIRST_RUN_THEME ~/.config/omasway/current/theme
-source ~/.local/share/omasway/themes/$OMASWAY_FIRST_RUN_THEME/backgrounds.sh
-ln -snf ~/.config/omasway/backgrounds/$OMASWAY_FIRST_RUN_THEME ~/.config/omasway/current/backgrounds
-ln -snf $(find "$HOME/.config/omasway/current/backgrounds/" -type f | head -n 1) "$HOME/.config/omasway/current/background"
-
-# Set specific app links for current theme
-ln -snf ~/.config/omasway/current/theme/wofi.css ~/.config/wofi/style.css
-ln -snf ~/.config/omasway/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
-mkdir -p ~/.config/btop/themes
-ln -snf ~/.config/omasway/current/theme/btop.theme ~/.config/btop/themes/current.theme
-
-# Touch alacritty config to pickup the changed theme
-touch "$HOME/.config/alacritty/alacritty.toml"
diff --git a/install/xtras.sh b/install/xtras.sh
deleted file mode 100644
index 90e91fd..0000000
--- a/install/xtras.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-# Optional Apps
-if [[ -v OMASWAY_FIRST_RUN_OPTIONAL_APPS ]]; then
- apps=$OMASWAY_FIRST_RUN_OPTIONAL_APPS
-
- if [[ -n "$apps" ]]; then
- for app in $apps; do
- source "$OMASWAY_PATH/install/optional/app-${app,,}.sh"
- done
- fi
-fi
-
-# Applications
-for script in ~/.local/share/omasway/applications/*.sh; do source $script; done
-
-# Remove Btop entry for one that runs in alacritty
-sudo rm -rf /usr/share/applications/btop.desktop
-
-# App doesn't do anything when started from the app grid
-sudo rm -rf /usr/share/applications/org.flameshot.Flameshot.desktop
-
-# Remove the ImageMagick icon
-sudo rm -rf /usr/share/applications/display-im6.q16.desktop
-
-# Replacing this with btop
-sudo rm -rf /usr/share/applications/org.gnome.SystemMonitor.desktop
-
-# We added our own meant for Alacritty
-sudo rm -rf /usr/local/share/applications/nvim.desktop
-sudo rm -rf /usr/local/share/applications/vim.desktop
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000..5f2d61f
Binary files /dev/null and b/logo.png differ
diff --git a/ascii.sh b/logo.txt
old mode 100755
new mode 100644
similarity index 65%
rename from ascii.sh
rename to logo.txt
index aa1a3fe..1387363
--- a/ascii.sh
+++ b/logo.txt
@@ -1,21 +1,8 @@
-ascii_art='
- ██████╗ ███╗ ███╗ █████╗ ███████╗██╗ ██╗ █████╗ ██╗ ██╗
-██╔═══██╗████╗ ████║██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝
-██║ ██║██╔████╔██║███████║███████╗██║ █╗ ██║███████║ ╚████╔╝
-██║ ██║██║╚██╔╝██║██╔══██║╚════██║██║███╗██║██╔══██║ ╚██╔╝
-╚██████╔╝██║ ╚═╝ ██║██║ ██║███████║╚███╔███╔╝██║ ██║ ██║
- ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝
-'
-
-# ANSI escape sequence per colore RGB #1b4a49
-color='\033[38;2;27;74;73m'
-reset='\033[0m'
-# Stampa riga per riga con colore uniforme
-IFS=$'\n' read -rd '' -a lines <<<"$ascii_art"
-for line in "${lines[@]}"; do
- echo -e "${color}${line}"
-done
-# Reset colore
-echo -e "$reset"
+ ██████╗ ███╗ ███╗ █████╗ ███████╗██╗ ██╗ █████╗ ██╗ ██╗
+██╔═══██╗████╗ ████║██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝
+██║ ██║██╔████╔██║███████║███████╗██║ █╗ ██║███████║ ╚████╔╝
+██║ ██║██║╚██╔╝██║██╔══██║╚════██║██║███╗██║██╔══██║ ╚██╔╝
+╚██████╔╝██║ ╚═╝ ██║██║ ██║███████║╚███╔███╔╝██║ ██║ ██║
+ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝
diff --git a/config/lazygit/config.yml b/migrations/.gitkeep
similarity index 100%
rename from config/lazygit/config.yml
rename to migrations/.gitkeep
diff --git a/themes/catppuccin-latte/alacritty.toml b/themes/catppuccin-latte/alacritty.toml
new file mode 100644
index 0000000..3fcf61e
--- /dev/null
+++ b/themes/catppuccin-latte/alacritty.toml
@@ -0,0 +1,67 @@
+# https://raw.githubusercontent.com/catppuccin/alacritty/main/catppuccin-latte.toml
+
+[colors.primary]
+background = "#eff1f5"
+foreground = "#4c4f69"
+dim_foreground = "#8c8fa1"
+bright_foreground = "#4c4f69"
+
+[colors.cursor]
+text = "#eff1f5"
+cursor = "#dc8a78"
+
+[colors.vi_mode_cursor]
+text = "#eff1f5"
+cursor = "#7287fd"
+
+[colors.search.matches]
+foreground = "#eff1f5"
+background = "#6c6f85"
+
+[colors.search.focused_match]
+foreground = "#eff1f5"
+background = "#40a02b"
+
+[colors.footer_bar]
+foreground = "#eff1f5"
+background = "#6c6f85"
+
+[colors.hints.start]
+foreground = "#eff1f5"
+background = "#df8e1d"
+
+[colors.hints.end]
+foreground = "#eff1f5"
+background = "#6c6f85"
+
+[colors.selection]
+text = "#eff1f5"
+background = "#dc8a78"
+
+[colors.normal]
+black = "#bcc0cc"
+red = "#d20f39"
+green = "#40a02b"
+yellow = "#df8e1d"
+blue = "#1e66f5"
+magenta = "#ea76cb"
+cyan = "#179299"
+white = "#5c5f77"
+
+[colors.bright]
+black = "#acb0be"
+red = "#d20f39"
+green = "#40a02b"
+yellow = "#df8e1d"
+blue = "#1e66f5"
+magenta = "#ea76cb"
+cyan = "#179299"
+white = "#6c6f85"
+
+[[colors.indexed_colors]]
+index = 16
+color = "#fe640b"
+
+[[colors.indexed_colors]]
+index = 17
+color = "#dc8a78"
diff --git a/themes/catppuccin-latte/backgrounds/1-catppuccin-latte.png b/themes/catppuccin-latte/backgrounds/1-catppuccin-latte.png
new file mode 100644
index 0000000..ee0cd94
Binary files /dev/null and b/themes/catppuccin-latte/backgrounds/1-catppuccin-latte.png differ
diff --git a/themes/catppuccin-latte/btop.theme b/themes/catppuccin-latte/btop.theme
new file mode 100644
index 0000000..87ed181
--- /dev/null
+++ b/themes/catppuccin-latte/btop.theme
@@ -0,0 +1,84 @@
+# https://github.com/catppuccin/btop/blob/main/themes/catppuccin_latte.theme
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#eff1f5"
+
+# Main text color
+theme[main_fg]="#4c4f69"
+
+# Title color for boxes
+theme[title]="#4c4f69"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#1e66f5"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#bcc0cc"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#1e66f5"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#8c8fa1"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#dc8a78"
+
+# Background color of the percentage meters
+theme[meter_bg]="#bcc0cc"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#dc8a78"
+
+# CPU, Memory, Network, Proc box outline colors
+theme[cpu_box]="#8839ef" #Mauve
+theme[mem_box]="#40a02b" #Green
+theme[net_box]="#e64553" #Maroon
+theme[proc_box]="#1e66f5" #Blue
+
+# Box divider line and small boxes line color
+theme[div_line]="#9ca0b0"
+
+# Temperature graph color (Green -> Yellow -> Red)
+theme[temp_start]="#40a02b"
+theme[temp_mid]="#df8e1d"
+theme[temp_end]="#d20f39"
+
+# CPU graph colors (Teal -> Lavender)
+theme[cpu_start]="#179299"
+theme[cpu_mid]="#209fb5"
+theme[cpu_end]="#7287fd"
+
+# Mem/Disk free meter (Mauve -> Lavender -> Blue)
+theme[free_start]="#8839ef"
+theme[free_mid]="#7287fd"
+theme[free_end]="#1e66f5"
+
+# Mem/Disk cached meter (Sapphire -> Lavender)
+theme[cached_start]="#209fb5"
+theme[cached_mid]="#1e66f5"
+theme[cached_end]="#7287fd"
+
+# Mem/Disk available meter (Peach -> Red)
+theme[available_start]="#fe640b"
+theme[available_mid]="#e64553"
+theme[available_end]="#d20f39"
+
+# Mem/Disk used meter (Green -> Sky)
+theme[used_start]="#40a02b"
+theme[used_mid]="#179299"
+theme[used_end]="#04a5e5"
+
+# Download graph colors (Peach -> Red)
+theme[download_start]="#fe640b"
+theme[download_mid]="#e64553"
+theme[download_end]="#d20f39"
+
+# Upload graph colors (Green -> Sky)
+theme[upload_start]="#40a02b"
+theme[upload_mid]="#179299"
+theme[upload_end]="#04a5e5"
+
+# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
+theme[process_start]="#209fb5"
+theme[process_mid]="#7287fd"
+theme[process_end]="#8839ef"
diff --git a/themes/catppuccin-latte/chromium.theme b/themes/catppuccin-latte/chromium.theme
new file mode 100644
index 0000000..8bd675b
--- /dev/null
+++ b/themes/catppuccin-latte/chromium.theme
@@ -0,0 +1 @@
+239,241,245
diff --git a/themes/catppuccin-latte/gtk.theme b/themes/catppuccin-latte/gtk.theme
new file mode 100644
index 0000000..f5ac3db
--- /dev/null
+++ b/themes/catppuccin-latte/gtk.theme
@@ -0,0 +1 @@
+blue
\ No newline at end of file
diff --git a/themes/catppuccin-latte/icons.theme b/themes/catppuccin-latte/icons.theme
new file mode 100644
index 0000000..6ce2f14
--- /dev/null
+++ b/themes/catppuccin-latte/icons.theme
@@ -0,0 +1 @@
+Yaru-blue
diff --git a/themes/catppuccin-latte/light.mode b/themes/catppuccin-latte/light.mode
new file mode 100644
index 0000000..66bb2d0
--- /dev/null
+++ b/themes/catppuccin-latte/light.mode
@@ -0,0 +1 @@
+# This will set "prefer-light" and use "Adwaita" as the theme
diff --git a/themes/catppuccin-latte/mako.ini b/themes/catppuccin-latte/mako.ini
new file mode 100644
index 0000000..6461da0
--- /dev/null
+++ b/themes/catppuccin-latte/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#4c4f69
+border-color=#1e66f5
+background-color=#eff1f5
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/catppuccin-latte/neovim.lua b/themes/catppuccin-latte/neovim.lua
new file mode 100644
index 0000000..07a53cf
--- /dev/null
+++ b/themes/catppuccin-latte/neovim.lua
@@ -0,0 +1,19 @@
+return {
+ {
+ "catppuccin/nvim",
+ name = "catppuccin",
+ priority = 1000,
+ config = function()
+ require("catppuccin").setup({
+ flavour = "latte", -- other options: "mocha", "frappe", "macchiato"
+ })
+ vim.cmd.colorscheme("catppuccin-latte")
+ end,
+ },
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "catppuccin-latte",
+ },
+ },
+}
diff --git a/themes/catppuccin-latte/swayosd.css b/themes/catppuccin-latte/swayosd.css
new file mode 100644
index 0000000..c5f23aa
--- /dev/null
+++ b/themes/catppuccin-latte/swayosd.css
@@ -0,0 +1,5 @@
+@define-color background-color #eff1f5;
+@define-color border-color #1e66f5;
+@define-color label #4c4f69;
+@define-color image #4c4f69;
+@define-color progress #4c4f69;
diff --git a/themes/catppuccin-latte/vscode.theme b/themes/catppuccin-latte/vscode.theme
new file mode 100644
index 0000000..5820f04
--- /dev/null
+++ b/themes/catppuccin-latte/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Catppuccin Latte"
+vscode[extension]="Catppuccin.catppuccin-vsc"
\ No newline at end of file
diff --git a/themes/catppuccin-latte/waybar.css b/themes/catppuccin-latte/waybar.css
new file mode 100644
index 0000000..5918ec6
--- /dev/null
+++ b/themes/catppuccin-latte/waybar.css
@@ -0,0 +1,4 @@
+@define-color foreground #4c4f69; /* text */
+@define-color background #eff1f5; /* base */
+@define-color border #dce0e8; /* crust */
+@define-color accent #1e66f5; /* blue */
diff --git a/themes/catppuccin-latte/wofi.css b/themes/catppuccin-latte/wofi.css
new file mode 100644
index 0000000..864570c
--- /dev/null
+++ b/themes/catppuccin-latte/wofi.css
@@ -0,0 +1,5 @@
+@define-color selected-text #1e66f5;
+@define-color text #4c4f69;
+@define-color base #eff1f5;
+@define-color base-rgba rgba(239, 241, 245, 0.95);
+@define-color border #dce0e8;
diff --git a/themes/catppuccin/backgrounds.sh b/themes/catppuccin/backgrounds.sh
deleted file mode 100644
index 462717e..0000000
--- a/themes/catppuccin/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/catppuccin"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/catppuccin/background.png" "catppuccin/1-catppuccin.png"
diff --git a/themes/catppuccin/backgrounds/1-catppuccin.png b/themes/catppuccin/backgrounds/1-catppuccin.png
new file mode 100644
index 0000000..5fbcebc
Binary files /dev/null and b/themes/catppuccin/backgrounds/1-catppuccin.png differ
diff --git a/themes/catppuccin/backgrounds/2-cat-waves-mocha.png b/themes/catppuccin/backgrounds/2-cat-waves-mocha.png
new file mode 100644
index 0000000..a0b5325
Binary files /dev/null and b/themes/catppuccin/backgrounds/2-cat-waves-mocha.png differ
diff --git a/themes/catppuccin/backgrounds/3-cat-blue-eye-mocha.png b/themes/catppuccin/backgrounds/3-cat-blue-eye-mocha.png
new file mode 100644
index 0000000..30b5963
Binary files /dev/null and b/themes/catppuccin/backgrounds/3-cat-blue-eye-mocha.png differ
diff --git a/themes/catppuccin/chromium.theme b/themes/catppuccin/chromium.theme
new file mode 100644
index 0000000..1d96599
--- /dev/null
+++ b/themes/catppuccin/chromium.theme
@@ -0,0 +1 @@
+24,24,36
diff --git a/themes/catppuccin/gtk.theme b/themes/catppuccin/gtk.theme
new file mode 100644
index 0000000..fcf879f
--- /dev/null
+++ b/themes/catppuccin/gtk.theme
@@ -0,0 +1 @@
+purple
\ No newline at end of file
diff --git a/themes/catppuccin/icons.theme b/themes/catppuccin/icons.theme
new file mode 100644
index 0000000..24a4551
--- /dev/null
+++ b/themes/catppuccin/icons.theme
@@ -0,0 +1 @@
+Yaru-purple
diff --git a/themes/catppuccin/mako.ini b/themes/catppuccin/mako.ini
new file mode 100644
index 0000000..dc5f9c6
--- /dev/null
+++ b/themes/catppuccin/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#cad3f5
+border-color=#c6d0f5
+background-color=#24273a
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/catppuccin/swayosd.css b/themes/catppuccin/swayosd.css
new file mode 100644
index 0000000..0ff80d2
--- /dev/null
+++ b/themes/catppuccin/swayosd.css
@@ -0,0 +1,5 @@
+@define-color background-color #24273a;
+@define-color border-color #c6d0f5;
+@define-color label #cad3f5;
+@define-color image #cad3f5;
+@define-color progress #cad3f5;
diff --git a/themes/catppuccin/vscode.theme b/themes/catppuccin/vscode.theme
new file mode 100644
index 0000000..eacd1bf
--- /dev/null
+++ b/themes/catppuccin/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Catppuccin Macchiato"
+vscode[extension]="Catppuccin.catppuccin-vsc"
\ No newline at end of file
diff --git a/themes/catppuccin/waybar.css b/themes/catppuccin/waybar.css
index 20d1a8b..bf35a40 100644
--- a/themes/catppuccin/waybar.css
+++ b/themes/catppuccin/waybar.css
@@ -1,5 +1,2 @@
-* {
- color: #cdd6f4;
- background-color: #181824;
-}
-
+@define-color foreground #cdd6f4;
+@define-color background #181824;
diff --git a/themes/catppuccin/wofi.css b/themes/catppuccin/wofi.css
index 7dd3bb5..161833e 100644
--- a/themes/catppuccin/wofi.css
+++ b/themes/catppuccin/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #8caaee;
-@define-color text #c6d0f5;
-@define-color base #24273a;
-@define-color border #c6d0f5;
+@define-color selected-text #8caaee;
+@define-color text #c6d0f5;
+@define-color base #24273a;
+@define-color base-rgba rgba(36, 39, 58, 0.95);
+@define-color border #c6d0f5;
diff --git a/themes/everforest/backgrounds.sh b/themes/everforest/backgrounds.sh
deleted file mode 100644
index 7faad21..0000000
--- a/themes/everforest/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/everforest"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/everforest/background.jpg" "everforest/1-everforest.jpg"
diff --git a/themes/everforest/backgrounds/1-everforest.jpg b/themes/everforest/backgrounds/1-everforest.jpg
new file mode 100644
index 0000000..6d75259
Binary files /dev/null and b/themes/everforest/backgrounds/1-everforest.jpg differ
diff --git a/themes/everforest/chromium.theme b/themes/everforest/chromium.theme
new file mode 100644
index 0000000..381b5ba
--- /dev/null
+++ b/themes/everforest/chromium.theme
@@ -0,0 +1 @@
+45,53,59
diff --git a/themes/everforest/gtk.theme b/themes/everforest/gtk.theme
new file mode 100644
index 0000000..2004c03
--- /dev/null
+++ b/themes/everforest/gtk.theme
@@ -0,0 +1 @@
+sage
\ No newline at end of file
diff --git a/themes/everforest/icons.theme b/themes/everforest/icons.theme
new file mode 100644
index 0000000..140e422
--- /dev/null
+++ b/themes/everforest/icons.theme
@@ -0,0 +1 @@
+Yaru-sage
diff --git a/themes/everforest/mako.ini b/themes/everforest/mako.ini
new file mode 100644
index 0000000..05b50e8
--- /dev/null
+++ b/themes/everforest/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#d3c6aa
+border-color=#d3c6aa
+background-color=#2d353b
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/everforest/swayosd.css b/themes/everforest/swayosd.css
new file mode 100644
index 0000000..f0bff40
--- /dev/null
+++ b/themes/everforest/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #2d353b;
+@define-color border-color #d3c6aa;
+@define-color label #d3c6aa;
+@define-color image #d3c6aa;
+@define-color progress #d3c6aa;
+
diff --git a/themes/everforest/vscode.theme b/themes/everforest/vscode.theme
new file mode 100644
index 0000000..5ead15b
--- /dev/null
+++ b/themes/everforest/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Everforest Dark"
+vscode[extension]="sainnhe.everforest"
\ No newline at end of file
diff --git a/themes/everforest/waybar.css b/themes/everforest/waybar.css
index dcf249a..e8249f7 100644
--- a/themes/everforest/waybar.css
+++ b/themes/everforest/waybar.css
@@ -1,5 +1,2 @@
-
-* {
- color: #d3c6aa;
- background-color: #2d353b;
-}
+@define-color foreground #d3c6aa;
+@define-color background #2d353b;
diff --git a/themes/everforest/wofi.css b/themes/everforest/wofi.css
index e4ea073..f42acb8 100644
--- a/themes/everforest/wofi.css
+++ b/themes/everforest/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #dbbc7f;
-@define-color text #d3c6aa;
-@define-color base #2d353b;
-@define-color border #d3c6aa;
+@define-color selected-text #dbbc7f;
+@define-color text #d3c6aa;
+@define-color base #2d353b;
+@define-color base-rgba rgba(45, 53, 59, 0.95);
+@define-color border #d3c6aa;
diff --git a/themes/gruvbox/backgrounds.sh b/themes/gruvbox/backgrounds.sh
deleted file mode 100644
index 27162ce..0000000
--- a/themes/gruvbox/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/gruvbox"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/gruvbox/background.png" "gruvbox/1-grubox.png"
diff --git a/themes/gruvbox/backgrounds/1-grubox.jpg b/themes/gruvbox/backgrounds/1-grubox.jpg
new file mode 100644
index 0000000..fd31869
Binary files /dev/null and b/themes/gruvbox/backgrounds/1-grubox.jpg differ
diff --git a/themes/gruvbox/chromium.theme b/themes/gruvbox/chromium.theme
new file mode 100644
index 0000000..40520c9
--- /dev/null
+++ b/themes/gruvbox/chromium.theme
@@ -0,0 +1 @@
+40,40,40
diff --git a/themes/gruvbox/gtk.theme b/themes/gruvbox/gtk.theme
new file mode 100644
index 0000000..d765af2
--- /dev/null
+++ b/themes/gruvbox/gtk.theme
@@ -0,0 +1 @@
+olive
\ No newline at end of file
diff --git a/themes/gruvbox/icons.theme b/themes/gruvbox/icons.theme
new file mode 100644
index 0000000..7bb20fc
--- /dev/null
+++ b/themes/gruvbox/icons.theme
@@ -0,0 +1 @@
+Yaru-olive
diff --git a/themes/gruvbox/mako.ini b/themes/gruvbox/mako.ini
new file mode 100644
index 0000000..669c6f5
--- /dev/null
+++ b/themes/gruvbox/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#d4be98
+border-color=#a89984
+background-color=#282828
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/gruvbox/swayosd.css b/themes/gruvbox/swayosd.css
new file mode 100644
index 0000000..16240ae
--- /dev/null
+++ b/themes/gruvbox/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #282828;
+@define-color border-color #a89984;
+@define-color label #ebdbb2;
+@define-color image #ebdbb2;
+@define-color progress #ebdbb2;
+
diff --git a/themes/gruvbox/vscode.theme b/themes/gruvbox/vscode.theme
new file mode 100644
index 0000000..dc00b29
--- /dev/null
+++ b/themes/gruvbox/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Gruvbox Dark Medium"
+vscode[extension]="jdinhlife.gruvbox"
\ No newline at end of file
diff --git a/themes/gruvbox/waybar.css b/themes/gruvbox/waybar.css
index be14dae..598de57 100644
--- a/themes/gruvbox/waybar.css
+++ b/themes/gruvbox/waybar.css
@@ -1,5 +1,2 @@
-
-* {
- color: #d4be98;
- background-color: #282828;
-}
+@define-color foreground #d4be98;
+@define-color background #282828;
diff --git a/themes/gruvbox/wofi.css b/themes/gruvbox/wofi.css
index 42d68ef..9fb9ff7 100644
--- a/themes/gruvbox/wofi.css
+++ b/themes/gruvbox/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #fabd2f;
-@define-color text #ebdbb2;
-@define-color base #282828;
-@define-color border #ebdbb2;
+@define-color selected-text #fabd2f;
+@define-color text #ebdbb2;
+@define-color base #282828;
+@define-color base-rgba rgba(40, 40, 40, 0.95);
+@define-color border #ebdbb2;
diff --git a/themes/kanagawa/backgrounds.sh b/themes/kanagawa/backgrounds.sh
deleted file mode 100644
index ab73d11..0000000
--- a/themes/kanagawa/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/kanagawa"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/kanagawa/background.jpg" "kanagawa/1-kanagawa.jpg"
diff --git a/themes/kanagawa/backgrounds/1-kanagawa.jpg b/themes/kanagawa/backgrounds/1-kanagawa.jpg
new file mode 100644
index 0000000..197c48d
Binary files /dev/null and b/themes/kanagawa/backgrounds/1-kanagawa.jpg differ
diff --git a/themes/kanagawa/chromium.theme b/themes/kanagawa/chromium.theme
new file mode 100644
index 0000000..ca40205
--- /dev/null
+++ b/themes/kanagawa/chromium.theme
@@ -0,0 +1 @@
+31,31,40
diff --git a/themes/kanagawa/gtk.theme b/themes/kanagawa/gtk.theme
new file mode 100644
index 0000000..fcf879f
--- /dev/null
+++ b/themes/kanagawa/gtk.theme
@@ -0,0 +1 @@
+purple
\ No newline at end of file
diff --git a/themes/kanagawa/icons.theme b/themes/kanagawa/icons.theme
new file mode 100644
index 0000000..6ce2f14
--- /dev/null
+++ b/themes/kanagawa/icons.theme
@@ -0,0 +1 @@
+Yaru-blue
diff --git a/themes/kanagawa/mako.ini b/themes/kanagawa/mako.ini
new file mode 100644
index 0000000..fe944d8
--- /dev/null
+++ b/themes/kanagawa/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#dcd7ba
+border-color=#dcd7ba
+background-color=#1f1f28
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/kanagawa/swayosd.css b/themes/kanagawa/swayosd.css
new file mode 100644
index 0000000..1eb5c85
--- /dev/null
+++ b/themes/kanagawa/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #1f1f28;
+@define-color border-color #dcd7ba;
+@define-color label #dcd7ba;
+@define-color image #dcd7ba;
+@define-color progress #dcd7ba;
+
diff --git a/themes/kanagawa/vscode.theme b/themes/kanagawa/vscode.theme
new file mode 100644
index 0000000..3bb2725
--- /dev/null
+++ b/themes/kanagawa/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Kanagawa"
+vscode[extension]="qufiwefefwoyn.kanagawa"
\ No newline at end of file
diff --git a/themes/kanagawa/waybar.css b/themes/kanagawa/waybar.css
index 46755eb..029cc07 100644
--- a/themes/kanagawa/waybar.css
+++ b/themes/kanagawa/waybar.css
@@ -1,5 +1,2 @@
-
-* {
- color: #dcd7ba;
- background-color: #1f1f28;
-}
+@define-color foreground #dcd7ba;
+@define-color background #1f1f28;
diff --git a/themes/kanagawa/wofi.css b/themes/kanagawa/wofi.css
index 8c45967..fd6c111 100644
--- a/themes/kanagawa/wofi.css
+++ b/themes/kanagawa/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #dca561;
-@define-color text #dcd7ba;
-@define-color base #1f1f28;
-@define-color border #dcd7ba;
+@define-color selected-text #dca561;
+@define-color text #dcd7ba;
+@define-color base #1f1f28;
+@define-color base-rgba rgba(31, 31, 40, 0.95);
+@define-color border #dcd7ba;
diff --git a/themes/matte-black/alacritty.toml b/themes/matte-black/alacritty.toml
new file mode 100644
index 0000000..2082409
--- /dev/null
+++ b/themes/matte-black/alacritty.toml
@@ -0,0 +1,53 @@
+# ────────────────────────────────────────────────────────────
+# Omarchy Matte Black Theme for Alacritty
+# By tahayvr
+# https://github.com/tahayvr
+# ────────────────────────────────────────────────────────────
+
+[window]
+# window padding {px}
+padding.x = 12
+padding.y = 12
+
+[font]
+size = 12.0
+
+
+
+[colors]
+[colors.primary]
+background = "#121212"
+foreground = "#bebebe"
+dim_foreground = "#8a8a8d"
+
+[colors.cursor]
+text = "#121212"
+cursor = "#eaeaea"
+
+[colors.vi_mode_cursor]
+text = "#121212"
+cursor = "#eaeaea"
+
+[colors.selection]
+text = "CellForeground"
+background = "#333333"
+
+[colors.normal]
+black = "#333333"
+red = "#D35F5F"
+green = "#FFC107"
+yellow = "#b91c1c"
+blue = "#e68e0d"
+magenta = "#D35F5F"
+cyan = "#bebebe"
+white = "#bebebe"
+
+[colors.bright]
+black = "#8a8a8d"
+red = "#B91C1C"
+green = "#FFC107"
+yellow = "#b90a0a"
+blue = "#f59e0b"
+magenta = "#B91C1C"
+cyan = "#eaeaea"
+white = "#ffffff"
\ No newline at end of file
diff --git a/themes/matte-black/backgrounds/0-ship-at-sea.jpg b/themes/matte-black/backgrounds/0-ship-at-sea.jpg
new file mode 100644
index 0000000..4375ee2
Binary files /dev/null and b/themes/matte-black/backgrounds/0-ship-at-sea.jpg differ
diff --git a/themes/matte-black/backgrounds/1-matte-black.jpg b/themes/matte-black/backgrounds/1-matte-black.jpg
new file mode 100644
index 0000000..2afb1bc
Binary files /dev/null and b/themes/matte-black/backgrounds/1-matte-black.jpg differ
diff --git a/themes/matte-black/btop.theme b/themes/matte-black/btop.theme
new file mode 100644
index 0000000..c8cdcd0
--- /dev/null
+++ b/themes/matte-black/btop.theme
@@ -0,0 +1,92 @@
+# ────────────────────────────────────────────────────────────
+# Bashtop theme - Omarchy Matte Black
+# by tahayvr
+# https://github.com/tahayvr
+# ────────────────────────────────────────────────────────────
+
+# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
+# example for white: "#ffffff", "#ff" or "255 255 255".
+
+# All graphs and meters can be gradients
+# For single color graphs leave "mid" and "end" variable empty.
+# Use "start" and "end" variables for two color gradient
+# Use "start", "mid" and "end" for three color gradient
+
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]=""
+
+# Main text color
+theme[main_fg]="#EAEAEA"
+
+# Title color for boxes
+theme[title]="#8a8a8d"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#f59e0b"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#f59e0b"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#EAEAEA"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#333333"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#8a8a8d"
+
+# Cpu box outline color
+theme[cpu_box]="#8a8a8d"
+
+# Memory/disks box outline color
+theme[mem_box]="#8a8a8d"
+
+# Net up/down box outline color
+theme[net_box]="#8a8a8d"
+
+# Processes box outline color
+theme[proc_box]="#8a8a8d"
+
+# Box divider line and small boxes line color
+theme[div_line]="#8a8a8d"
+
+# Temperature graph colors
+theme[temp_start]="#8a8a8d"
+theme[temp_mid]="#f59e0b"
+theme[temp_end]="#b91c1c"
+
+# CPU graph colors
+theme[cpu_start]="#8a8a8d"
+theme[cpu_mid]="#f59e0b"
+theme[cpu_end]="#b91c1c"
+
+# Mem/Disk free meter
+theme[free_start]="#8a8a8d"
+theme[free_mid]="#f59e0b"
+theme[free_end]="#b91c1c"
+
+# Mem/Disk cached meter
+theme[cached_start]="#8a8a8d"
+theme[cached_mid]="#f59e0b"
+theme[cached_end]="#b91c1c"
+
+# Mem/Disk available meter
+theme[available_start]="#8a8a8d"
+theme[available_mid]="#f59e0b"
+theme[available_end]="#b91c1c"
+
+# Mem/Disk used meter
+theme[used_start]="#8a8a8d"
+theme[used_mid]="#f59e0b"
+theme[used_end]="#b91c1c"
+
+# Download graph colors
+theme[download_start]="#8a8a8d"
+theme[download_mid]="#f59e0b"
+theme[download_end]="#b91c1c"
+
+# Upload graph colors
+theme[upload_start]="#8a8a8d"
+theme[upload_mid]="#f59e0b"
+theme[upload_end]="#b91c1c"
diff --git a/themes/matte-black/chromium.theme b/themes/matte-black/chromium.theme
new file mode 100644
index 0000000..6e77e85
--- /dev/null
+++ b/themes/matte-black/chromium.theme
@@ -0,0 +1 @@
+30,30,30
diff --git a/themes/matte-black/gtk.theme b/themes/matte-black/gtk.theme
new file mode 100644
index 0000000..46f29e8
--- /dev/null
+++ b/themes/matte-black/gtk.theme
@@ -0,0 +1 @@
+red
\ No newline at end of file
diff --git a/themes/matte-black/icons.theme b/themes/matte-black/icons.theme
new file mode 100644
index 0000000..a3c0a4c
--- /dev/null
+++ b/themes/matte-black/icons.theme
@@ -0,0 +1 @@
+Yaru-red
diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini
new file mode 100644
index 0000000..a0e6653
--- /dev/null
+++ b/themes/matte-black/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#8a8a8d
+border-color=#8A8A8D
+background-color=#1e1e1e
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
diff --git a/themes/matte-black/neovim.lua b/themes/matte-black/neovim.lua
new file mode 100644
index 0000000..7b3f72b
--- /dev/null
+++ b/themes/matte-black/neovim.lua
@@ -0,0 +1,9 @@
+return {
+ { "tahayvr/matteblack.nvim", lazy = false, priority = 1000 },
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "matteblack",
+ },
+ },
+}
\ No newline at end of file
diff --git a/themes/matte-black/swayosd.css b/themes/matte-black/swayosd.css
new file mode 100644
index 0000000..3f24dbb
--- /dev/null
+++ b/themes/matte-black/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #121212;
+@define-color border-color #8A8A8D;
+@define-color label #8A8A8D;
+@define-color image #8A8A8D;
+@define-color progress #8A8A8D;
+
diff --git a/themes/matte-black/vscode.theme b/themes/matte-black/vscode.theme
new file mode 100644
index 0000000..3666c58
--- /dev/null
+++ b/themes/matte-black/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Matte Black Theme"
+vscode[extension]="CleanThemes.matte-black-theme"
\ No newline at end of file
diff --git a/themes/matte-black/waybar.css b/themes/matte-black/waybar.css
new file mode 100644
index 0000000..1b8bb7f
--- /dev/null
+++ b/themes/matte-black/waybar.css
@@ -0,0 +1,2 @@
+@define-color foreground #8a8a8d;
+@define-color background #1e1e1e;
diff --git a/themes/matte-black/wofi.css b/themes/matte-black/wofi.css
new file mode 100644
index 0000000..9019e2c
--- /dev/null
+++ b/themes/matte-black/wofi.css
@@ -0,0 +1,5 @@
+@define-color selected-text #B91C1C;
+@define-color text #EAEAEA;
+@define-color base #121212;
+@define-color base-rgba rgba(18, 18, 18, 0.95);
+@define-color border #EAEAEA88;
diff --git a/themes/nord/backgrounds.sh b/themes/nord/backgrounds.sh
deleted file mode 100644
index 04eeaa7..0000000
--- a/themes/nord/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/nord"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/nord/background.jpg" "nord/1-nord.jpg"
diff --git a/themes/nord/backgrounds/1-nord.png b/themes/nord/backgrounds/1-nord.png
new file mode 100644
index 0000000..56dbc1d
Binary files /dev/null and b/themes/nord/backgrounds/1-nord.png differ
diff --git a/themes/nord/backgrounds/2-nord.png b/themes/nord/backgrounds/2-nord.png
new file mode 100644
index 0000000..412eb52
Binary files /dev/null and b/themes/nord/backgrounds/2-nord.png differ
diff --git a/themes/nord/chromium.theme b/themes/nord/chromium.theme
new file mode 100644
index 0000000..33a45e4
--- /dev/null
+++ b/themes/nord/chromium.theme
@@ -0,0 +1 @@
+46,52,64
diff --git a/themes/nord/gtk.theme b/themes/nord/gtk.theme
new file mode 100644
index 0000000..f5ac3db
--- /dev/null
+++ b/themes/nord/gtk.theme
@@ -0,0 +1 @@
+blue
\ No newline at end of file
diff --git a/themes/nord/icons.theme b/themes/nord/icons.theme
new file mode 100644
index 0000000..6ce2f14
--- /dev/null
+++ b/themes/nord/icons.theme
@@ -0,0 +1 @@
+Yaru-blue
diff --git a/themes/nord/mako.ini b/themes/nord/mako.ini
new file mode 100644
index 0000000..2976506
--- /dev/null
+++ b/themes/nord/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#d8dee9
+border-color=#D8DEE9
+background-color=#2e3440
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/nord/swayosd.css b/themes/nord/swayosd.css
new file mode 100644
index 0000000..db1b40d
--- /dev/null
+++ b/themes/nord/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #2E3440;
+@define-color border-color #D8DEE9;
+@define-color label #D8DEE9;
+@define-color image #D8DEE9;
+@define-color progress #D8DEE9;
+
diff --git a/themes/nord/vscode.theme b/themes/nord/vscode.theme
new file mode 100644
index 0000000..0623191
--- /dev/null
+++ b/themes/nord/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Nord"
+vscode[extension]="arcticicestudio.nord-visual-studio-code"
\ No newline at end of file
diff --git a/themes/nord/waybar.css b/themes/nord/waybar.css
index e826965..bc2a99d 100644
--- a/themes/nord/waybar.css
+++ b/themes/nord/waybar.css
@@ -1,5 +1,2 @@
-
-* {
- color: #d8dee9;
- background-color: #2e3440;
-}
+@define-color foreground #d8dee9;
+@define-color background #2e3440;
diff --git a/themes/nord/wofi.css b/themes/nord/wofi.css
index 17190dd..363c591 100644
--- a/themes/nord/wofi.css
+++ b/themes/nord/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #88C0D0;
-@define-color text #D8DEE9;
-@define-color base #2E3440;
-@define-color border #D8DEE9;
+@define-color selected-text #88C0D0;
+@define-color text #D8DEE9;
+@define-color base #2E3440;
+@define-color base-rgba rgba(46, 52, 64, 0.95);
+@define-color border #D8DEE9;
diff --git a/themes/osaka-jade/alacritty.toml b/themes/osaka-jade/alacritty.toml
new file mode 100644
index 0000000..6229daa
--- /dev/null
+++ b/themes/osaka-jade/alacritty.toml
@@ -0,0 +1,28 @@
+[colors]
+[colors.primary]
+background = '#111c18'
+foreground = '#C1C497'
+
+[colors.normal]
+black = "#23372B"
+red = "#FF5345"
+green = "#549e6a"
+yellow = "#459451"
+blue = "#509475"
+magenta = "#D2689C"
+cyan = "#2DD5B7"
+white = "#F6F5DD"
+
+[colors.bright]
+black = "#53685B"
+red = "#db9f9c"
+green = "#143614"
+yellow = "#E5C736"
+blue = "#ACD4CF"
+magenta = "#75bbb3"
+cyan = "#8CD3CB"
+white = "#9eebb3"
+
+[colors.cursor]
+text = "#000000"
+cursor = "#D7C995"
diff --git a/themes/osaka-jade/backgrounds/1-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/1-osaka-jade-bg.jpg
new file mode 100644
index 0000000..be7d857
Binary files /dev/null and b/themes/osaka-jade/backgrounds/1-osaka-jade-bg.jpg differ
diff --git a/themes/osaka-jade/backgrounds/2-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/2-osaka-jade-bg.jpg
new file mode 100644
index 0000000..9b97956
Binary files /dev/null and b/themes/osaka-jade/backgrounds/2-osaka-jade-bg.jpg differ
diff --git a/themes/osaka-jade/backgrounds/3-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/3-osaka-jade-bg.jpg
new file mode 100644
index 0000000..729ccae
Binary files /dev/null and b/themes/osaka-jade/backgrounds/3-osaka-jade-bg.jpg differ
diff --git a/themes/osaka-jade/btop.theme b/themes/osaka-jade/btop.theme
new file mode 100644
index 0000000..8e22ec9
--- /dev/null
+++ b/themes/osaka-jade/btop.theme
@@ -0,0 +1,87 @@
+# Main background
+theme[main_bg]="#111c18"
+
+# Main text color
+theme[main_fg]="#F7E8B2"
+
+# Title color for boxes
+theme[title]="#D6D5BC"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#E67D64"
+
+# Background color of selected items
+theme[selected_bg]="#364538"
+
+# Foreground color of selected items
+theme[selected_fg]="#DEB266"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#32473B"
+
+# Color of text appearing on top of graphs
+theme[graph_text]="#E6D8BA"
+
+# Misc colors for processes box
+theme[proc_misc]="#E6D8BA"
+
+# Cpu box outline color
+theme[cpu_box]="#81B8A8"
+
+# Memory/disks box outline color
+theme[mem_box]="#81B8A8"
+
+# Net up/down box outline color
+theme[net_box]="#81B8A8"
+
+# Processes box outline color
+theme[proc_box]="#81B8A8"
+
+# Box divider line and small boxes line color
+theme[div_line]="#81B8A8"
+
+# Temperature graph colors
+theme[temp_start]="#BFD99A"
+theme[temp_mid]="#E1B55E"
+theme[temp_end]="#DBB05C"
+
+# CPU graph colors
+theme[cpu_start]="#5F8C86"
+theme[cpu_mid]="#629C89"
+theme[cpu_end]="#76AD98"
+
+# Mem/Disk free meter
+theme[free_start]="#5F8C86"
+theme[free_mid]="#629C89"
+theme[free_end]="#76AD98"
+
+# Mem/Disk cached meter
+theme[cached_start]="#5F8C86"
+theme[cached_mid]="#629C89"
+theme[cached_end]="#76AD98"
+
+# Mem/Disk available meter
+theme[available_start]="#5F8C86"
+theme[available_mid]="#629C89"
+theme[available_end]="#76AD98"
+
+# Mem/Disk used meter
+theme[used_start]="#5F8C86"
+theme[used_mid]="#629C89"
+theme[used_end]="#76AD98"
+
+# Download graph colors
+theme[download_start]="#75BBB3"
+theme[download_mid]="#61949A"
+theme[download_end]="#215866"
+
+# Upload graph colors
+theme[upload_start]="#215866"
+theme[upload_mid]="#91C080"
+theme[upload_end]="#549E6A"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#72CFA3"
+theme[process_mid]="#D0D494"
+theme[process_end]="#DB9F9C"
+
diff --git a/themes/osaka-jade/chromium.theme b/themes/osaka-jade/chromium.theme
new file mode 100644
index 0000000..6524c76
--- /dev/null
+++ b/themes/osaka-jade/chromium.theme
@@ -0,0 +1 @@
+17,34,28
diff --git a/themes/osaka-jade/gtk.theme b/themes/osaka-jade/gtk.theme
new file mode 100644
index 0000000..2004c03
--- /dev/null
+++ b/themes/osaka-jade/gtk.theme
@@ -0,0 +1 @@
+sage
\ No newline at end of file
diff --git a/themes/osaka-jade/icons.theme b/themes/osaka-jade/icons.theme
new file mode 100644
index 0000000..140e422
--- /dev/null
+++ b/themes/osaka-jade/icons.theme
@@ -0,0 +1 @@
+Yaru-sage
diff --git a/themes/osaka-jade/mako.ini b/themes/osaka-jade/mako.ini
new file mode 100644
index 0000000..4489799
--- /dev/null
+++ b/themes/osaka-jade/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#C1C497
+border-color=#214237
+background-color=#11221C
+padding=10
+border-size=2
+font=Liberation Sans 12
+max-icon-size=32
+outer-margin=5
\ No newline at end of file
diff --git a/themes/osaka-jade/neovim.lua b/themes/osaka-jade/neovim.lua
new file mode 100644
index 0000000..3b25e9e
--- /dev/null
+++ b/themes/osaka-jade/neovim.lua
@@ -0,0 +1,9 @@
+return {
+ "ribru17/bamboo.nvim",
+ lazy = false,
+ priority = 1000,
+ config = function()
+ require("bamboo").setup({})
+ require("bamboo").load()
+ end,
+}
\ No newline at end of file
diff --git a/themes/osaka-jade/swayosd.css b/themes/osaka-jade/swayosd.css
new file mode 100644
index 0000000..1558ad4
--- /dev/null
+++ b/themes/osaka-jade/swayosd.css
@@ -0,0 +1,5 @@
+@define-color background-color #11221C;
+@define-color border-color #589A5F;
+@define-color label #C0C396;
+@define-color image #C0C396;
+@define-color progress #C0C396;
diff --git a/themes/osaka-jade/waybar.css b/themes/osaka-jade/waybar.css
new file mode 100644
index 0000000..7cfd537
--- /dev/null
+++ b/themes/osaka-jade/waybar.css
@@ -0,0 +1,2 @@
+@define-color foreground #e6d8ba;
+@define-color background #11221C;
diff --git a/themes/osaka-jade/wofi.css b/themes/osaka-jade/wofi.css
new file mode 100644
index 0000000..30eac8e
--- /dev/null
+++ b/themes/osaka-jade/wofi.css
@@ -0,0 +1,5 @@
+@define-color selected-text #e1b55e;
+@define-color text #ebfff2;
+@define-color base #11221C;
+@define-color base-rgba rgba(17, 34, 28, 0.95);
+@define-color border #214237;
diff --git a/themes/ristretto/alacritty.toml b/themes/ristretto/alacritty.toml
new file mode 100644
index 0000000..af24993
--- /dev/null
+++ b/themes/ristretto/alacritty.toml
@@ -0,0 +1,33 @@
+[colors]
+
+[colors.normal]
+black = "#2c2525"
+red = "#fd6883"
+green = "#adda78"
+yellow = "#f9cc6c"
+blue = "#f38d70"
+magenta = "#a8a9eb"
+cyan = "#85dacc"
+white = "#e6d9db"
+
+[colors.bright]
+black = "#463a3a"
+red = "#ff8297"
+green = "#c8e292"
+yellow = "#fcd675"
+blue = "#f8a788"
+magenta = "#bebffd"
+cyan = "#9bf1e1"
+white = "#f1e5e7"
+
+[colors.cursor]
+cursor = '#c3b7b8'
+text = '#2c252
+
+[colors.primary]
+background = '#2c2525'
+foreground = '#e6d9db'
+
+[colors.selection]
+background = '#403e41'
+text = '#e6d9db'
diff --git a/themes/ristretto/backgrounds/1-ristretto.jpg b/themes/ristretto/backgrounds/1-ristretto.jpg
new file mode 100644
index 0000000..7618e1b
Binary files /dev/null and b/themes/ristretto/backgrounds/1-ristretto.jpg differ
diff --git a/themes/ristretto/backgrounds/2-ristretto.jpg b/themes/ristretto/backgrounds/2-ristretto.jpg
new file mode 100644
index 0000000..faf63ea
Binary files /dev/null and b/themes/ristretto/backgrounds/2-ristretto.jpg differ
diff --git a/themes/ristretto/backgrounds/3-ristretto.jpg b/themes/ristretto/backgrounds/3-ristretto.jpg
new file mode 100644
index 0000000..385b01d
Binary files /dev/null and b/themes/ristretto/backgrounds/3-ristretto.jpg differ
diff --git a/themes/ristretto/btop.theme b/themes/ristretto/btop.theme
new file mode 100644
index 0000000..c241495
--- /dev/null
+++ b/themes/ristretto/btop.theme
@@ -0,0 +1,82 @@
+#Btop monokai pro ristretto theme
+#Reconfigured from monokai theme
+
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#2c2421"
+
+# Main text color
+theme[main_fg]="#e6d9db"
+
+# Title color for boxes
+theme[title]="#e6d9db"
+
+# Higlight color for keyboard shortcuts
+theme[hi_fg]="#fd6883"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#3d2f2a"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#e6d9db"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#72696a"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#adda78"
+
+# Cpu box outline color
+theme[cpu_box]="#5b4a45"
+
+# Memory/disks box outline color
+theme[mem_box]="#5b4a45"
+
+# Net up/down box outline color
+theme[net_box]="#5b4a45"
+
+# Processes box outline color
+theme[proc_box]="#5b4a45"
+
+# Box divider line and small boxes line color
+theme[div_line]="#72696a"
+
+# Temperature graph colors
+theme[temp_start]="#a8a9eb"
+theme[temp_mid]="#f38d70"
+theme[temp_end]="#fd6a85"
+
+# CPU graph colors
+theme[cpu_start]="#adda78"
+theme[cpu_mid]="#f9cc6c"
+theme[cpu_end]="#fd6883"
+
+# Mem/Disk free meter
+theme[free_start]="#5b4a45"
+theme[free_mid]="#adda78"
+theme[free_end]="#c5e2a3"
+
+# Mem/Disk cached meter
+theme[cached_start]="#5b4a45"
+theme[cached_mid]="#85dacc"
+theme[cached_end]="#b3e8dd"
+
+# Mem/Disk available meter
+theme[available_start]="#5b4a45"
+theme[available_mid]="#f9cc6c"
+theme[available_end]="#fce2a3"
+
+# Mem/Disk used meter
+theme[used_start]="#5b4a45"
+theme[used_mid]="#fd6a85"
+theme[used_end]="#feb5c7"
+
+# Download graph colors
+theme[download_start]="#3d2f2a"
+theme[download_mid]="#a8a9eb"
+theme[download_end]="#c5c6f0"
+
+# Upload graph colors
+theme[upload_start]="#3d2f2a"
+theme[upload_mid]="#fd6a85"
+theme[upload_end]="#feb5c7"
+
diff --git a/themes/ristretto/chromium.theme b/themes/ristretto/chromium.theme
new file mode 100644
index 0000000..4b5c8eb
--- /dev/null
+++ b/themes/ristretto/chromium.theme
@@ -0,0 +1 @@
+37,33,30
diff --git a/themes/ristretto/gtk.theme b/themes/ristretto/gtk.theme
new file mode 100644
index 0000000..2ae6969
--- /dev/null
+++ b/themes/ristretto/gtk.theme
@@ -0,0 +1 @@
+yellow
\ No newline at end of file
diff --git a/themes/ristretto/icons.theme b/themes/ristretto/icons.theme
new file mode 100644
index 0000000..e38b9ce
--- /dev/null
+++ b/themes/ristretto/icons.theme
@@ -0,0 +1 @@
+Yaru-yellow
diff --git a/themes/ristretto/mako.ini b/themes/ristretto/mako.ini
new file mode 100644
index 0000000..a88e281
--- /dev/null
+++ b/themes/ristretto/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#e6d9db
+border-color=#e6d9db
+background-color=#2c2525
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/ristretto/neovim.lua b/themes/ristretto/neovim.lua
new file mode 100644
index 0000000..8fae3b8
--- /dev/null
+++ b/themes/ristretto/neovim.lua
@@ -0,0 +1,22 @@
+return {
+ {
+ "gthelding/monokai-pro.nvim",
+ config = function()
+ require("monokai-pro").setup({
+ filter = "ristretto",
+ override = function()
+ return {
+ NonText = { fg = "#948a8b" },
+ }
+ end,
+ })
+ vim.cmd([[colorscheme monokai-pro]])
+ end,
+ },
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "monokai-pro",
+ },
+ },
+}
diff --git a/themes/ristretto/swayosd.css b/themes/ristretto/swayosd.css
new file mode 100644
index 0000000..cd9c576
--- /dev/null
+++ b/themes/ristretto/swayosd.css
@@ -0,0 +1,5 @@
+@define-color background-color #2c2525;
+@define-color border-color #c3b7b8;
+@define-color label #c3b7b8;
+@define-color image #c3b7b8;
+@define-color progress #c3b7b8;
diff --git a/themes/ristretto/vscode.theme b/themes/ristretto/vscode.theme
new file mode 100644
index 0000000..a996319
--- /dev/null
+++ b/themes/ristretto/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Monokai Pro (Filter Ristretto)"
+vscode[extension]="monokai.theme-monokai-pro-vscode"
\ No newline at end of file
diff --git a/themes/ristretto/waybar.css b/themes/ristretto/waybar.css
new file mode 100644
index 0000000..a6be70a
--- /dev/null
+++ b/themes/ristretto/waybar.css
@@ -0,0 +1,2 @@
+@define-color foreground #e6d9db;
+@define-color background #2c2525;
diff --git a/themes/ristretto/wofi.css b/themes/ristretto/wofi.css
new file mode 100644
index 0000000..532383e
--- /dev/null
+++ b/themes/ristretto/wofi.css
@@ -0,0 +1,5 @@
+@define-color selected-text #fabd2f;
+@define-color text #e6d9db;
+@define-color base #2c2525;
+@define-color base-rgba rgba(44, 37, 37, 0.95);
+@define-color border #e6d9db88;
diff --git a/themes/rose-pine/alacritty.toml b/themes/rose-pine/alacritty.toml
new file mode 100644
index 0000000..947e42d
--- /dev/null
+++ b/themes/rose-pine/alacritty.toml
@@ -0,0 +1,72 @@
+[colors.primary]
+foreground = "#575279"
+background = "#faf4ed"
+dim_foreground = "#797593"
+bright_foreground = "#575279"
+
+[colors.cursor]
+text = "#575279"
+cursor = "#cecacd"
+
+[colors.vi_mode_cursor]
+text = "#575279"
+cursor = "#cecacd"
+
+[colors.search.matches]
+foreground = "#797593"
+background = "#f2e9e1"
+
+[colors.search.focused_match]
+foreground = "#faf4ed"
+background = "#d7827e"
+
+[colors.hints.start]
+foreground = "#797593"
+background = "#fffaf3"
+
+[colors.hints.end]
+foreground = "#9893a5"
+background = "#fffaf3"
+
+[colors.line_indicator]
+foreground = "None"
+background = "None"
+
+[colors.footer_bar]
+foreground = "#575279"
+background = "#fffaf3"
+
+[colors.selection]
+text = "#575279"
+background = "#dfdad9"
+
+[colors.normal]
+black = "#f2e9e1"
+red = "#b4637a"
+green = "#286983"
+yellow = "#ea9d34"
+blue = "#56949f"
+magenta = "#907aa9"
+cyan = "#d7827e"
+white = "#575279"
+
+[colors.bright]
+black = "#9893a5"
+red = "#b4637a"
+green = "#286983"
+yellow = "#ea9d34"
+blue = "#56949f"
+magenta = "#907aa9"
+cyan = "#d7827e"
+white = "#575279"
+
+[colors.dim]
+black = "#9893a5"
+red = "#b4637a"
+green = "#286983"
+yellow = "#ea9d34"
+blue = "#56949f"
+magenta = "#907aa9"
+cyan = "#d7827e"
+white = "#575279"
+
diff --git a/themes/rose-pine/backgrounds/1-rose-pine.jpg b/themes/rose-pine/backgrounds/1-rose-pine.jpg
new file mode 100644
index 0000000..adfe242
Binary files /dev/null and b/themes/rose-pine/backgrounds/1-rose-pine.jpg differ
diff --git a/themes/rose-pine/backgrounds/2-wave-light.png b/themes/rose-pine/backgrounds/2-wave-light.png
new file mode 100644
index 0000000..53e136c
Binary files /dev/null and b/themes/rose-pine/backgrounds/2-wave-light.png differ
diff --git a/themes/rose-pine/btop.theme b/themes/rose-pine/btop.theme
new file mode 100644
index 0000000..a992faa
--- /dev/null
+++ b/themes/rose-pine/btop.theme
@@ -0,0 +1,119 @@
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#faf4ed"
+# Base
+
+# Main text color
+theme[main_fg]="#575279"
+# Text
+
+# Title color for boxes
+theme[title]="#908caa"
+# Subtle
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#e0def4"
+# Text
+
+# Background color of selected item in processes box
+theme[selected_bg]="#524f67"
+# HL High
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#f6c177"
+# Gold
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#403d52"
+# HL Med
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#9ccfd8"
+# Foam
+
+# Background color of the percentage meters
+theme[meter_bg]="#9ccfd8"
+# Foam
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#c4a7e7"
+# Iris
+
+# Cpu box outline color
+theme[cpu_box]="#ebbcba"
+# Rose
+
+# Memory/disks box outline color
+theme[mem_box]="#31748f"
+# Pine
+
+# Net up/down box outline color
+theme[net_box]="#c4a7e7"
+# Iris
+
+# Processes box outline color
+theme[proc_box]="#eb6f92"
+# Love
+
+# Box divider line and small boxes line color
+theme[div_line]="#6e6a86"
+# Muted
+
+# Temperature graph colors
+theme[temp_start]="#ebbcba"
+# Rose
+theme[temp_mid]="#f6c177"
+# Gold
+theme[temp_end]="#eb6f92"
+# Love
+
+# CPU graph colors
+theme[cpu_start]="#f6c177"
+# Gold
+theme[cpu_mid]="#ebbcba"
+# Rose
+theme[cpu_end]="#eb6f92"
+# Love
+
+# Mem/Disk free meter
+# all love
+theme[free_start]="#eb6f92"
+theme[free_mid]="#eb6f92"
+theme[free_end]="#eb6f92"
+
+# Mem/Disk cached meter
+# all iris
+theme[cached_start]="#c4a7e7"
+theme[cached_mid]="#c4a7e7"
+theme[cached_end]="#c4a7e7"
+
+# Mem/Disk available meter
+# all pine
+theme[available_start]="#31748f"
+theme[available_mid]="#31748f"
+theme[available_end]="#31748f"
+
+# Mem/Disk used meter
+# all rose
+theme[used_start]="#ebbcba"
+theme[used_mid]="#ebbcba"
+theme[used_end]="#ebbcba"
+
+# Download graph colors
+# Pine for start, foam for the rest
+theme[download_start]="#31748f"
+theme[download_mid]="#9ccfd8"
+theme[download_end]="#9ccfd8"
+
+# Upload graph colors
+theme[upload_start]="#ebbcba"
+# Rose for start
+theme[upload_mid]="#eb6f92"
+# Love for mid and end
+theme[upload_end]="#eb6f92"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#31748f"
+# Pine
+theme[process_mid]="#9ccfd8"
+# Foam for mid and end
+theme[process_end]="#9ccfd8"
diff --git a/themes/rose-pine/chromium.theme b/themes/rose-pine/chromium.theme
new file mode 100644
index 0000000..072dd44
--- /dev/null
+++ b/themes/rose-pine/chromium.theme
@@ -0,0 +1 @@
+210,196,219
diff --git a/themes/rose-pine/gtk.theme b/themes/rose-pine/gtk.theme
new file mode 100644
index 0000000..f5ac3db
--- /dev/null
+++ b/themes/rose-pine/gtk.theme
@@ -0,0 +1 @@
+blue
\ No newline at end of file
diff --git a/themes/rose-pine/icons.theme b/themes/rose-pine/icons.theme
new file mode 100644
index 0000000..6ce2f14
--- /dev/null
+++ b/themes/rose-pine/icons.theme
@@ -0,0 +1 @@
+Yaru-blue
diff --git a/themes/rose-pine/light.mode b/themes/rose-pine/light.mode
new file mode 100644
index 0000000..66bb2d0
--- /dev/null
+++ b/themes/rose-pine/light.mode
@@ -0,0 +1 @@
+# This will set "prefer-light" and use "Adwaita" as the theme
diff --git a/themes/rose-pine/mako.ini b/themes/rose-pine/mako.ini
new file mode 100644
index 0000000..10f76e5
--- /dev/null
+++ b/themes/rose-pine/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#575279
+border-color=#575279
+background-color=#faf4ed
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/rose-pine/neovim.lua b/themes/rose-pine/neovim.lua
new file mode 100644
index 0000000..591e8c7
--- /dev/null
+++ b/themes/rose-pine/neovim.lua
@@ -0,0 +1,9 @@
+return {
+ { "rose-pine/neovim", name = "rose-pine" },
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "rose-pine-dawn",
+ },
+ },
+}
diff --git a/themes/rose-pine/swayosd.css b/themes/rose-pine/swayosd.css
new file mode 100644
index 0000000..e58cc08
--- /dev/null
+++ b/themes/rose-pine/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #faf4ed;
+@define-color border-color #575279;
+@define-color label #575279;
+@define-color image #575279;
+@define-color progress #575279;
+
diff --git a/themes/rose-pine/vscode.theme b/themes/rose-pine/vscode.theme
new file mode 100644
index 0000000..dc098e8
--- /dev/null
+++ b/themes/rose-pine/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Rosé Pine Dawn"
+vscode[extension]="mvllow.rose-pine"
\ No newline at end of file
diff --git a/themes/rose-pine/waybar.css b/themes/rose-pine/waybar.css
new file mode 100644
index 0000000..d2e5942
--- /dev/null
+++ b/themes/rose-pine/waybar.css
@@ -0,0 +1,2 @@
+@define-color foreground #575279;
+@define-color background #faf4ed;
diff --git a/themes/rose-pine/wofi.css b/themes/rose-pine/wofi.css
new file mode 100644
index 0000000..6502493
--- /dev/null
+++ b/themes/rose-pine/wofi.css
@@ -0,0 +1,5 @@
+@define-color selected-text #88C0D0;
+@define-color text #575279;
+@define-color base #faf4ed;
+@define-color base-rgba rgba(250, 244, 237, 0.95);
+@define-color border #575279;
diff --git a/themes/tokyo-night/backgrounds.sh b/themes/tokyo-night/backgrounds.sh
deleted file mode 100644
index e074832..0000000
--- a/themes/tokyo-night/backgrounds.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir -p "$BACKGROUNDS_DIR/tokyo-night"
-download_background_image "https://omakasui.lucapattocchio.dev/themes/tokyo-night/background.jpg" "tokyo-night/1-tokyo-night.jpg"
diff --git a/themes/tokyo-night/backgrounds/1-tokyo-night.png b/themes/tokyo-night/backgrounds/1-tokyo-night.png
new file mode 100644
index 0000000..d806728
Binary files /dev/null and b/themes/tokyo-night/backgrounds/1-tokyo-night.png differ
diff --git a/themes/tokyo-night/backgrounds/2-tokyo-night.jpg b/themes/tokyo-night/backgrounds/2-tokyo-night.jpg
new file mode 100644
index 0000000..825bb4b
Binary files /dev/null and b/themes/tokyo-night/backgrounds/2-tokyo-night.jpg differ
diff --git a/themes/tokyo-night/chromium.theme b/themes/tokyo-night/chromium.theme
new file mode 100644
index 0000000..bf2774d
--- /dev/null
+++ b/themes/tokyo-night/chromium.theme
@@ -0,0 +1 @@
+26,27,38
diff --git a/themes/tokyo-night/gtk.theme b/themes/tokyo-night/gtk.theme
new file mode 100644
index 0000000..f5ac3db
--- /dev/null
+++ b/themes/tokyo-night/gtk.theme
@@ -0,0 +1 @@
+blue
\ No newline at end of file
diff --git a/themes/tokyo-night/icons.theme b/themes/tokyo-night/icons.theme
new file mode 100644
index 0000000..5d00638
--- /dev/null
+++ b/themes/tokyo-night/icons.theme
@@ -0,0 +1 @@
+Yaru-magenta
diff --git a/themes/tokyo-night/mako.ini b/themes/tokyo-night/mako.ini
new file mode 100644
index 0000000..c0fae2e
--- /dev/null
+++ b/themes/tokyo-night/mako.ini
@@ -0,0 +1,10 @@
+include=~/.local/share/omarchy/default/mako/core.ini
+
+text-color=#a9b1d6
+border-color=#33ccff
+background-color=#1a1b26
+padding=10
+border-size=2
+font=Liberation Sans 11
+max-icon-size=32
+outer-margin=20
\ No newline at end of file
diff --git a/themes/tokyo-night/swayosd.css b/themes/tokyo-night/swayosd.css
new file mode 100644
index 0000000..1300b6a
--- /dev/null
+++ b/themes/tokyo-night/swayosd.css
@@ -0,0 +1,6 @@
+@define-color background-color #1a1b26;
+@define-color border-color #33ccff;
+@define-color label #a9b1d6;
+@define-color image #a9b1d6;
+@define-color progress #a9b1d6;
+
diff --git a/themes/tokyo-night/vscode.theme b/themes/tokyo-night/vscode.theme
new file mode 100644
index 0000000..eac952b
--- /dev/null
+++ b/themes/tokyo-night/vscode.theme
@@ -0,0 +1,2 @@
+vscode[theme]="Tokyo Night"
+vscode[extension]="enkia.tokyo-night"
\ No newline at end of file
diff --git a/themes/tokyo-night/waybar.css b/themes/tokyo-night/waybar.css
index 96aa9a4..ecd3da0 100644
--- a/themes/tokyo-night/waybar.css
+++ b/themes/tokyo-night/waybar.css
@@ -1,5 +1,2 @@
-
-* {
- color: #cdd6f4;
- background-color: #1a1b26;
-}
+@define-color foreground #cdd6f4;
+@define-color background #1a1b26;
diff --git a/themes/tokyo-night/wofi.css b/themes/tokyo-night/wofi.css
index 0c21483..873e56a 100644
--- a/themes/tokyo-night/wofi.css
+++ b/themes/tokyo-night/wofi.css
@@ -1,4 +1,5 @@
-@define-color selected-text #7dcfff;
-@define-color text #cfc9c2;
-@define-color base #1a1b26;
-@define-color border #33ccff;
+@define-color selected-text #7dcfff;
+@define-color text #cfc9c2;
+@define-color base #1a1b26;
+@define-color base-rgba rgba(26, 27, 38, 0.95);
+@define-color border #33ccff;
diff --git a/uninstall/app-firefox.sh b/uninstall/app-firefox.sh
deleted file mode 100644
index 6578d07..0000000
--- a/uninstall/app-firefox.sh
+++ /dev/null
@@ -1 +0,0 @@
-gum confirm "Delete it?! Are you a professional or not?!" && sudo apt remove -y firefox || echo "That's better!"
diff --git a/uninstall/app-flameshot.sh b/uninstall/app-flameshot.sh
deleted file mode 100644
index 47db99c..0000000
--- a/uninstall/app-flameshot.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y flameshot
diff --git a/uninstall/app-github-cli.sh b/uninstall/app-github-cli.sh
deleted file mode 100644
index 18ee29a..0000000
--- a/uninstall/app-github-cli.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y gh
diff --git a/uninstall/app-google-chrome.sh b/uninstall/app-google-chrome.sh
deleted file mode 100644
index a76d8ea..0000000
--- a/uninstall/app-google-chrome.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y google-chrome-stable
\ No newline at end of file
diff --git a/uninstall/app-libreoffice.sh b/uninstall/app-libreoffice.sh
deleted file mode 100644
index 91b5ae5..0000000
--- a/uninstall/app-libreoffice.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-sudo apt-get remove --purge -y "libreoffice*"
-sudo apt-get -y clean
-sudo apt-get -y autoremove
-
-# Remove LibreOffice folder from app-grid
-if gsettings get org.gnome.desktop.app-folders folder-children | grep -q "LibreOffice"; then
- # Get current folders list
- current_folders=$(gsettings get org.gnome.desktop.app-folders folder-children)
-
- # Remove LibreOffice from the list
- updated_folders=$(echo "$current_folders" | sed "s/'LibreOffice', //g" | sed "s/, 'LibreOffice'//g" | sed "s/'LibreOffice'//g")
- gsettings set org.gnome.desktop.app-folders folder-children "$updated_folders"
- gsettings reset-recursively org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/LibreOffice/
-fi
diff --git a/uninstall/app-localsend.sh b/uninstall/app-localsend.sh
deleted file mode 100644
index 4a5f3ca..0000000
--- a/uninstall/app-localsend.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y localsend
diff --git a/uninstall/app-mainline-kernels.sh b/uninstall/app-mainline-kernels.sh
deleted file mode 100644
index c76210a..0000000
--- a/uninstall/app-mainline-kernels.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y mainline
diff --git a/uninstall/app-spotify.sh b/uninstall/app-spotify.sh
deleted file mode 100644
index 923340f..0000000
--- a/uninstall/app-spotify.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y spotify-client
diff --git a/uninstall/app-visual-studio-code.sh b/uninstall/app-visual-studio-code.sh
deleted file mode 100644
index 18ef89b..0000000
--- a/uninstall/app-visual-studio-code.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-sudo apt purge -y remove code
-rm -rf ~/.config/Code/User
diff --git a/uninstall/app-vlc.sh b/uninstall/app-vlc.sh
deleted file mode 100644
index 16c8b57..0000000
--- a/uninstall/app-vlc.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y vlc
diff --git a/uninstall/app-xournalpp.sh b/uninstall/app-xournalpp.sh
deleted file mode 100644
index aee4fdf..0000000
--- a/uninstall/app-xournalpp.sh
+++ /dev/null
@@ -1 +0,0 @@
-sudo apt remove -y xournalpp
diff --git a/version b/version
deleted file mode 100644
index 8acdd82..0000000
--- a/version
+++ /dev/null
@@ -1 +0,0 @@
-0.0.1