From eed5964b1a15e7dfee0410d4d66b318d33dbc4f0 Mon Sep 17 00:00:00 2001 From: Stephan Raabe Date: Sun, 21 Jan 2024 10:16:19 +0100 Subject: [PATCH] Updates --- .version/name | 2 +- hypr/apps/ml4w-welcome/ml4w-welcome.py | 174 +++++++++++++++ hypr/apps/ml4w-welcome/src/icon-small.png | Bin 0 -> 4859 bytes hypr/apps/ml4w-welcome/src/icon.png | Bin 0 -> 19122 bytes hypr/apps/ml4w-welcome/src/welcome.ui | 257 ++++++++++++++++++++++ hypr/conf/ml4w.conf | 8 +- waybar/modules.json | 7 + waybar/themes/ml4w-blur-bottom/config | 1 + waybar/themes/ml4w-blur/config | 1 + waybar/themes/ml4w-blur/style.css | 8 + waybar/themes/ml4w-bottom/config | 1 + waybar/themes/ml4w/config | 1 + waybar/themes/ml4w/style.css | 8 + 13 files changed, 466 insertions(+), 2 deletions(-) create mode 100644 hypr/apps/ml4w-welcome/ml4w-welcome.py create mode 100644 hypr/apps/ml4w-welcome/src/icon-small.png create mode 100644 hypr/apps/ml4w-welcome/src/icon.png create mode 100644 hypr/apps/ml4w-welcome/src/welcome.ui diff --git a/.version/name b/.version/name index fbafd6b..912c37b 100644 --- a/.version/name +++ b/.version/name @@ -1 +1 @@ -2.7.2 \ No newline at end of file +2.8BETA \ No newline at end of file diff --git a/hypr/apps/ml4w-welcome/ml4w-welcome.py b/hypr/apps/ml4w-welcome/ml4w-welcome.py new file mode 100644 index 0000000..139c4d6 --- /dev/null +++ b/hypr/apps/ml4w-welcome/ml4w-welcome.py @@ -0,0 +1,174 @@ +# __ __ _ _ ___ __ _ _ _ +# | \/ | | | || \ \ / / / \ | |__ ___ _ _| |_ +# | |\/| | | | || |\ \ /\ / / / _ \ | '_ \ / _ \| | | | __| +# | | | | |__|__ _\ V V / / ___ \| |_) | (_) | |_| | |_ +# |_| |_|_____| |_| \_/\_/ /_/ \_\_.__/ \___/ \__,_|\__| + +import sys +import gi +import subprocess +import os +import threading + +gi.require_version('Gtk', '4.0') +gi.require_version('Adw', '1') + +from gi.repository import Gtk, Adw, Gio +from gi.repository import GLib +from gi.repository import GObject + + +# ----------------------------------------- +# Define UI template +# ----------------------------------------- +@Gtk.Template(filename='src/welcome.ui') + +# ----------------------------------------- +# Main Window +# ----------------------------------------- +class MainWindow(Adw.ApplicationWindow): + __gtype_name__ = 'Ml4wWelcomeWindow' + + # Get objects from template + ml4w_version = Gtk.Template.Child() + ml4w_logo = Gtk.Template.Child() + update_banner = Gtk.Template.Child() + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + +# ----------------------------------------- +# Main App +# ----------------------------------------- +class MyApp(Adw.Application): + + # Path to home folder + homeFolder = os.path.expanduser('~') + current_version_name = "" + current_version_code = "" + + def __init__(self, **kwargs): + super().__init__(application_id='com.ml4w.welcome', + flags=Gio.ApplicationFlags.DEFAULT_FLAGS) + self.create_action('quit', lambda *_: self.quit(), ['q']) + self.create_action('update', self.on_system_update) + self.create_action('cleanup', self.on_system_cleanup) + self.create_action('about', self.on_about) + self.create_action('settings', self.on_settings) + self.create_action('waybar_reload', self.on_waybar_reload) + self.create_action('keybindings', self.on_keybindings) + self.create_action('gitlab', self.on_gitlab) + self.create_action('youtube', self.on_youtube) + self.create_action('wallpaper', self.on_wallpaper) + self.create_action('waybartheme', self.on_waybartheme) + self.create_action('howtoupdate', self.on_howtoupdate) + + def do_activate(self): + win = self.props.active_window + if not win: + win = MainWindow(application=self) + + # Set ML4W logo + win.ml4w_logo.set_from_file("src/icon.png") + + # Check dotfiles version + self.readDotfilesVersion(win) + + # Force dark theme + self.changeTheme(win) + + # Check for updates + self.checkForUpdates(win) + + # Show Application Window + win.present() + + def changeTheme(self,win): + app = win.get_application() + sm = app.get_style_manager() + sm.set_color_scheme(Adw.ColorScheme.PREFER_DARK) + + def checkForUpdates(self,win): + try: + result = subprocess.run(["bash", self.homeFolder + "/dotfiles/.version/update.sh"], capture_output=True, text=True) + web_version = result.stdout.strip() + # print("Update " + web_version) + + if (web_version == '0'): + # print("Show update banner") + win.update_banner.set_revealed(True) + except: + print("ERROR: Could not read the file /dotfiles/.version/update.sh") + + def readDotfilesVersion(self,win): + try: + result = subprocess.run(["bash", self.homeFolder + "/dotfiles/.version/version.sh"], capture_output=True, text=True) + # print("Version " + result.stdout) + version = result.stdout + version_arr = version.split(" ") + self.current_version_name = version_arr[0] + self.current_version_code = version_arr[1] + win.ml4w_version.set_text("Version: " + self.current_version_name) + except: + print("ERROR: Could not read the file /dotfiles/.version/version.sh") + win.ml4w_version.set_text("") + + def on_about(self, widget, _): + dialog = Adw.AboutWindow( + application_icon="application-x-executable", + application_name="ML4W Welcome", + developer_name="Stephan Raabe", + version="1.0.0", + website="https://gitlab.com/stephan-raabe/dotfiles", + issue_url="https://gitlab.com/stephan-raabe/dotfiles/-/issues", + support_url="https://gitlab.com/stephan-raabe/dotfiles/-/issues", + copyright="© 2024 Stephan Raabe", + license_type=Gtk.License.GPL_3_0_ONLY + ) + dialog.present() + + def on_settings(self, widget, _): + subprocess.Popen(["alacritty", "--class", "dotfiles-floating", "-e", self.homeFolder + "/dotfiles/hypr/start-settings.sh"]) + + def on_system_update(self, widget, _): + subprocess.Popen(["alacritty","-e", self.homeFolder + "/dotfiles/scripts/installupdates.sh"]) + + def on_system_cleanup(self, widget, _): + subprocess.Popen(["alacritty","-e", self.homeFolder + "/dotfiles/scripts/cleanup.sh"]) + + def on_waybar_reload(self, widget, _): + subprocess.Popen(["bash", self.homeFolder + "/dotfiles/waybar/launch.sh"]) + + def on_keybindings(self, widget, _): + subprocess.Popen(["bash", self.homeFolder + "/dotfiles/hypr/scripts/keybindings.sh"]) + + def on_gitlab(self, widget, _): + subprocess.run(["xdg-open", "https://gitlab.com/stephan-raabe/dotfiles"]) + + def on_howtoupdate(self, widget, _): + subprocess.run(["xdg-open", "https://gitlab.com/stephan-raabe/dotfiles#update-with-git"]) + + def on_youtube(self, widget, _): + subprocess.run(["xdg-open", "https://www.youtube.com/channel/UC0sUzmZ0CHvVCVrpRfGKZfw"]) + + def on_wallpaper(self, widget, _): + subprocess.Popen(["bash", self.homeFolder + "/dotfiles/hypr/scripts/wallpaper.sh","select"]) + + def on_waybartheme(self, widget, _): + subprocess.Popen(["bash", self.homeFolder + "/dotfiles/waybar/themeswitcher.sh"]) + + # Add Application actions + def create_action(self, name, callback, shortcuts=None): + action = Gio.SimpleAction.new(name, None) + action.connect("activate", callback) + self.add_action(action) + if shortcuts: + self.set_accels_for_action(f"app.{name}", shortcuts) + +# ----------------------------------------- +# Application Start +# ----------------------------------------- +app = MyApp() +sm = app.get_style_manager() +sm.set_color_scheme(Adw.ColorScheme.PREFER_DARK) +app.run(sys.argv) \ No newline at end of file diff --git a/hypr/apps/ml4w-welcome/src/icon-small.png b/hypr/apps/ml4w-welcome/src/icon-small.png new file mode 100644 index 0000000000000000000000000000000000000000..92a54e08601385f5d8b7c8e6a987bd89cdb092cc GIT binary patch literal 4859 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�njq~2U=!IVo)TO18E05$2z%%XX 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 m&SXdDN4Jt9AX + + + + + + +

