Files
md-manuscript/INSTALL-debian12-surface.md
T
landon f473b63ee3 Initial commit: md-manuscript editor
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>
2026-07-25 15:17:42 -05:00

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 update and 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

  1. In the top bar, set Workspace (default ~/Manuscript) and tap Open — the folder is created if missing.
  2. Tap Init git once to version-control the workspace.
  3. To sync across devices, add a remote yourself, then use the ⟳ Sync button:
    cd ~/Manuscript
    git remote add origin <url>
    git push -u origin main
    
    You'll also want to set your git identity once on the tablet:
    git 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 → AccessibilityTyping → 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 → DisplaysScale (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.