mirror of
https://github.com/Snigdha-OS/snigdhaos-welcome.git
synced 2025-09-20 22:14:56 +02:00
update --
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
# Author : ArcoLinux & Team
|
# Author : ArcoLinux & Team
|
||||||
# Adopted for Snigdha OS Installation
|
# Adopted for Snigdha OS Installation
|
||||||
|
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import gi
|
import gi
|
||||||
import os
|
import os
|
||||||
@@ -10,13 +11,9 @@ import shutil
|
|||||||
import socket
|
import socket
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
import ui.GUI as GUI
|
import ui.GUI as GUI
|
||||||
from ui.MessageDialog import MessageDialogBootloader
|
from ui.MessageDialog import MessageDialogBootloader
|
||||||
# from ui.MessageDialog import MessageDialog
|
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
# gi.require_version("Wnck", "3.0")
|
|
||||||
from gi.repository import Gtk, GdkPixbuf, GLib, Gdk
|
from gi.repository import Gtk, GdkPixbuf, GLib, Gdk
|
||||||
|
|
||||||
base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__)))
|
base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__)))
|
||||||
@@ -73,48 +70,32 @@ class Main(Gtk.Window):
|
|||||||
super(Main, self).__init__(title="Snigdha OS Welcome - Arctic")
|
super(Main, self).__init__(title="Snigdha OS Welcome - Arctic")
|
||||||
self.set_border_width(10)
|
self.set_border_width(10)
|
||||||
self.set_default_size(860, 450)
|
self.set_default_size(860, 450)
|
||||||
self.set_icon_from_file(os.path.join(base_dir, "images/snigdhaos-icon.png"))
|
self.set_icon_from_file(os.path.join(base_dir, "images/snigdhaos-welcome-small.png"))
|
||||||
self.set_position(Gtk.WindowPosition.CENTER)
|
self.set_position(Gtk.WindowPosition.CENTER)
|
||||||
self.results = ""
|
self.results = ""
|
||||||
|
|
||||||
if not os.path.exists(GUI.home + "/.config/snigdhaos-welcome/"):
|
if not os.path.exists(GUI.home + "/.config/snigdhaos-welcome/"):
|
||||||
os.mkdir(GUI.home + "/.config/snigdhaos-welcome/")
|
os.mkdir(GUI.home + "/.config/snigdhaos-welcome/")
|
||||||
with open(GUI.Settings, "w") as f:
|
with open(GUI.Settings, "w") as f:
|
||||||
f.write("autostart=True")
|
f.write("autostart=True")
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
self.style_provider = Gtk.CssProvider()
|
self.style_provider = Gtk.CssProvider()
|
||||||
self.style_provider.load_from_data(css, len(css))
|
self.style_provider.load_from_data(css, len(css))
|
||||||
|
|
||||||
Gtk.StyleContext.add_provider_for_screen(
|
Gtk.StyleContext.add_provider_for_screen(
|
||||||
Gdk.Screen.get_default(),
|
Gdk.Screen.get_default(),
|
||||||
self.style_provider,
|
self.style_provider,
|
||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
|
||||||
)
|
)
|
||||||
|
|
||||||
# a queue to store package install progress
|
|
||||||
self.pkg_queue = Queue()
|
self.pkg_queue = Queue()
|
||||||
|
|
||||||
# default pacman lockfile
|
|
||||||
self.pacman_lockfile = "/var/lib/pacman/db.lck"
|
self.pacman_lockfile = "/var/lib/pacman/db.lck"
|
||||||
|
|
||||||
# get the username of the user running the welcome app
|
|
||||||
self.sudo_username = os.getlogin()
|
self.sudo_username = os.getlogin()
|
||||||
|
|
||||||
self.calamares_polkit = "/usr/bin/calamares_polkit"
|
self.calamares_polkit = "/usr/bin/calamares_polkit"
|
||||||
|
|
||||||
self.session = None
|
self.session = None
|
||||||
|
|
||||||
self.get_session()
|
self.get_session()
|
||||||
|
|
||||||
GUI.GUI(self, Gtk, GdkPixbuf)
|
GUI.GUI(self, Gtk, GdkPixbuf)
|
||||||
|
|
||||||
if GUI.username == GUI.user:
|
if GUI.username == GUI.user:
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=self.internet_notifier, args=(), daemon=True
|
target=self.internet_notifier, args=(), daemon=True
|
||||||
).start()
|
).start()
|
||||||
|
|
||||||
# returns the login session
|
|
||||||
def get_session(self):
|
def get_session(self):
|
||||||
try:
|
try:
|
||||||
self.session = os.environ.get("XDG_SESSION_TYPE")
|
self.session = os.environ.get("XDG_SESSION_TYPE")
|
||||||
@@ -130,13 +111,9 @@ class Main(Gtk.Window):
|
|||||||
else:
|
else:
|
||||||
self.popover.show_all()
|
self.popover.show_all()
|
||||||
|
|
||||||
# check if path exists
|
|
||||||
# used to check if /sys/firmware/efi/fw_platform_size exists
|
|
||||||
# if yes then display systemd-boot bootloader install option
|
|
||||||
def file_check(self, path):
|
def file_check(self, path):
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def on_mirror_clicked(self, widget):
|
def on_mirror_clicked(self, widget):
|
||||||
@@ -151,31 +128,24 @@ class Main(Gtk.Window):
|
|||||||
blue = int(rgba_color.blue * 255)
|
blue = int(rgba_color.blue * 255)
|
||||||
return "#{r:02x}{g:02x}{b:02x}".format(r=red, g=green, b=blue)
|
return "#{r:02x}{g:02x}{b:02x}".format(r=red, g=green, b=blue)
|
||||||
|
|
||||||
# offline install option
|
|
||||||
def on_easy_install_clicked(self, widget):
|
def on_easy_install_clicked(self, widget):
|
||||||
if not os.path.exists(self.pacman_lockfile):
|
if not os.path.exists(self.pacman_lockfile):
|
||||||
widget.set_name("button_easy_install_enabled")
|
widget.set_name("button_easy_install_enabled")
|
||||||
widget.get_child().set_markup(
|
widget.get_child().set_markup(
|
||||||
"<span size='large'>Offline Installation</span>"
|
"<span size='large'>Offline Installation</span>"
|
||||||
)
|
)
|
||||||
# DEPRECATED NOTICE: get_style_context deprecated in gtk 4.10 and will be removed in gtk 5.0
|
|
||||||
selected_bg_color = widget.get_style_context().lookup_color(
|
selected_bg_color = widget.get_style_context().lookup_color(
|
||||||
"theme_selected_bg_color"
|
"theme_selected_bg_color"
|
||||||
)
|
)
|
||||||
if selected_bg_color[0] is True:
|
if selected_bg_color[0] is True:
|
||||||
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
|
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
|
||||||
|
|
||||||
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
|
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
|
||||||
|
|
||||||
self.style_provider.load_from_data(custom_css, len(custom_css))
|
self.style_provider.load_from_data(custom_css, len(custom_css))
|
||||||
|
|
||||||
self.button_adv_install.set_name("button_adv_install")
|
self.button_adv_install.set_name("button_adv_install")
|
||||||
|
|
||||||
settings_beginner_file = "/etc/calamares/settings-beginner.conf"
|
settings_beginner_file = "/etc/calamares/settings-beginner.conf"
|
||||||
packages_no_sys_update_file = (
|
packages_no_sys_update_file = (
|
||||||
"/etc/calamares/modules/packages-no-system-update.conf"
|
"/etc/calamares/modules/packages-no-system-update.conf"
|
||||||
)
|
)
|
||||||
|
|
||||||
app_cmd = [
|
app_cmd = [
|
||||||
"sudo",
|
"sudo",
|
||||||
"cp",
|
"cp",
|
||||||
@@ -183,18 +153,14 @@ class Main(Gtk.Window):
|
|||||||
"/etc/calamares/settings.conf",
|
"/etc/calamares/settings.conf",
|
||||||
]
|
]
|
||||||
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
||||||
|
|
||||||
app_cmd = [
|
app_cmd = [
|
||||||
"sudo",
|
"sudo",
|
||||||
"cp",
|
"cp",
|
||||||
packages_no_sys_update_file,
|
packages_no_sys_update_file,
|
||||||
"/etc/calamares/modules/packages.conf",
|
"/etc/calamares/modules/packages.conf",
|
||||||
]
|
]
|
||||||
|
|
||||||
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
||||||
|
|
||||||
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
|
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
|
||||||
|
|
||||||
if efi_file_check is True:
|
if efi_file_check is True:
|
||||||
md = MessageDialogBootloader(
|
md = MessageDialogBootloader(
|
||||||
title="Choose Bootloader",
|
title="Choose Bootloader",
|
||||||
@@ -204,7 +170,6 @@ class Main(Gtk.Window):
|
|||||||
calamares_polkit=self.calamares_polkit,
|
calamares_polkit=self.calamares_polkit,
|
||||||
)
|
)
|
||||||
md.show_all()
|
md.show_all()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
|
subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
|
||||||
else:
|
else:
|
||||||
@@ -224,30 +189,22 @@ class Main(Gtk.Window):
|
|||||||
md.run()
|
md.run()
|
||||||
md.destroy()
|
md.destroy()
|
||||||
|
|
||||||
# online install option
|
|
||||||
def on_adv_install_clicked(self, widget):
|
def on_adv_install_clicked(self, widget):
|
||||||
if not os.path.exists(self.pacman_lockfile):
|
if not os.path.exists(self.pacman_lockfile):
|
||||||
widget.set_name("button_adv_install_enabled")
|
widget.set_name("button_adv_install_enabled")
|
||||||
widget.get_child().set_markup(
|
widget.get_child().set_markup(
|
||||||
"<span size='large'>Online Installation</span>"
|
"<span size='large'>Online Installation</span>"
|
||||||
)
|
)
|
||||||
|
|
||||||
# DEPRECATED NOTICE: get_style_context deprecated in gtk 4.10 and will be removed in gtk 5.0
|
|
||||||
selected_bg_color = widget.get_style_context().lookup_color(
|
selected_bg_color = widget.get_style_context().lookup_color(
|
||||||
"theme_selected_bg_color"
|
"theme_selected_bg_color"
|
||||||
)
|
)
|
||||||
if selected_bg_color[0] is True:
|
if selected_bg_color[0] is True:
|
||||||
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
|
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
|
||||||
|
|
||||||
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
|
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
|
||||||
|
|
||||||
self.style_provider.load_from_data(custom_css, len(custom_css))
|
self.style_provider.load_from_data(custom_css, len(custom_css))
|
||||||
|
|
||||||
self.button_easy_install.set_name("button_easy_install")
|
self.button_easy_install.set_name("button_easy_install")
|
||||||
|
|
||||||
settings_adv_file = "/etc/calamares/settings-advanced.conf"
|
settings_adv_file = "/etc/calamares/settings-advanced.conf"
|
||||||
system_update_file = "/etc/calamares/modules/packages-system-update.conf"
|
system_update_file = "/etc/calamares/modules/packages-system-update.conf"
|
||||||
|
|
||||||
app_cmd = [
|
app_cmd = [
|
||||||
"sudo",
|
"sudo",
|
||||||
"cp",
|
"cp",
|
||||||
@@ -255,18 +212,14 @@ class Main(Gtk.Window):
|
|||||||
"/etc/calamares/settings.conf",
|
"/etc/calamares/settings.conf",
|
||||||
]
|
]
|
||||||
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
||||||
|
|
||||||
app_cmd = [
|
app_cmd = [
|
||||||
"sudo",
|
"sudo",
|
||||||
"cp",
|
"cp",
|
||||||
system_update_file,
|
system_update_file,
|
||||||
"/etc/calamares/modules/packages.conf",
|
"/etc/calamares/modules/packages.conf",
|
||||||
]
|
]
|
||||||
|
|
||||||
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
||||||
|
|
||||||
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
|
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
|
||||||
|
|
||||||
if efi_file_check is True:
|
if efi_file_check is True:
|
||||||
md = MessageDialogBootloader(
|
md = MessageDialogBootloader(
|
||||||
title="Choose Bootloader",
|
title="Choose Bootloader",
|
||||||
@@ -276,10 +229,8 @@ class Main(Gtk.Window):
|
|||||||
calamares_polkit=self.calamares_polkit,
|
calamares_polkit=self.calamares_polkit,
|
||||||
)
|
)
|
||||||
md.show_all()
|
md.show_all()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
|
subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
"[ERROR]: Pacman lockfile found %s, is another pacman process running ?"
|
"[ERROR]: Pacman lockfile found %s, is another pacman process running ?"
|
||||||
@@ -296,7 +247,6 @@ class Main(Gtk.Window):
|
|||||||
)
|
)
|
||||||
md.run()
|
md.run()
|
||||||
md.destroy()
|
md.destroy()
|
||||||
|
|
||||||
def on_gp_clicked(self, widget):
|
def on_gp_clicked(self, widget):
|
||||||
app_cmd = ["/usr/bin/gparted"]
|
app_cmd = ["/usr/bin/gparted"]
|
||||||
pacman_cmd = [
|
pacman_cmd = [
|
||||||
@@ -322,7 +272,6 @@ class Main(Gtk.Window):
|
|||||||
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
|
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
|
||||||
response = md.run()
|
response = md.run()
|
||||||
md.destroy()
|
md.destroy()
|
||||||
|
|
||||||
if response == 1:
|
if response == 1:
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=self.check_package_queue, daemon=True
|
target=self.check_package_queue, daemon=True
|
||||||
@@ -365,7 +314,6 @@ class Main(Gtk.Window):
|
|||||||
"--noconfirm",
|
"--noconfirm",
|
||||||
"--needed",
|
"--needed",
|
||||||
]
|
]
|
||||||
|
|
||||||
if not self.check_package_installed("arandr"):
|
if not self.check_package_installed("arandr"):
|
||||||
if not os.path.exists(self.pacman_lockfile):
|
if not os.path.exists(self.pacman_lockfile):
|
||||||
md = Gtk.MessageDialog(
|
md = Gtk.MessageDialog(
|
||||||
@@ -381,7 +329,6 @@ class Main(Gtk.Window):
|
|||||||
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
|
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
|
||||||
response = md.run()
|
response = md.run()
|
||||||
md.destroy()
|
md.destroy()
|
||||||
|
|
||||||
if response == 1:
|
if response == 1:
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=self.check_package_queue, daemon=True
|
target=self.check_package_queue, daemon=True
|
||||||
@@ -411,10 +358,8 @@ class Main(Gtk.Window):
|
|||||||
)
|
)
|
||||||
md.run()
|
md.run()
|
||||||
md.destroy()
|
md.destroy()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
|
||||||
|
|
||||||
def remove_dev_package(self, pacman_cmd, package):
|
def remove_dev_package(self, pacman_cmd, package):
|
||||||
try:
|
try:
|
||||||
self.label_notify.set_name("label_style")
|
self.label_notify.set_name("label_style")
|
||||||
@@ -429,7 +374,6 @@ class Main(Gtk.Window):
|
|||||||
GLib.idle_add(
|
GLib.idle_add(
|
||||||
self.label_notify.hide,
|
self.label_notify.hide,
|
||||||
)
|
)
|
||||||
|
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
pacman_cmd,
|
pacman_cmd,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
@@ -469,7 +413,6 @@ class Main(Gtk.Window):
|
|||||||
"<span foreground='red'><b>Failed to remove dev package %s</b></span>"
|
"<span foreground='red'><b>Failed to remove dev package %s</b></span>"
|
||||||
% package,
|
% package,
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("[ERROR]: Exception in remove_dev_package(): %s" % e)
|
print("[ERROR]: Exception in remove_dev_package(): %s" % e)
|
||||||
self.label_notify.set_name("label_style")
|
self.label_notify.set_name("label_style")
|
||||||
@@ -481,16 +424,13 @@ class Main(Gtk.Window):
|
|||||||
"<span foreground='red'><b>Failed to remove dev package %s</b></span>"
|
"<span foreground='red'><b>Failed to remove dev package %s</b></span>"
|
||||||
% package,
|
% package,
|
||||||
)
|
)
|
||||||
|
|
||||||
def install_package(self, app_cmd, pacman_cmd, package):
|
def install_package(self, app_cmd, pacman_cmd, package):
|
||||||
try:
|
try:
|
||||||
self.label_notify.set_name("label_style")
|
self.label_notify.set_name("label_style")
|
||||||
|
|
||||||
GLib.idle_add(
|
GLib.idle_add(
|
||||||
self.label_notify.set_markup,
|
self.label_notify.set_markup,
|
||||||
"<span foreground='cyan'><b>Installing %s</b></span>" % package,
|
"<span foreground='cyan'><b>Installing %s</b></span>" % package,
|
||||||
)
|
)
|
||||||
|
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
pacman_cmd,
|
pacman_cmd,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
@@ -501,10 +441,8 @@ class Main(Gtk.Window):
|
|||||||
while True:
|
while True:
|
||||||
if process.poll() is not None:
|
if process.poll() is not None:
|
||||||
break
|
break
|
||||||
|
|
||||||
for line in process.stdout:
|
for line in process.stdout:
|
||||||
print(line.strip())
|
print(line.strip())
|
||||||
|
|
||||||
if self.check_package_installed(package):
|
if self.check_package_installed(package):
|
||||||
self.pkg_queue.put((0, app_cmd, package))
|
self.pkg_queue.put((0, app_cmd, package))
|
||||||
print("[INFO]: Pacman package install completed")
|
print("[INFO]: Pacman package install completed")
|
||||||
@@ -532,7 +470,6 @@ class Main(Gtk.Window):
|
|||||||
"<span foreground='orange'><b>Package %s install failed</b></span>"
|
"<span foreground='orange'><b>Package %s install failed</b></span>"
|
||||||
% package,
|
% package,
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("[ERROR]: Exception in install_package(): %s" % e)
|
print("[ERROR]: Exception in install_package(): %s" % e)
|
||||||
self.label_notify.set_name("label_style")
|
self.label_notify.set_name("label_style")
|
||||||
@@ -670,21 +607,14 @@ class Main(Gtk.Window):
|
|||||||
subprocess.run(
|
subprocess.run(
|
||||||
[
|
[
|
||||||
"pkexec",
|
"pkexec",
|
||||||
"/usr/bin/reflector",
|
"/usr/bin/rate-mirrors",
|
||||||
"--age",
|
"--concurrency",
|
||||||
"6",
|
"40",
|
||||||
"--latest",
|
"--disable-comments",
|
||||||
"21",
|
"--allow-root",
|
||||||
"--fastest",
|
|
||||||
"21",
|
|
||||||
"--threads",
|
|
||||||
"21",
|
|
||||||
"--sort",
|
|
||||||
"rate",
|
|
||||||
"--protocol",
|
|
||||||
"https",
|
|
||||||
"--save",
|
"--save",
|
||||||
"/etc/pacman.d/mirrorlist",
|
"/etc/pacman.d/mirrorlist",
|
||||||
|
"arch",
|
||||||
],
|
],
|
||||||
shell=False,
|
shell=False,
|
||||||
)
|
)
|
||||||
@@ -704,7 +634,7 @@ class Main(Gtk.Window):
|
|||||||
"--disable-comments",
|
"--disable-comments",
|
||||||
"--allow-root",
|
"--allow-root",
|
||||||
"--save",
|
"--save",
|
||||||
"/etc/pacman.d/mirrorlist",
|
"/etc/pacman.d/chaotic-mirrorlist",
|
||||||
"chaotic-aur",
|
"chaotic-aur",
|
||||||
],
|
],
|
||||||
shell=False,
|
shell=False,
|
||||||
@@ -713,7 +643,6 @@ class Main(Gtk.Window):
|
|||||||
GLib.idle_add(self.label_notify.set_markup, "<b>Mirrorlist updated</b>")
|
GLib.idle_add(self.label_notify.set_markup, "<b>Mirrorlist updated</b>")
|
||||||
GLib.idle_add(self.button_mirrors.set_sensitive, True)
|
GLib.idle_add(self.button_mirrors.set_sensitive, True)
|
||||||
|
|
||||||
|
|
||||||
def MessageBox(self, title, message):
|
def MessageBox(self, title, message):
|
||||||
md = Gtk.MessageDialog(
|
md = Gtk.MessageDialog(
|
||||||
parent=self,
|
parent=self,
|
||||||
|
Reference in New Issue
Block a user