+ +
+ + ML4W GitLab + app.gitlab + + + ML4W YouTube Channel + app.youtube + +
+ +
+ + About + app.about + + + Exit + app.quit + +
+ +
+ + + + +
+ + Update Wallpaper + app.wallpaper + + + Change Waybar Theme + app.waybartheme + +
+
+ + Hyprland Settings + app.settings + +
+
+ + Update your system + app.update + + + Cleanup your system + app.cleanup + +
+
+ + Reload Waybar + app.waybar_reload + +
+
+ + + \ No newline at end of file diff --git a/hypr/conf/ml4w.conf b/hypr/conf/ml4w.conf index d448b98..6cacacb 100644 --- a/hypr/conf/ml4w.conf +++ b/hypr/conf/ml4w.conf @@ -4,12 +4,18 @@ windowrulev2 = float,class:(com.ml4w.welcome) windowrulev2 = size 700 600,class:(com.ml4w.welcome) +windowrulev2 = nomaximizerequest,class:(com.ml4w.welcome) +windowrulev2 = nofullscreenrequest,class:(com.ml4w.welcome) windowrulev2 = center,class:(com.ml4w.welcome) windowrulev2 = float,class:(ml4w-welcome.py) windowrulev2 = size 400 500,class:(ml4w-welcome.py) +windowrulev2 = nomaximizerequest,class:(ml4w-welcome.py) +windowrulev2 = nofullscreenrequest,class:(ml4w-welcome.py) windowrulev2 = center,class:(ml4w-welcome.py) windowrulev2 = float,class:(dotfiles-floating) windowrulev2 = size 1000 800,class:(dotfiles-floating) -windowrulev2 = center,class:(dotfiles-floating) \ No newline at end of file +windowrulev2 = nomaximizerequest,class:(dotfiles-floating) +windowrulev2 = nofullscreenrequest,class:(dotfiles-floating) +windowrulev2 = center,class:(dotfiles-floating) diff --git a/waybar/modules.json b/waybar/modules.json index 9092c35..ed628c0 100644 --- a/waybar/modules.json +++ b/waybar/modules.json @@ -58,6 +58,13 @@ "separate-outputs": true }, + // ML4W Welcome App + "custom/ml4w-welcome": { + "on-click": "cd ~/dotfiles/hypr/apps/ml4w-welcome; python ml4w-welcome.py", + "format": " ", + "tooltip": false + }, + // Youtube Subscriber Count "custom/youtube": { "format": " {}", diff --git a/waybar/themes/ml4w-blur-bottom/config b/waybar/themes/ml4w-blur-bottom/config index 3ae85e0..2074112 100644 --- a/waybar/themes/ml4w-blur-bottom/config +++ b/waybar/themes/ml4w-blur-bottom/config @@ -68,6 +68,7 @@ "tray", // END TRAY TOOGLE "custom/exit", + "custom/ml4w-welcome", "clock" ] } diff --git a/waybar/themes/ml4w-blur/config b/waybar/themes/ml4w-blur/config index 694ba89..838c2b4 100644 --- a/waybar/themes/ml4w-blur/config +++ b/waybar/themes/ml4w-blur/config @@ -67,6 +67,7 @@ "tray", // END TRAY TOOGLE "custom/exit", + "custom/ml4w-welcome", "clock" ] } diff --git a/waybar/themes/ml4w-blur/style.css b/waybar/themes/ml4w-blur/style.css index b058920..f907226 100644 --- a/waybar/themes/ml4w-blur/style.css +++ b/waybar/themes/ml4w-blur/style.css @@ -183,6 +183,14 @@ window#waybar.empty #window { margin-right:20px; } +#custom-ml4w-welcome { + margin-right: 15px; + background-image: url("../../../hypr/apps/ml4w-welcome/src/icon-small.png"); + background-repeat: no-repeat; + background-position: center; + padding-right: 24px; +} + /* ----------------------------------------------------- * Idle Inhibator * ----------------------------------------------------- */ diff --git a/waybar/themes/ml4w-bottom/config b/waybar/themes/ml4w-bottom/config index 9951224..e30d232 100644 --- a/waybar/themes/ml4w-bottom/config +++ b/waybar/themes/ml4w-bottom/config @@ -67,6 +67,7 @@ "tray", // END TRAY TOOGLE "custom/exit", + "custom/ml4w-welcome", "clock" ] } diff --git a/waybar/themes/ml4w/config b/waybar/themes/ml4w/config index c7e5c4f..f66036e 100644 --- a/waybar/themes/ml4w/config +++ b/waybar/themes/ml4w/config @@ -67,6 +67,7 @@ "tray", // END TRAY TOOGLE "custom/exit", + "custom/ml4w-welcome", "clock" ] } diff --git a/waybar/themes/ml4w/style.css b/waybar/themes/ml4w/style.css index 58973a4..ebc0e17 100644 --- a/waybar/themes/ml4w/style.css +++ b/waybar/themes/ml4w/style.css @@ -184,6 +184,14 @@ window#waybar.empty #window { margin-right:20px; } +#custom-ml4w-welcome { + margin-right: 15px; + background-image: url("../../../hypr/apps/ml4w-welcome/src/icon-small.png"); + background-repeat: no-repeat; + background-position: center; + padding-right: 24px; +} + /* ----------------------------------------------------- * Idle Inhibator * ----------------------------------------------------- */