88 lines
2.3 KiB
Python
Executable File
88 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import subprocess
|
|
|
|
# Import helper functions
|
|
sys.path.append(os.path.join(os.path.expanduser("~/.dotfiles"), "bin"))
|
|
from helpers.functions import printfe, run_command
|
|
|
|
|
|
def check_command_exists(command):
|
|
"""Check if a command is available in the system"""
|
|
try:
|
|
subprocess.run(
|
|
["which", command],
|
|
check=True,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
)
|
|
return True
|
|
except subprocess.CalledProcessError:
|
|
return False
|
|
|
|
|
|
def list_screen_sessions():
|
|
"""List all screen sessions"""
|
|
success, output = run_command(["screen", "-ls"])
|
|
return output
|
|
|
|
|
|
def wipe_dead_sessions():
|
|
"""Check and clean up dead screen sessions"""
|
|
screen_list = list_screen_sessions()
|
|
if "Dead" in screen_list:
|
|
print("Found dead sessions, cleaning up...")
|
|
run_command(["screen", "-wipe"])
|
|
|
|
|
|
def is_app_running(app_name):
|
|
"""Check if an app is already running in a screen session"""
|
|
screen_list = list_screen_sessions()
|
|
return app_name in screen_list
|
|
|
|
|
|
def start_app(app_name, command):
|
|
"""Start an application in a screen session"""
|
|
printfe("green", f"Starting {app_name} with command: {command}...")
|
|
run_command(["screen", "-dmS", app_name] + command.split())
|
|
time.sleep(1) # Give it a moment to start
|
|
|
|
|
|
def main():
|
|
# Define dictionary with app_name => command mapping
|
|
apps = {
|
|
"vesktop": "vesktop",
|
|
"ktailctl": "flatpak run org.fkoehler.KTailctl",
|
|
"nemo-desktop": "nemo-desktop",
|
|
}
|
|
|
|
# Clean up dead sessions if any
|
|
wipe_dead_sessions()
|
|
|
|
print("Starting auto-start applications...")
|
|
for app_name, command in apps.items():
|
|
# Get the binary name (first part of the command)
|
|
command_binary = command.split()[0]
|
|
|
|
# Check if the command exists
|
|
if check_command_exists(command_binary):
|
|
# Check if the app is already running
|
|
if is_app_running(app_name):
|
|
printfe("yellow", f"{app_name} is already running. Skipping...")
|
|
continue
|
|
|
|
# Start the application
|
|
start_app(app_name, command)
|
|
|
|
# Display screen sessions
|
|
print(list_screen_sessions())
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|