Skip to content

Commit fe2e57f

Browse files
committed
fix: flatpak
1 parent ea8c7b3 commit fe2e57f

4 files changed

Lines changed: 235 additions & 4 deletions

File tree

‎.github/workflows/flatpak-build.yml‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ jobs:
2424
sudo apt-get install -y flatpak flatpak-builder
2525
flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
2626
27+
- name: Install Python dependencies
28+
run: |
29+
pip3 install --user ttkbootstrap pygments
30+
2731
- name: Cache Flatpak builder dependencies
2832
uses: actions/cache@v4
2933
with:
@@ -35,7 +39,7 @@ jobs:
3539
- name: Build Flatpak
3640
run: |
3741
cd build/flatpak
38-
flatpak-builder --user --install-deps-from=flathub --force-clean --share=network --share=ipc build-dir org.securebits.bashscriptmaker.yml
42+
flatpak-builder --user --install-deps-from=flathub --force-clean --share=network --share=ipc --share=session-bus build-dir org.securebits.bashscriptmaker.yml
3943
4044
- name: Create Flatpak Bundle
4145
run: |

‎bash_script_maker_flatpak.py‎

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Bash-Script-Maker - Vereinfachte Flatpak-Version
5+
Ein benutzerfreundliches GUI-Programm zur Erstellung von Bash-Scripts
6+
"""
7+
8+
import tkinter as tk
9+
from tkinter import ttk, messagebox, filedialog, scrolledtext
10+
import os
11+
import subprocess
12+
import sys
13+
import threading
14+
15+
class BashScriptMaker:
16+
def __init__(self, root):
17+
self.root = root
18+
self.root.title("Bash-Script-Maker")
19+
self.root.geometry("1000x700")
20+
21+
# Variables
22+
self.current_file = None
23+
24+
# Create GUI
25+
self.create_widgets()
26+
27+
def create_widgets(self):
28+
# Menu
29+
menubar = tk.Menu(self.root)
30+
self.root.config(menu=menubar)
31+
32+
file_menu = tk.Menu(menubar, tearoff=0)
33+
menubar.add_cascade(label="Datei", menu=file_menu)
34+
file_menu.add_command(label="Neu", command=self.new_file)
35+
file_menu.add_command(label="Öffnen", command=self.open_file)
36+
file_menu.add_command(label="Speichern", command=self.save_file)
37+
file_menu.add_command(label="Speichern unter...", command=self.save_as_file)
38+
file_menu.add_separator()
39+
file_menu.add_command(label="Beenden", command=self.root.quit)
40+
41+
run_menu = tk.Menu(menubar, tearoff=0)
42+
menubar.add_cascade(label="Ausführen", menu=run_menu)
43+
run_menu.add_command(label="Script ausführen", command=self.run_script)
44+
45+
# Main frame
46+
main_frame = ttk.Frame(self.root)
47+
main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
48+
49+
# Left panel - Commands
50+
left_frame = ttk.LabelFrame(main_frame, text="Befehle")
51+
left_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10))
52+
53+
# Command buttons
54+
commands = [
55+
("Shebang", self.insert_shebang),
56+
("Echo", self.insert_echo),
57+
("Variable", self.insert_variable),
58+
("If-Statement", self.insert_if),
59+
("For-Loop", self.insert_for),
60+
("While-Loop", self.insert_while),
61+
("Function", self.insert_function),
62+
("Kommentar", self.insert_comment),
63+
]
64+
65+
for cmd_name, cmd_func in commands:
66+
btn = ttk.Button(left_frame, text=cmd_name, command=cmd_func, width=15)
67+
btn.pack(pady=2, padx=5, fill=tk.X)
68+
69+
# Right panel - Editor
70+
right_frame = ttk.Frame(main_frame)
71+
right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
72+
73+
# Editor
74+
self.text_editor = scrolledtext.ScrolledText(
75+
right_frame,
76+
wrap=tk.NONE,
77+
font=("Consolas", 11),
78+
bg="#2d3748",
79+
fg="#e2e8f0",
80+
insertbackground="#ffffff"
81+
)
82+
self.text_editor.pack(fill=tk.BOTH, expand=True)
83+
84+
# Status bar
85+
self.status_bar = ttk.Label(self.root, text="Bereit", relief=tk.SUNKEN)
86+
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
87+
88+
def insert_shebang(self):
89+
self.text_editor.insert(tk.INSERT, "#!/bin/bash\n")
90+
91+
def insert_echo(self):
92+
self.text_editor.insert(tk.INSERT, 'echo "Hello World"\n')
93+
94+
def insert_variable(self):
95+
self.text_editor.insert(tk.INSERT, 'VARIABLE="value"\necho "$VARIABLE"\n')
96+
97+
def insert_if(self):
98+
template = '''if [ condition ]; then
99+
# commands
100+
elif [ condition ]; then
101+
# commands
102+
else
103+
# commands
104+
fi
105+
'''
106+
self.text_editor.insert(tk.INSERT, template)
107+
108+
def insert_for(self):
109+
template = '''for item in list; do
110+
echo "$item"
111+
done
112+
'''
113+
self.text_editor.insert(tk.INSERT, template)
114+
115+
def insert_while(self):
116+
template = '''while [ condition ]; do
117+
# commands
118+
done
119+
'''
120+
self.text_editor.insert(tk.INSERT, template)
121+
122+
def insert_function(self):
123+
template = '''function_name() {
124+
# commands
125+
return 0
126+
}
127+
'''
128+
self.text_editor.insert(tk.INSERT, template)
129+
130+
def insert_comment(self):
131+
self.text_editor.insert(tk.INSERT, "# Kommentar\n")
132+
133+
def new_file(self):
134+
if messagebox.askyesno("Neu", "Aktuelles Script verwerfen?"):
135+
self.text_editor.delete(1.0, tk.END)
136+
self.current_file = None
137+
self.update_title()
138+
139+
def open_file(self):
140+
filename = filedialog.askopenfilename(
141+
title="Script öffnen",
142+
filetypes=[("Bash Scripts", "*.sh"), ("Alle Dateien", "*.*")]
143+
)
144+
if filename:
145+
try:
146+
with open(filename, 'r', encoding='utf-8') as f:
147+
content = f.read()
148+
self.text_editor.delete(1.0, tk.END)
149+
self.text_editor.insert(1.0, content)
150+
self.current_file = filename
151+
self.update_title()
152+
except Exception as e:
153+
messagebox.showerror("Fehler", f"Datei konnte nicht geöffnet werden: {e}")
154+
155+
def save_file(self):
156+
if self.current_file:
157+
self.save_to_file(self.current_file)
158+
else:
159+
self.save_as_file()
160+
161+
def save_as_file(self):
162+
filename = filedialog.asksaveasfilename(
163+
title="Script speichern",
164+
defaultextension=".sh",
165+
filetypes=[("Bash Scripts", "*.sh"), ("Alle Dateien", "*.*")]
166+
)
167+
if filename:
168+
self.save_to_file(filename)
169+
self.current_file = filename
170+
self.update_title()
171+
172+
def save_to_file(self, filename):
173+
try:
174+
content = self.text_editor.get(1.0, tk.END)
175+
with open(filename, 'w', encoding='utf-8') as f:
176+
f.write(content)
177+
# Make executable
178+
os.chmod(filename, 0o755)
179+
self.status_bar.config(text=f"Gespeichert: {filename}")
180+
except Exception as e:
181+
messagebox.showerror("Fehler", f"Datei konnte nicht gespeichert werden: {e}")
182+
183+
def run_script(self):
184+
if not self.current_file:
185+
if messagebox.askyesno("Speichern", "Script muss erst gespeichert werden. Jetzt speichern?"):
186+
self.save_as_file()
187+
if not self.current_file:
188+
return
189+
else:
190+
return
191+
192+
def run_in_thread():
193+
try:
194+
result = subprocess.run(
195+
["bash", self.current_file],
196+
capture_output=True,
197+
text=True,
198+
timeout=30
199+
)
200+
201+
output = result.stdout + result.stderr
202+
if output:
203+
messagebox.showinfo("Script-Ausgabe", output)
204+
else:
205+
messagebox.showinfo("Script-Ausgabe", "Script erfolgreich ausgeführt (keine Ausgabe)")
206+
207+
except subprocess.TimeoutExpired:
208+
messagebox.showerror("Fehler", "Script-Ausführung abgebrochen (Timeout)")
209+
except Exception as e:
210+
messagebox.showerror("Fehler", f"Script-Ausführung fehlgeschlagen: {e}")
211+
212+
threading.Thread(target=run_in_thread, daemon=True).start()
213+
214+
def update_title(self):
215+
title = "Bash-Script-Maker"
216+
if self.current_file:
217+
title += f" - {os.path.basename(self.current_file)}"
218+
self.root.title(title)
219+
220+
def main():
221+
root = tk.Tk()
222+
app = BashScriptMaker(root)
223+
root.mainloop()
224+
225+
if __name__ == "__main__":
226+
main()

‎flatpak/org.securebits.bashscriptmaker.yml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ modules:
1616
- name: bash-script-maker
1717
buildsystem: simple
1818
build-commands:
19-
- pip3 install --prefix=/app ttkbootstrap pygments
20-
- pip3 install --prefix=/app --no-deps .
19+
- mkdir -p /app/bin
20+
- cp bash_script_maker_flatpak.py /app/bin/bash-script-maker
21+
- chmod +x /app/bin/bash-script-maker
2122
sources:
2223
- type: dir
2324
path: ../

‎setup_flatpak.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
"ttkbootstrap>=1.10.1",
1515
"pygments>=2.15.1",
1616
],
17-
)
17+
)

0 commit comments

Comments
 (0)