tileos-welcome/tileos_welcome/main.py

170 lines
No EOL
6.4 KiB
Python

#!/usr/bin/env python3
# This file is part of Ubuntu Sway Remix project
# SPDX-FileCopyrightText: 2022 Aleksey Samoilov <samoilov.lex@gmail.com>
# SPDX-License-Identifier: GPL-3.0-or-later
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import os
import signal
import sys
import subprocess
from pathlib import Path
from PyQt6.QtWidgets import (QApplication, QMainWindow, QDialog)
from PyQt6.QtGui import QPixmap, QIcon
from PyQt6.QtCore import Qt, QDir
from tileos_welcome.ui_mainwindow import Ui_MainWindow
from tileos_welcome.ui_warning import Ui_WarningMessage
def get_config_home():
config_home = os.getenv('XDG_CONFIG_HOME') if os.getenv('XDG_CONFIG_HOME') else os.path.join(
os.getenv("HOME"), ".config/")
return config_home
dir_name = os.path.dirname(__file__)
config_home = get_config_home()
user = os.getlogin()
desktop_file = os.path.join(dir_name, "data/tileos-welcome.desktop")
autostart_dir = os.path.join(config_home, "autostart/")
icons = os.path.join(dir_name, "data/icons")
autostart_desktop_file = os.path.join(config_home, autostart_dir, "tileos-welcome.desktop")
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Icons for buttons
QDir.addSearchPath("icons", icons)
# Background
page_label = os.path.join(dir_name, "data/label.png")
page_pixmap = QPixmap(page_label).scaled(600, 300, Qt.AspectRatioMode.KeepAspectRatio)
self.ui.logo.setPixmap(page_pixmap)
self.ui.logo2.setPixmap(page_pixmap)
# Autostart (copying tileos-welcome.desktop to ~/.config/autostart)
if os.path.isfile(autostart_desktop_file):
self.ui.checkAutostart.setChecked(True)
# Detect running compositor and adapt Wiki button text to it
if os.getenv("SWAYSOCK"):
self.ui.btnWiki.setText("Sway Wiki")
self.ui.btnWiki.setIcon(QIcon("icons:sway.png"))
# Page 1
self.ui.btnInstall.clicked.connect(self.on_clicked_install)
self.ui.btnInstall.setIcon(QIcon("icons:install-system.svg"))
self.ui.btnGprd.clicked.connect(self.on_clicked_partition)
self.ui.btnGprd.setIcon(QIcon("icons:gparted.svg"))
self.ui.btnWebsite.clicked.connect(self.on_clicked_website)
self.ui.btnWebsite.setIcon(QIcon("icons:web.svg"))
self.ui.btnIssue.clicked.connect(self.on_clicked_tracker)
self.ui.btnIssue.setIcon(QIcon("icons:issue.svg"))
self.ui.btnContrib.clicked.connect(self.on_clicked_contribute)
self.ui.btnContrib.setIcon(QIcon("icons:contrib.svg"))
self.ui.btnTelegram.clicked.connect(self.on_clicked_telegram)
self.ui.btnTelegram.setIcon(QIcon("icons:telegram.svg"))
self.ui.btnNext.clicked.connect(self.on_page_switch)
self.ui.btnNext.setIcon(QIcon.fromTheme("go-next"))
self.ui.btnQuit.clicked.connect(self.exitApp)
self.ui.btnQuit.setIcon(QIcon("icons:exit.svg"))
# Page 2
self.ui.btnGTK.clicked.connect(self.on_clicked_gtk_theme)
self.ui.btnGTK.setIcon(QIcon("icons:gtk-theme.svg"))
self.ui.btnKvantum.clicked.connect(self.on_clicked_qt_theme)
self.ui.btnKvantum.setIcon(QIcon("icons:theme.svg"))
self.ui.btnDisplay.clicked.connect(self.on_clicked_display_settings)
self.ui.btnDisplay.setIcon(QIcon("icons:display.svg"))
self.ui.btnShell.setIcon(QIcon("icons:shell.svg"))
self.ui.btnInput.clicked.connect(self.on_clicked_input_settings)
self.ui.btnInput.setIcon(QIcon("icons:input.svg"))
self.ui.btnSoftware.setIcon(QIcon("icons:software.svg"))
self.ui.btnPrev.clicked.connect(self.on_page_switch)
self.ui.btnPrev.setIcon(QIcon.fromTheme("go-previous"))
self.ui.btnExit.clicked.connect(self.exitApp)
self.ui.btnExit.setIcon(QIcon("icons:exit.svg"))
def on_clicked_install(self):
self.msg = WarningMessage()
self.msg.setWindowTitle("Warning!")
self.msg.setModal(True)
if Path(f'{"/usr/bin/calamares"}').is_file() and user == "tileos":
subprocess.run("/usr/bin/install-tileos")
else:
self.msg.show()
def on_clicked_partition(self):
subprocess.run("xhost +si:localuser:root && pkexec /usr/sbin/gparted && xhost -si:localuser:root &", shell=True)
def on_clicked_website(self):
subprocess.run(["xdg-open", "https://tile-os.com"])
# TODO documentation link
def on_clicked_tracker(self):
subprocess.run(["xdg-open", "https://gitlab.com/tile-os/tileos/-/issues"])
def on_clicked_contribute(self):
subprocess.run(["xdg-open", "https://gitlab.com/tile-os"])
def on_clicked_telegram(self):
subprocess.run(["xdg-open", "https://t.me/tile_os"])
def on_clicked_gtk_theme(self):
subprocess.run("/usr/bin/nwg-look")
def on_clicked_qt_theme(self):
subprocess.run("/usr/bin/kvantummanager")
def on_clicked_display_settings(self):
subprocess.run("/usr/bin/nwg-displays")
# TODO shell selector
def on_clicked_input_settings(self):
subprocess.run("/usr/bin/sway-input-config")
# TODO software manager
def on_page_switch(self):
if self.ui.stackedWidget.currentIndex() == 0:
self.ui.stackedWidget.setCurrentIndex(1)
else:
self.ui.stackedWidget.setCurrentIndex(0)
def exitApp(self):
self.close()
class WarningMessage(QDialog):
def __init__(self):
super().__init__()
self.warningDialog = Ui_WarningMessage()
self.warningDialog.setupUi(self)
def main():
app = QApplication(["Welcome to TileOS!"])
app.setDesktopFileName("tileos-welcome")
win = MainWindow()
win.show()
sys.exit(app.exec())
if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL)
main()