107 Commits
Author SHA1 Message Date
Luxferre d0605f3c8f tetris: the # key emits XK_KP_Divide on this device, register that for pause
Correct the pause binding: the physical # key produces XK_KP_Divide
(previously assumed XK_slash). On-screen label still reads '# PAUSE'.
2026-10-23 20:40:54 +03:00
Luxferre 5e41abe2a8 tetris: register the # key (which emits XK_slash on this device) as pause
The physical # key produces XK_slash, not XK_numbersign, so add XK_slash
to the pause binding. The on-screen label still reads '# PAUSE'.
2026-10-23 20:36:41 +03:00
Luxferre 58071b374c games: fix font glyphs, Snake edge-wrap, snappier Snake
Font: add missing bitmap glyphs (/ # * + =) to both Snake and Tetris so
control labels like '4/6 MOVE' and '# PAUSE' render correctly. Also hoist
XSetForeground out of the per-pixel loop in draw_text (both games).

Snake: remove the wall-collision death; the head now wraps through the
opposite edge ((hx+COLS)%COLS, (hy+ROWS)%ROWS). Base speed raised from
70->100 px/sec (~128ms -> ~90ms per step) so it feels less laggy; the
+1 px/sec per 5 food progressive difficulty is unchanged.
2026-10-23 20:32:50 +03:00
Luxferre fdcdb89684 games: progressive difficulty + Tetris controls panel
Snake: speed derived from pixels/second; +1 px/sec per 5 food eaten
(pps = 70 + food/5, step = cell*1000/pps, floored at 40ms).

Tetris: speed derived from pixels/second; +1 px/sec per 10 lines cleared
(pps = 23 + lines/10, step = CELL*1000/pps, floored at 40ms), replacing
the old level-driven formula. Level still drives the score multiplier.

Tetris: list all controls concisely in the free space of the right panel
(KEYS, 4/6 MOVE, 2 ROTATE, 8 SOFT, 0 DROP, # PAUSE, 5 OK).
2026-10-23 20:17:15 +03:00
Luxferre 10b67c0f30 tetris: let Center/OK/Enter key also hard-drop like 0 2026-10-23 19:55:41 +03:00
Luxferre c9cbc99064 tetris: make next-piece preview frame 1px wider (top-left unchanged, piece untouched) 2026-10-23 19:45:17 +03:00
Luxferre bb48674506 tetris: lower next-piece preview by another 2px 2026-10-23 19:38:11 +03:00
Luxferre 08f3b90228 tetris: lower next-piece preview by another 2px 2026-10-23 19:35:00 +03:00
Luxferre f52b59fd0a tetris: lower the next-piece preview a few more pixels within its frame 2026-10-23 19:29:02 +03:00
Luxferre 36757c3f46 tetris: add vertical separator between playfield and side panel; enlarge next-piece preview
Draw a bright vertical divider in the gap between the playfield and the side
panel so the two areas are clearly separated, and render the NEXT piece larger
(pcell 6 -> 11) centered inside a framed preview box.
2026-10-23 19:18:32 +03:00
Luxferre 70ef9860be fix(games): inset windows so dwm's native border stays on-screen
dwm adds a borderpx (1) border around every client, so a window sized to
fill the usable area (240x296) overflowed the 240x320 screen by 2px on the
right and bottom, clipping the native window border. Offset the requested
position by the border width and shrink by 3*borderpx so the framed window
exactly meets the screen edges with the native border fully visible.
2026-10-23 19:06:31 +03:00
Luxferre 313e137d87 games: auto-size windows to available screen; dmenu shows Sys menu from any app 2026-10-23 18:50:12 +03:00
Luxferre 2a12f8bdb4 fix(games): size windows to content with edge border; add Games to app-context menu 2026-10-23 16:54:13 +03:00
Luxferre bf4652ca5b fix(games): single playfield border, snake score in top strip, no soft-drop scoring, 239x295 window 2026-10-23 16:07:35 +03:00
Luxferre 1dd9fac313 fix(games): correct Tetris rotation, fix input/render lag, visible window frame
- Tetris: replace pivot-based rotation with explicit 4-state SHAPES
  table (classic SRS-style) so rotation is correct and the O piece no
  longer drifts on rotate; keep simple wall-kick offsets.
- Both: render immediately after processing input (not only on gravity
  steps) so rotation/movement is no longer laggy.
- Both: draw the window frame inset by 2-3px (double line) so the right
  and bottom edges are actually visible instead of clipped at the edge.
2026-10-23 15:47:30 +03:00
Luxferre 6bf4139263 fix(games): complete font (U/W + A-Z), fix Tetris gravity, frame + center overlays
- Font: add missing glyphs (U, W and complete A-Z) to both Snake and
  Tetris 5x7 bitmap fonts so PAUSE/RESUME/NEW GAME render correctly.
- Tetris: the gravity loop never advanced nextTick after a step, so the
  piece dropped almost instantly every frame. Advance nextTick by speed
  after each step (matching Snake) so gravity honours the configured rate.
- Both: draw a 1px frame around the whole 240x296 window (right/bottom
  edges were previously absent) and clear the playfield to black behind
  PAUSE/GAME OVER text for contrast.
- Both: fix centering of overlay labels (GAME OVER, 5 RESUME, 5 NEW GAME).
2026-10-23 15:30:29 +03:00
Luxferre 3eb54e4306 fix(games): correct Snake self-collision on spawn, enlarge Tetris, brighten labels
Snake: the snake was initialized with its head at the left end while
moving right, so the first gravity step walked the head into its own
body and the game started at Game Over. Initialize the head at the
right end (cx) so the initial direction is valid.

Tetris: enlarge the playfield cell (10 -> 12px) so pieces are not too
small, and slow gravity (800ms base, gentler per-level ramp, 250ms
floor) so pieces do not fall too fast.

Both: brighten the secondary/dim text colour (0x0a3a0a -> 0x2f9f2f)
so score/label/menu text is actually legible on the black background.

Also wire the Games section into the real main menu: the system menu
is hardcoded in the dwm-plugin dmenu (src/sxmo-dmenu/dmenu.c), not in
sxmo_appmenu.sh, so add a 'games' builtin menu that loads
sxmo_hook_games.sh and a Games entry after Apps in the sys menu, plus
scripts/build-dmenu.sh to cross-compile dmenu.so.
2026-10-23 14:57:59 +03:00
Luxferre 5f467b02fa feat(games): add Snake and Tetris X11 games with menu integration
Add two standalone X11 games (not DWM plugins) for the Nokia 8110 keypad:
- src/games/snake.cpp: Nokia Snake II-style game, 240x296, built-in 5x7 font
- src/games/tetris.cpp: Tetris with next-piece preview, levels, line clears

Both float as dialog windows in dwm, use a self-contained bitmap font (no
font-file dependency), and are controlled via the numeric keypad (2/4/6/8
directions, 5 action) with arrow-key fallbacks.

- scripts/build-games.sh: Docker armv7 cross-compile (mirrors build-sxmo-x11.sh)
- overlay/rootfs/usr/share/sxmo/default_hooks/sxmo_hook_games.sh: Games menu hook
- overlay/rootfs/usr/bin/sxmo_appmenu.sh: add 'Games' entry after 'Apps' and a
  games submenu case

Binaries committed to prebuilt/games and overlay/rootfs/usr/bin per repo
convention. Deployed and verified on the live device (window maps, dwm focuses
it, keypad input reaches the game).
2026-10-23 14:29:48 +03:00
Luxferre 3f37e4efa1 fix(sxmo): re-enable automatic screen-off on idle to stop backlight battery drain
The previous commit disabled sxmo_idle.sh and the idle_locker in the
unlock/lock hooks, leaving the display backlight pinned at maximum
brightness forever (Xorg runs with -s 0 -dpms and /sys/power/state is
empty, so the panel never blanks). On a phone with no suspend this is by
far the dominant battery drain.

Restore sxmo_idle.sh and start idle_locker from the unlock and lock hooks
so the screen blanks after SXMO_UNLOCK_IDLE_TIME (default 30s) / once
locked after SXMO_LOCK_IDLE_TIME (default 8s). Locking itself stays
explicit-only, matching the documented design; only the display blanks.

Verified live on the device: after the idle timeout the state transitions
to screenoff and /sys/class/backlight/backlight/brightness drops to 0.
2026-10-23 08:45:42 +03:00
Luxferre 5eb8be223d fix(sxmo): simplify sxmo_timezonechange.sh to always use the Alpine flow
SXMO_OS is always bananarchy (an Alpine derivative) on this device, so
the SXMO_OS case, the change_systemd branch, and the nixos branch were
dead code. Drop them and always run the Alpine flow
(doas setup-timezone -z), which is what bananarchy uses.
2026-10-22 23:54:45 +03:00
Luxferre 3777a27bac fix(x11): engage fcitx by default so dmenu text-input dialogs work
Text-input dialogs (Wi-Fi SSID/Passphrase, search queries, config
prompts, etc.) invoke dmenu with -p but never -t, so the XIM/fcitx
routing that was gated solely by use_text_input was never enabled and
fcitx never activated on dmenu input; on the numeric keypad only raw
digits could be entered, making the dialogs non-functional.

Decouple the fcitx/IME routing from the -t flag via a new engage_ime
flag (default on) while keeping use_text_input for its output/selection
semantics, and skip routing Enter to fcitx when a menu list is present
so menu selection is never stolen by the T9 commit. XFilterEvent already
returns False when fcitx is toggled off via the mode switcher, so the
dialogs now respect the Fcitx mode switcher automatically.
2026-10-22 23:44:50 +03:00
Luxferre 1e14ffdbd0 fix(x11): keep /usr/bin/Xorg non-setuid (0755) for rootless elogind startup 2026-10-22 22:30:43 +03:00
Luxferre 179cc3066b feat(x11): disable X screensaver/DPMS blanking and enforce explicit-only locking 2026-10-22 22:15:28 +03:00
Luxferre c646800dbf fix(power): invoke /usr/bin/doas and /usr/bin/sudo by absolute path in sxmo_power.sh 2026-10-22 22:04:01 +03:00
Luxferre b12cd738af build: add date-based release versioning script and remove hardcoded version 2026-10-22 20:20:16 +03:00
Luxferre 48aaacf04f Match top bar background to main theme background across all themes 2026-10-22 18:22:49 +03:00
Luxferre f90f5f65b6 Add 15 pre-installed .xth themes (20 total) and update docs 2026-10-22 18:16:35 +03:00
Luxferre 4e503d0654 Fix Bantam Apps menu entry, st XIM focus, and fcitx5-t9 InputContextDestroyed crash 2026-10-22 16:10:56 +03:00
Luxferre 6e58218e10 Add callscreen DWM plugin for incoming and active voice calls 2026-10-22 10:17:24 +03:00
Luxferre cbac6743bc Add AGENTS.md project outline and conventions guide 2026-10-22 09:27:26 +03:00
Luxferre 9002560a38 Fix fcitx5-t9 * longpress auto-repeat and reset Ctl mode on focus/window change 2026-10-21 21:04:53 +03:00
Luxferre a31595070c Add unified Xresources theme engine, Default.xth export, and xthemes manager plugin 2026-10-21 20:36:27 +03:00
Luxferre f615c6ddbe Update documentation for recent features and remove third-party .md files 2026-10-21 18:12:39 +03:00
Luxferre 1ee112561c Fix sxmo_power.sh polkit multi-session auth and dmenu PATH 2026-10-21 17:59:11 +03:00
Luxferre d240f25131 Integrate dmenu as a preloaded zero-lag DWM plugin (dmenu.so) 2026-10-21 17:37:51 +03:00
Luxferre 7da7352a6d Add frotz to preinstalled package list 2026-10-21 16:33:43 +03:00
Luxferre e34ee15428 feat(sxmo): add Bantam AI agent to Apps menu running in terminal from $HOME 2026-10-21 16:28:58 +03:00
Luxferre 4bb95d42b0 fix(camera,sms,dwm): fix CAMSS AXI frame-boundary stop, SMS draft button label, and post-reboot softkey responsiveness 2026-10-21 16:00:41 +03:00
Luxferre 55b20c5b85 Add preloaded SMS, File Manager, and Camera (live viewfinder) DWM plugins 2026-10-21 14:46:11 +03:00
Luxferre c1e5c646d6 Expand vertical dmenu to full screen (10 lines, 240x296) and rename St menu item to Terminal 2026-10-21 12:54:26 +03:00
Luxferre ed65604706 Document DWM plugin architecture, preloaded Dialer/CallLog/Contacts/XDrawer plugins, and desktop softkey labels 2026-10-21 12:39:50 +03:00
Luxferre d27ca9f224 Add Contacts DWM plugin, desktop Menu/Names softkey labels, and 15px plugin label fonts 2026-10-21 12:32:21 +03:00
Luxferre 996e80b095 Preload DWM plugins (dialer, calllog, xdrawer) with resident X11/Pango state and FIFO IPC 2026-10-21 11:57:23 +03:00
Luxferre 0a02400505 feat(dwm): add dynamic plugin system with xdrawer, dialer, and calllog plugins 2026-10-21 11:11:45 +03:00
Luxferre 7b7ae1dcc5 fix(xdrawer,dwm,dmenu): remove top bar gap and eliminate softkey menu latency 2026-10-21 10:11:11 +03:00
Luxferre 8045929c87 feat(x11): add XDrawer global phone controls drawer, softkey chord detection, and st/T9 scrollback 2026-10-21 09:26:41 +03:00
Luxferre da24f0d9ac fix(system,x11): set system-wide TERM=xterm-256color and C.UTF-8 locale 2026-10-21 00:16:33 +03:00
Luxferre 262d1a3649 fix(x11): ensure .profile launches bananarchy-x11-session.sh from tinydm-run-session 2026-10-21 00:03:04 +03:00
Luxferre 9cddcc1d08 feat(system): configure nano (-FEDSMAGic/max%_T2) as EDITOR, less -RXF as PAGER, add ed/rlwrap/less, and remove vim 2026-10-20 23:56:20 +03:00
Luxferre 673ee72dbc fix(x11,docs): use busctl+pkcheck for polkit power actions, increase st font to 18px, and format README overview list 2026-10-20 21:38:49 +03:00