nandi/frqpublic Fork 0
3c3a947
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Rename the source files from .jolt to .clj

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-08T01:07:07-07:00 Browse files
3c3a947 parent: 2e25898
modified .zed/settings.json +1 -1
@@ -1,5 +1,5 @@
11 {
22 "file_types": {
3- "Clojure": ["*.jolt"]
3+ "Clojure": ["*.clj"]
44 }
55 }
@@ -1,5 +1,5 @@
1 {1 {
2 "file_types": {2 "file_types": {
3- "Clojure": ["*.jolt"]3+ "Clojure": ["*.clj"]
4 }4 }
5 }5 }
modified README.md +16 -16
@@ -12,19 +12,19 @@ tags rather than immediate-mode drawing code, and state lives in ratoms instead
1212 of an `AppState` struct.
1313
1414 ```
15-src/frq/atproto.jolt handle → DID → PDS → session, and the SASL payloads
16-src/frq/oauth.jolt the broker flow: login URL, loopback capture, /session
17-src/frq/store.jolt the saved sign-in, mode 600 in the config directory
18-src/frq/avatars.jolt profile pictures, by DID or handle
19-src/frq/profile.jolt who someone is: the Bluesky profile behind a nick
20-src/frq/media.jolt image links: spot them, fetch them once, cache on disk
21-src/frq/upload.jolt a pasted picture to freeq's media endpoint, as multipart
22-src/frq/av.jolt calls: the signaling, and a handle on the media plane
23-src/frq/clock.jolt the reader's own zone, twelve-hour times, day headings
24-src/frq/emoji.jolt the picker's catalog: every drawable emoji and its name
25-src/frq/irc.jolt IRC over TLS or TCP: parser, reader thread, SASL, PRIVMSG
26-src/frq/state.jolt the ratoms every screen reads, and `apply-msg!`
27-src/frq/app.jolt the screens
15+src/frq/atproto.clj handle → DID → PDS → session, and the SASL payloads
16+src/frq/oauth.clj the broker flow: login URL, loopback capture, /session
17+src/frq/store.clj the saved sign-in, mode 600 in the config directory
18+src/frq/avatars.clj profile pictures, by DID or handle
19+src/frq/profile.clj who someone is: the Bluesky profile behind a nick
20+src/frq/media.clj image links: spot them, fetch them once, cache on disk
21+src/frq/upload.clj a pasted picture to freeq's media endpoint, as multipart
22+src/frq/av.clj calls: the signaling, and a handle on the media plane
23+src/frq/clock.clj the reader's own zone, twelve-hour times, day headings
24+src/frq/emoji.clj the picker's catalog: every drawable emoji and its name
25+src/frq/irc.clj IRC over TLS or TCP: parser, reader thread, SASL, PRIVMSG
26+src/frq/state.clj the ratoms every screen reads, and `apply-msg!`
27+src/frq/app.clj the screens
2828 ```
2929
3030 ## Tracing
@@ -82,7 +82,7 @@ grid of cells instead of a GPU window.
8282
8383 It is the client, not a preview of it. `frq.app/start!` is what a launch does —
8484 the saved settings, the rooms this client has been in, the sign-in that
85-connects itself — and `src/frq/tui.jolt` hands it the terminal's timers instead
85+connects itself — and `src/frq/tui.clj` hands it the terminal's timers instead
8686 of the window's. Nothing in `frq.app` changed.
8787
8888 ```bash
@@ -113,7 +113,7 @@ prop is divided by the axis it measures. A gap of half a cell rounds to
113113 nothing, which is what `:spacing 8` against a 16-point row is: thirteen
114114 messages fit where rounding it up left room for two.
115115
116-The two reserves in `src/frq/app.jolt` are the one thing a scale cannot
116+The two reserves in `src/frq/app.clj` are the one thing a scale cannot
117117 answer, because they are counted in rows of chrome rather than in lengths: a
118118 window's row is 34 points and a terminal's is one cell. `chrome-row` is where
119119 that is said, and `frq.tui` sets it.
@@ -231,7 +231,7 @@ asked to be in a call in that room and there is one.
231231 Media is not IRC and is not here. Audio and video ride MoQ — Media over QUIC —
232232 through freeq's SFU, and that is `libjoltmoq`: Opus, H.264, capture and
233233 transport, lifted out of sleek rather than written a second time in jolt.
234-`src/frq/av.jolt` is the whole of what frq says to it, and two of its rules
234+`src/frq/av.clj` is the whole of what frq says to it, and two of its rules
235235 shape this side:
236236
237237 * **Nothing calls back.** Status and video are polled, drained by a timer that
@@ -12,19 +12,19 @@ tags rather than immediate-mode drawing code, and state lives in ratoms instead
12 of an `AppState` struct.12 of an `AppState` struct.
13 13
14 ```14 ```
15-src/frq/atproto.jolt handle → DID → PDS → session, and the SASL payloads15+src/frq/atproto.clj handle → DID → PDS → session, and the SASL payloads
16-src/frq/oauth.jolt the broker flow: login URL, loopback capture, /session16+src/frq/oauth.clj the broker flow: login URL, loopback capture, /session
17-src/frq/store.jolt the saved sign-in, mode 600 in the config directory17+src/frq/store.clj the saved sign-in, mode 600 in the config directory
18-src/frq/avatars.jolt profile pictures, by DID or handle18+src/frq/avatars.clj profile pictures, by DID or handle
19-src/frq/profile.jolt who someone is: the Bluesky profile behind a nick19+src/frq/profile.clj who someone is: the Bluesky profile behind a nick
20-src/frq/media.jolt image links: spot them, fetch them once, cache on disk20+src/frq/media.clj image links: spot them, fetch them once, cache on disk
21-src/frq/upload.jolt a pasted picture to freeq's media endpoint, as multipart21+src/frq/upload.clj a pasted picture to freeq's media endpoint, as multipart
22-src/frq/av.jolt calls: the signaling, and a handle on the media plane22+src/frq/av.clj calls: the signaling, and a handle on the media plane
23-src/frq/clock.jolt the reader's own zone, twelve-hour times, day headings23+src/frq/clock.clj the reader's own zone, twelve-hour times, day headings
24-src/frq/emoji.jolt the picker's catalog: every drawable emoji and its name24+src/frq/emoji.clj the picker's catalog: every drawable emoji and its name
25-src/frq/irc.jolt IRC over TLS or TCP: parser, reader thread, SASL, PRIVMSG25+src/frq/irc.clj IRC over TLS or TCP: parser, reader thread, SASL, PRIVMSG
26-src/frq/state.jolt the ratoms every screen reads, and `apply-msg!`26+src/frq/state.clj the ratoms every screen reads, and `apply-msg!`
27-src/frq/app.jolt the screens27+src/frq/app.clj the screens
28 ```28 ```
29 29
30 ## Tracing30 ## Tracing
@@ -82,7 +82,7 @@ grid of cells instead of a GPU window.
82 82
83 It is the client, not a preview of it. `frq.app/start!` is what a launch does —83 It is the client, not a preview of it. `frq.app/start!` is what a launch does —
84 the saved settings, the rooms this client has been in, the sign-in that84 the saved settings, the rooms this client has been in, the sign-in that
85-connects itself — and `src/frq/tui.jolt` hands it the terminal's timers instead85+connects itself — and `src/frq/tui.clj` hands it the terminal's timers instead
86 of the window's. Nothing in `frq.app` changed.86 of the window's. Nothing in `frq.app` changed.
87 87
88 ```bash88 ```bash
@@ -113,7 +113,7 @@ prop is divided by the axis it measures. A gap of half a cell rounds to
113 nothing, which is what `:spacing 8` against a 16-point row is: thirteen113 nothing, which is what `:spacing 8` against a 16-point row is: thirteen
114 messages fit where rounding it up left room for two.114 messages fit where rounding it up left room for two.
115 115
116-The two reserves in `src/frq/app.jolt` are the one thing a scale cannot116+The two reserves in `src/frq/app.clj` are the one thing a scale cannot
117 answer, because they are counted in rows of chrome rather than in lengths: a117 answer, because they are counted in rows of chrome rather than in lengths: a
118 window's row is 34 points and a terminal's is one cell. `chrome-row` is where118 window's row is 34 points and a terminal's is one cell. `chrome-row` is where
119 that is said, and `frq.tui` sets it.119 that is said, and `frq.tui` sets it.
@@ -231,7 +231,7 @@ asked to be in a call in that room and there is one.
231 Media is not IRC and is not here. Audio and video ride MoQ — Media over QUIC —231 Media is not IRC and is not here. Audio and video ride MoQ — Media over QUIC —
232 through freeq's SFU, and that is `libjoltmoq`: Opus, H.264, capture and232 through freeq's SFU, and that is `libjoltmoq`: Opus, H.264, capture and
233 transport, lifted out of sleek rather than written a second time in jolt.233 transport, lifted out of sleek rather than written a second time in jolt.
234-`src/frq/av.jolt` is the whole of what frq says to it, and two of its rules234+`src/frq/av.clj` is the whole of what frq says to it, and two of its rules
235 shape this side:235 shape this side:
236 236
237 * **Nothing calls back.** Status and video are polled, drained by a timer that237 * **Nothing calls back.** Status and video are polled, drained by a timer that
modified deps.edn +1 -1
@@ -23,7 +23,7 @@
2323 ;; libjoltmoq the AV media plane — MoQ over QUIC, Opus, H.264, capture
2424 ;;
2525 ;; Calls are the one thing this client cannot do in jolt. Signaling is IRC and
26- ;; lives in src/frq/av.jolt; the media half is three thousand lines of codec
26+ ;; lives in src/frq/av.clj; the media half is three thousand lines of codec
2727 ;; and transport that would only be written badly a second time here.
2828 ;;
2929 ;; just run
@@ -23,7 +23,7 @@
23 ;; libjoltmoq the AV media plane — MoQ over QUIC, Opus, H.264, capture23 ;; libjoltmoq the AV media plane — MoQ over QUIC, Opus, H.264, capture
24 ;;24 ;;
25 ;; Calls are the one thing this client cannot do in jolt. Signaling is IRC and25 ;; Calls are the one thing this client cannot do in jolt. Signaling is IRC and
26- ;; lives in src/frq/av.jolt; the media half is three thousand lines of codec26+ ;; lives in src/frq/av.clj; the media half is three thousand lines of codec
27 ;; and transport that would only be written badly a second time here.27 ;; and transport that would only be written badly a second time here.
28 ;;28 ;;
29 ;; just run29 ;; just run
renamed src/frq/app.clj +0 -0
similarity index 100%
rename from src/frq/app.jolt
rename to src/frq/app.clj
similarity index 100%
rename from src/frq/app.jolt
rename to src/frq/app.clj
renamed src/frq/atproto.clj +0 -0
similarity index 100%
rename from src/frq/atproto.jolt
rename to src/frq/atproto.clj
similarity index 100%
rename from src/frq/atproto.jolt
rename to src/frq/atproto.clj
renamed src/frq/av.clj +0 -0
similarity index 100%
rename from src/frq/av.jolt
rename to src/frq/av.clj
similarity index 100%
rename from src/frq/av.jolt
rename to src/frq/av.clj
renamed src/frq/avatars.clj +0 -0
similarity index 100%
rename from src/frq/avatars.jolt
rename to src/frq/avatars.clj
similarity index 100%
rename from src/frq/avatars.jolt
rename to src/frq/avatars.clj
renamed src/frq/clock.clj +0 -0
similarity index 100%
rename from src/frq/clock.jolt
rename to src/frq/clock.clj
similarity index 100%
rename from src/frq/clock.jolt
rename to src/frq/clock.clj
renamed src/frq/emoji.clj +0 -0
similarity index 100%
rename from src/frq/emoji.jolt
rename to src/frq/emoji.clj
similarity index 100%
rename from src/frq/emoji.jolt
rename to src/frq/emoji.clj
renamed src/frq/glyphs.clj +0 -0
similarity index 100%
rename from src/frq/glyphs.jolt
rename to src/frq/glyphs.clj
similarity index 100%
rename from src/frq/glyphs.jolt
rename to src/frq/glyphs.clj
renamed src/frq/irc.clj +0 -0
similarity index 100%
rename from src/frq/irc.jolt
rename to src/frq/irc.clj
similarity index 100%
rename from src/frq/irc.jolt
rename to src/frq/irc.clj
renamed src/frq/media.clj +0 -0
similarity index 100%
rename from src/frq/media.jolt
rename to src/frq/media.clj
similarity index 100%
rename from src/frq/media.jolt
rename to src/frq/media.clj
renamed src/frq/msgsig.clj +0 -0
similarity index 100%
rename from src/frq/msgsig.jolt
rename to src/frq/msgsig.clj
similarity index 100%
rename from src/frq/msgsig.jolt
rename to src/frq/msgsig.clj
renamed src/frq/oauth.clj +0 -0
similarity index 100%
rename from src/frq/oauth.jolt
rename to src/frq/oauth.clj
similarity index 100%
rename from src/frq/oauth.jolt
rename to src/frq/oauth.clj
renamed src/frq/platform.clj +0 -0
similarity index 100%
rename from src/frq/platform.jolt
rename to src/frq/platform.clj
similarity index 100%
rename from src/frq/platform.jolt
rename to src/frq/platform.clj
renamed src/frq/profile.clj +0 -0
similarity index 100%
rename from src/frq/profile.jolt
rename to src/frq/profile.clj
similarity index 100%
rename from src/frq/profile.jolt
rename to src/frq/profile.clj
renamed src/frq/state.clj +0 -0
similarity index 100%
rename from src/frq/state.jolt
rename to src/frq/state.clj
similarity index 100%
rename from src/frq/state.jolt
rename to src/frq/state.clj
renamed src/frq/store.clj +0 -0
similarity index 100%
rename from src/frq/store.jolt
rename to src/frq/store.clj
similarity index 100%
rename from src/frq/store.jolt
rename to src/frq/store.clj
renamed src/frq/tui.clj +0 -0
similarity index 100%
rename from src/frq/tui.jolt
rename to src/frq/tui.clj
similarity index 100%
rename from src/frq/tui.jolt
rename to src/frq/tui.clj
renamed src/frq/upload.clj +0 -0
similarity index 100%
rename from src/frq/upload.jolt
rename to src/frq/upload.clj
similarity index 100%
rename from src/frq/upload.jolt
rename to src/frq/upload.clj