Commit Graph
101 Commits
Author SHA1 Message Date
Luxferre b706865ee8 Update documentation with xmusic, xfiles media actions, ringtone volume and vibration 2026-10-25 17:34:26 +02:00
Luxferre 30c3e817dc Add xmusic tracker/audio player, xfiles media actions, ringtone volume & vibration fix 2026-10-25 17:31:54 +02:00
Luxferre ba2307d44c Update documentation for readability and add CHANGELOG.md for build a1025 (argonaut) 2026-10-25 16:37:00 +02:00
Luxferre 0aff8a3379 Prevent duplicate X11 session loops from killing Conky and daemonize Conky cleanly 2026-10-25 16:18:43 +02:00
Luxferre 651720b56b sxmo, plugins: restart Conky on time/timezone/wallpaper/logout and shorten # Input mode hints 2026-10-25 16:06:47 +02:00
Luxferre 7c707844cc contacts, modem: implement direct QRTR QMI UIM SIM phonebook import and export for SIM 1 and SIM 2 2026-10-25 15:30:24 +02:00
Luxferre ef18a33c9b dmenu: implement built-in zero-lag in-place multi-tap T9 input 2026-10-25 14:44:17 +02:00
Luxferre e77be498bf Harden DWM plugins against X11 stacking/keyboard grab races and speed up QMI status 2026-10-25 14:14:21 +02:00
Luxferre b2216c186f Fix QMI USSD async response handling and prevent st terminal popup 2026-10-25 13:32:17 +02:00
Luxferre fe8ba03941 Fix SIM2 PIN verification and replace Plymouth boot splash with rotating Bananarchy logo 2026-10-25 13:10:37 +02:00
Luxferre b7c57aab2f Fix OpenRC boot hang in msm-modem-uim-selection, USB gadget UDC race/unbind, and SIM2 lock sync 2026-10-25 12:32:46 +02:00
Luxferre 33d3d225c1 modem: bind QMI primary-gw-provisioning session before USIM PIN verification and fix SIM2 target slot resolution 2026-10-25 11:50:57 +02:00
Luxferre b56f310f21 Fix SIM2 QMI UIM provisioning, auto-enable ModemManager, PIN auto-prompt, call audio, and Dunst clearing 2026-10-25 11:31:41 +02:00
Luxferre 9b712dcbca flash-edl.sh: disable host USB autosuspend during EDL flashing 2026-10-25 10:42:29 +02:00
Luxferre 252197e857 flash-edl: send oem reboot-edl directly on Fastboot detection 2026-10-25 10:38:53 +02:00
Luxferre ebf0466b64 bootloader: restore original scm_dload_mode in lk2nd-msm8909.img 2026-10-25 10:28:12 +02:00
Luxferre 7a20ac08ca flash-edl: block host qcserial driver and remove sleep after Fastboot EDL kick 2026-10-25 10:04:47 +02:00
Luxferre 519c25c022 Fix lk2nd Fastboot key combo (D-Pad down) in MANUAL.md 2026-10-25 09:49:05 +02:00
Luxferre b6d88fdf02 Fix lk2nd EDL transition on MSM8905 and auto-kick Fastboot into EDL 2026-10-25 09:47:11 +02:00
Luxferre 0a65fc0ea2 Remove redundant boot-* and nokia-argon-sxmo.img image artifacts 2026-10-25 08:51:46 +02:00
Luxferre fb5b9c9982 Unify Power menu bootloader entry as 'Reboot to loader' into lk2nd Fastboot menu 2026-10-25 08:36:27 +02:00
Luxferre a117e74452 Add Fastboot/EDL reboot modes and SIM contact import/export 2026-10-25 07:56:44 +02:00
Luxferre a1e4f6ef8c build: drop redundant .sparse.img generation and update docs 2026-10-25 07:24:08 +02:00
Luxferre 60f7aedd08 docs: rewrite feature overview and sync plugin reference in README and MANUAL 2026-10-24 22:36:22 +03:00
Luxferre 97d031fcb0 wallpapers: remove duplicate and postmarketos wallpapers 2026-10-24 21:52:41 +03:00
Luxferre 5646f03ebe dwm-plugins: fix vibration test, AT debug channel, and Close softkey leak 2026-10-24 21:11:57 +03:00
Luxferre f394d2b135 Add Wallpapers and Ringtones to top-level Sys menu in dmenu.so 2026-10-24 20:10:42 +03:00
Luxferre dc59704547 Add ringtones/wallpapers plugins, AT console, dialer USSD/*#06#, and SIM icon fix 2026-10-24 19:58:11 +03:00
Luxferre e549aaf413 Add modem/networks DWM plugins, Dual-SIM & PIN/PUK support, built-in dmenu views, and game UX fixes 2026-10-24 18:59:48 +03:00
Luxferre 668a4da11d updated the manifesto 2026-10-24 17:32:52 +03:00
Luxferre 239114f6ce updated the manifesto 2026-10-24 17:30:21 +03:00
Luxferre 12b70a470a updated the manifesto 2026-10-24 17:25:34 +03:00
Luxferre 34f23280eb updated the manifesto 2026-10-24 17:16:22 +03:00
Luxferre 4a5975c982 updated the manifesto 2026-10-24 17:13:32 +03:00
Luxferre 0e670d7224 games: jitter-free stepping via timerfd + clearer Snake playfield
Replace the select() timeout sleep with a Linux timerfd high-resolution
timer. It fires on an absolute CLOCK_MONOTONIC deadline, so wakeups are
no longer quantized to the kernel tick (a short final wait was rounded
up to a whole tick, causing +-10-22ms jitter and lurches). The loop now
select()s on both the X connection fd and the timer fd, so input still
wakes it immediately and no busy-spin is needed -- the controls stay
responsive. A select()-timeout fallback is kept for non-timerfd setups.

Snake: draw a bright frame around the actual playfield so its boundary is
unmistakable, and move the SCORE/BEST label down into the margin between
the window frame and the playfield frame.
2026-10-24 14:21:24 +03:00
Luxferre eb78f314a3 games: rewrite both games with fixed-timestep accumulator loop
The snake speed instability was caused by cumulative timing drift in the
select()-based loop (nextTick reset to now+speed each step). Both games now
use a fixed-timestep accumulator: elapsed time is accumulated each frame and
the game logic steps when enough has built up, so movement is perfectly
periodic regardless of frame timing or rendering cost. Frame pacing caps
elapsed at 200ms to prevent a spiral of death.

Both files were fully rewritten to eliminate structural corruption (duplicate
function definitions / missing braces) introduced by many incremental edits:
- Snake: turn queue (max 2), batched body rendering, 90 px/sec base, 30 fps.
- Tetris: batched beveled-block rendering (XFillRectangles), Gameboy palette,
  XK_KP_Divide pause, 30 fps accumulator loop.

Both compile cleanly (no -Wall/-Wextra warnings) as valid armv7 ELF.
2026-10-24 10:31:10 +03:00
Luxferre 52ac64e9b3 games: fix timing drift with cumulative nextTick, 30fps render, 90 pps base
Root cause of unstable speed: nextTick was reset to 'now + speed' each step,
accumulating timing drift. Now uses 'nextTick += speed' with a floor (if
nextTick < now, reset to now) to prevent drift and catch-up spirals.

- Both games: 30 fps render cap (FRAME_MS = 33 ms), nextTick updated
  cumulatively to eliminate drift.
- Snake: base speed 90 px/sec (~100 ms per step at cell=9), turn queue
  unchanged, edge wrap unchanged.
- Tetris: gravity step uses cumulative nextTick, controls unchanged.
2026-10-24 09:44:24 +03:00
Luxferre 1d1c4524de games: revert to 60 fps, slower Snake base speed
Switched both games back to 60 fps (FRAME_MS = 16 ms) for smoother rendering
and reduced Snake base speed from 150 to 90 px/sec (~60 ms -> ~100 ms per
step at cell=9) so the snake is controllable and doesn't feel too fast.
Progressive difficulty (+1 px/sec per 5 food) and turn queue are unchanged.
2026-10-24 09:41:42 +03:00
Luxferre ff29160461 games: fix input/rendering lag and missed keypresses
Identified and fixed rendering/input optimization issues:
- Snake: added turn queue (max 2 pending turns) so rapid key presses are
  never lost; filters reversals and duplicates against the last queued
  direction. Batched snake body rendering into a single XFillRectangles call
  instead of one XFillRectangle per segment.
- Tetris: batched settled-block rendering into 3 XFillRectangles calls
  (body, highlight, shadow) instead of 5 XFillRectangle calls per cell.
  This reduces ~1000 X11 calls per frame to 3, fixing frame drops and
  input lag.
- Both: non-blocking input polling before every frame (already in place)
  ensures no keypress is missed.
2026-10-24 09:36:38 +03:00
Luxferre eee12181c7 games: responsive game loop with non-blocking input polling
Replaced the blocking select()-based main loop with a proper game loop:
- Process ALL pending X11 input (XPending) before every frame — no more
  missed keypresses from select() blocking for up to a full frame
- Render every frame at 30 fps (FRAME_MS = 33 ms) consistently
- Frame pacing uses select() with a timeout that wakes immediately on
  input, so keypresses are processed within milliseconds
- Game logic (snake steps, tetris gravity) still runs at its own rate via
  nextTick, decoupled from render rate

This eliminates input lag and missed keypresses in both Snake and Tetris.
2026-10-24 09:03:38 +03:00
Luxferre 8ccfdb8d44 games: 30 fps render loop + immediate Snake turns
Switched both games to a 30 fps render cap (FRAME_MS = 33 ms) for smoother,
more predictable frame pacing. Snake base speed raised to 150 px/sec (~60 ms
per step at cell=9) so turn commands take effect at the next step without
perceived lag. The buffered-direction model (latest keypress wins) is
unchanged — turns apply at the next step, which is immediate in snake terms.

Progressive difficulty (+1 px/sec per 5 food in Snake, +1 px/sec per 10 lines
in Tetris), edge wrap, Gameboy-style beveled blocks, and all controls are
unchanged.
2026-10-24 08:54:25 +03:00
Luxferre 9d4ca2e3a6 games: 60 fps rendering loop + smoother Snake controls
Both games now render at 60 fps independent of the game-logic step rate:
the main loop caps select() at one frame (16 ms) so the screen updates
smoothly even when gravity/snake steps are slow, and renders every frame
or whenever state changed.

Snake: replaced the turn queue with a single buffered direction (latest
keypress wins) so rapid key presses don't queue up and misfire. Base speed
set to 100 px/sec (~90 ms per step) for controllable, responsive play.
Progressive difficulty (+1 px/sec per 5 food) and edge wrap are unchanged.
2026-10-24 08:43:39 +03:00
Luxferre 0abf305dff games: snappier Snake turns + Gameboy-style Tetris blocks
Snake: add a turn queue (up to 4 pending direction changes) so rapid key
presses are never lost, and raise base speed from 70->130 px/sec
(~128ms -> ~69ms per step) for snappier, more responsive play. Progressive
difficulty (+1 px/sec per 5 food) is unchanged.

Tetris: replace solid-green blocks with Gameboy-style 4-shade beveled cells
(pale top/left highlight, medium body, dark bottom/right shadow). Settled
blocks use C_GB_MED, the active piece uses C_GB_LIGHT, and the next-piece
preview is beveled too.
2026-10-24 08:35:53 +03:00
Luxferre 8eccef3060 X to phone keypad mapping reference 2026-10-23 20:56:24 +03:00
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