Cool! Also, carrying forward the post author's tongue-in-cheek humour... I see your lua and raise you ~350 lines of Bash (excludes HTML templates). Take a good hard look at this shite [0]. Have you seen anything that is more obviously HTML-about-to-be-expanded-into-a-full-page?
> I have to address the elephant in the room:
> hot-rebuilding isn't true hot-reloading.
> To get the browser to magically inject CSS without
> a refresh requires WebSockets, background Node
> processes, and a lot of external baggage.
OR... you could just use inotify again... Behold this abomination (that works so well (on my machine) I can't believe it):
__shite_hot_cmd_browser_refresh() {
local window_id=${1:?"Fail. We expect window ID to be set in scope."}
printf "%s\n" \
"key --window ${window_id} --clearmodifiers 'F5'"
}
__shite_hot_cmd_goto_url() {
local window_id=${1}
local url=${2}
printf "%s\n" \
"key --window ${window_id} --clearmodifiers 'ctrl+l'" \
"type --window ${window_id} --clearmodifiers --delay 1 ${url}" \
"key --window ${window_id} --clearmodifiers 'Return'"
}
... and a few functions later ...
__shite_hot_cmd_exec() {
# In debug mode, only show the actions, don't do them.
if [[ ${SHITE_BUILD} == "hot" ]]
then stdbuf -oL grep -v '^$' | __tap_stream | xdotool -
else cat -
fi
}
shite_hot_browser_reload() {
local browser_window_id=${1:?"Fail. Window ID not set."}
local base_url=${base_url:?"Fail. Base URL not set."}
__shite_hot_cmd_public_events ${browser_window_id} ${base_url} |
__shite_hot_cmd_exec
}
... and finally ...
# RUN PIPELINE
shite_hot_watch_file_events ${watch_dir} |
__shite_events_dedupe |
__tap_stream |
tee >(shite_hot_build ${base_url}) |
# Perform hot-reload actions only against changes to public files
tee >(shite_hot_browser_reload ${window_id} ${base_url})
I really enjoyed reading this, the descent into madness sure did make for a fun ride. Lisp + rabbit holes gotta be one of my favourite literary genres. :D
> "I'll just read a file, swap out some variables, and write some HTML." ā Famous last words
I'm actually living the dream. The key: directly author html. I.e. the above file contains html.
https://git.sr.ht/~akkartik/gen_site
Cool! Also, carrying forward the post author's tongue-in-cheek humour... I see your lua and raise you ~350 lines of Bash (excludes HTML templates). Take a good hard look at this shite [0]. Have you seen anything that is more obviously HTML-about-to-be-expanded-into-a-full-page?
And, unlike PHP or whatever... have you ever seen more composable templating, as in functional programming?
Just imagine all the pipelined pre/post-processor possibilities.
[0] project codename `shite`, literally, renders my site https://github.com/adityaathalye/shite
I feel seen... who else is with me?
Also...
OR... you could just use inotify again... Behold this abomination (that works so well (on my machine) I can't believe it):
... and a few functions later ...
... and finally ...
I really enjoyed reading this, the descent into madness sure did make for a fun ride. Lisp + rabbit holes gotta be one of my favourite literary genres. :D