SaraSort: Flet GUI for configuring SaraSortd

Flowchart of inputs/outputs with editable arrows, service page (status,
controls, autostart, version, logs), config editor (form + raw), templates,
tools (warnings, filename tester, failed files) and settings with
SaraFem-compatible export/import. AppImage build and a SaraSuite manifest
in Packaging/.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
sarahandClaude Opus 5.5 committed 2026-10-07 22:23:36 +02:00
commit f7ed23edf9
22 files changed
+3399

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# Builds dist/SaraSort-x86_64.AppImage: a PyInstaller one-file build (with
# the font and icon bundled) wrapped by appimagetool, the same way SaraSuite's
# and SaraFem's AppImages are made. Needs appimagetool on PATH.
set -euo pipefail
cd "$(dirname "$(readlink -f "$0")")/.."
[ -d .venv ] || python3 -m venv .venv
.venv/bin/pip install --quiet --disable-pip-version-check -r requirements.txt pyinstaller
# --collect-data flet: without it ft.Icons crashes when frozen.
.venv/bin/pyinstaller --noconfirm --clean --log-level WARN \
--onefile --windowed --name SaraSort --collect-data flet \
--add-data "$PWD/assets:assets" \
--distpath build/PyInstaller/dist --workpath build/PyInstaller/work --specpath build/PyInstaller \
"$PWD/Main.py"
AppDir=build/AppDir
rm -rf "$AppDir"
mkdir -p "$AppDir/usr/bin"
cp build/PyInstaller/dist/SaraSort "$AppDir/usr/bin/SaraSort"
ln -s usr/bin/SaraSort "$AppDir/AppRun"
cp assets/Icon.png "$AppDir/SaraSort.png"
ln -s SaraSort.png "$AppDir/.DirIcon"
cat > "$AppDir/SaraSort.desktop" << DESKTOP
[Desktop Entry]
Type=Application
Name=SaraSort
Comment=Configure SaraSortd, the file sorting daemon
Exec=SaraSort
Icon=SaraSort
Terminal=false
Categories=Utility;
DESKTOP
mkdir -p dist
ARCH=x86_64 appimagetool --no-appstream "$AppDir" dist/SaraSort-x86_64.AppImage
echo "Built dist/SaraSort-x86_64.AppImage"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# Desktop-entry launcher: resolves the venv relative to this script rather
# than the caller's cwd, since .desktop Exec= lines are invoked with no
# guaranteed working directory.
cd "$(dirname "$(readlink -f "$0")")/.." || exit 1
exec .venv/bin/python Main.py "$@"
+27
View File
@@ -0,0 +1,27 @@
# Ready for SaraSuite: copy this folder to SaraSuite/Programs/SaraSort/
# (Manifest.toml + Templates/). Same shape as SaraFem's manifest.
Name = "SaraSort"
Description = "A GUI for configuring SaraSortd: a flowchart of what goes where, its service and logs, configs and templates."
[Source]
Git = "{GitHost}/SaraSort"
Include = ["*.py", "requirements.txt", "assets/**"]
Exclude = ["Packaging"]
[Python]
RequirementsFile = "requirements.txt"
[[Templates]]
Source = "Launch.sh"
Target = "{AppDir}/Packaging/Launch.sh"
Executable = true
[[Templates]]
Source = "SaraSort.desktop"
Target = "{ApplicationsDir}/SaraSort.desktop"
# Made by SaraSort itself: Config.toml, Layout.toml, Templates/.
[[Leftovers]]
Path = "{ConfigDir}"
Kind = "Config"
Note = "SaraSort's settings, flowchart layout and your templates"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# Desktop-entry launcher: resolves the venv relative to this script rather
# than the caller's cwd, since .desktop Exec= lines are invoked with no
# guaranteed working directory.
cd "$(dirname "$(readlink -f "$0")")/.." || exit 1
exec .venv/bin/python Main.py "$@"
@@ -0,0 +1,9 @@
[Desktop Entry]
Type=Application
Name=SaraSort
Comment=Configure SaraSortd, the file sorting daemon
Exec={AppDir}/Packaging/Launch.sh
Icon={AppDir}/assets/Icon.png
Terminal=false
Categories=Utility;
StartupNotify=true