Rust/egui desktop app: draggable markdown file list, editor, git sync, per-file chapter titles, and native ODT export. Includes README and Debian 12 (Surface) install guide. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.1 KiB
Installing md-manuscript on a Surface tablet (Debian 12 "Bookworm")
These steps build the app from source and set it up for touch use on a Microsoft
Surface running Debian 12 with the GNOME desktop. You do not need the
linux-surface custom kernel for this app — any working Debian 12 desktop is
fine.
Everything is done in a terminal. If your Surface is detached from its keyboard, turn on the on-screen keyboard first (see Surface tips).
1. One-time system setup
a. Build tools
Debian 12 ships Rust 1.63 in apt, which is too old for this project.
Install the Rust toolchain with rustup instead, plus a C linker.
sudo apt update
sudo apt install -y build-essential curl git
# Install rustup (choose option 1, the default, when prompted)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Load cargo into the current shell (or just open a new terminal)
. "$HOME/.cargo/env"
rustc --version # should print 1.8x or newer
b. Runtime GUI libraries
The compiled binary loads its graphics/windowing libraries at runtime (it links against only libc/libgcc). Most are already present under GNOME, but install the full set so it runs on both Wayland and X11:
sudo apt install -y \
libgl1 libegl1 libgl1-mesa-dri \
libwayland-client0 libwayland-egl1 libwayland-cursor0 \
libxkbcommon0 libxkbcommon-x11-0 \
libx11-6 libx11-xcb1 libxcursor1 libxi6 libxrandr2 libxinerama1 libxrender1
2. Get the source onto the tablet
Copy the md-manuscript project directory to the tablet (via USB, scp, or a
sync tool), or clone it if you've pushed it to a git remote:
# Example if you pushed it somewhere:
git clone <your-repo-url> ~/md-manuscript
The rest of these steps assume the source is at ~/md-manuscript.
3. Build
cd ~/md-manuscript
cargo build --release
The first build downloads dependencies and takes a few minutes on Surface
hardware. The result is ~/md-manuscript/target/release/md-manuscript.
If the build stops with "rustc 1.87.0 is not supported by … image@0.25.x", your Rust is older than expected — run
rustup updateand rebuild.
4. Install the binary and a launcher
Put the binary on your PATH and add a GNOME app entry so it appears in the
Activities/app grid and can be pinned to the dash (handy for touch):
# 4a. Binary
install -Dm755 target/release/md-manuscript ~/.local/bin/md-manuscript
# 4b. Desktop launcher
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/md-manuscript.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=md-manuscript
Comment=Draggable markdown manuscript editor with git sync and ODT export
Exec=md-manuscript
Icon=text-editor
Categories=Office;TextEditor;
Terminal=false
EOF
# 4c. Refresh the app list
update-desktop-database ~/.local/share/applications 2>/dev/null || true
Make sure ~/.local/bin is on your PATH (it is by default on Debian 12 if the
directory exists at login — otherwise add this to ~/.bashrc and re-login):
export PATH="$HOME/.local/bin:$PATH"
You can now launch md-manuscript by tapping its icon, or run
md-manuscript from a terminal.
5. First run
- In the top bar, set Workspace (default
~/Manuscript) and tap Open — the folder is created if missing. - Tap Init git once to version-control the workspace.
- To sync across devices, add a remote yourself, then use the ⟳ Sync button:
You'll also want to set your git identity once on the tablet:
cd ~/Manuscript git remote add origin <url> git push -u origin maingit config --global user.name "Your Name" git config --global user.email "you@example.com"
Surface-specific tips
On-screen keyboard (detached from Type Cover). GNOME Settings → Accessibility → Typing → turn on Screen Keyboard. It pops up automatically when you tap a text field. For terminal-heavy setup you may find it easier to attach the keyboard for the one-time install.
HiDPI / tiny or huge UI. Surface screens are very high resolution. The app follows the desktop's scale factor, so set it once in GNOME Settings → Displays → Scale (enable Fractional Scaling if you want values like 150%/175%). If you run under X11 and the size is still off, launch with an explicit factor:
WINIT_X11_SCALE_FACTOR=1.75 md-manuscript
Touch gestures.
- Tap a file name to open it.
- Reorder by pressing the
⠿handle and dragging up/down with your finger. - Scroll the file list or editor with a one-finger drag.
Wayland vs X11. GNOME on Debian 12 defaults to Wayland; the app supports it natively. If you hit a rendering glitch, log out and pick "GNOME on Xorg" from the gear menu on the login screen, or force X11 for one launch:
WINIT_UNIX_BACKEND=x11 md-manuscript
Updating
cd ~/md-manuscript
git pull # if you cloned it; otherwise re-copy the source
cargo build --release
install -Dm755 target/release/md-manuscript ~/.local/bin/md-manuscript
Uninstall
rm -f ~/.local/bin/md-manuscript
rm -f ~/.local/share/applications/md-manuscript.desktop
# Your manuscripts in ~/Manuscript and config in ~/.config/md-manuscript are left intact.
Troubleshooting
| Symptom | Fix |
|---|---|
error while loading shared libraries: libGL.so.1 (or similar) |
Install the runtime libraries in step 1b. |
| Window fails with "neither WAYLAND_DISPLAY nor DISPLAY is set" | You're in a text-only session/SSH; run it from the tablet's graphical desktop. |
Build error mentioning rustc … is not supported |
rustup update, then cargo build --release again. |
cargo: command not found |
Run . "$HOME/.cargo/env" or open a new terminal after installing rustup. |
| UI text far too small/large | Adjust GNOME Displays → Scale, or set WINIT_X11_SCALE_FACTOR (X11). |
| ⟳ Sync does nothing / errors in the Log panel | Set git config --global user.name/user.email, and ensure the origin remote and your SSH/HTTPS credentials are configured. |