akkartik 11 hours ago

> "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

  • adityaathalye 5 hours ago

    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?

        shite_template_standard_page_wrapper() {
            cat <<EOF
        <!DOCTYPE html>
        <html lang="en" prefix="og: https://ogp.me/ns#">
          $(shite_template_common_head)
          <body>
            <div id="the-very-top" class="stack center box">
              $(cat -)
              $(shite_template_common_footer)
            </div>
          </body>
        </html>
        EOF
        }
    

    And, unlike PHP or whatever... have you ever seen more composable templating, as in functional programming?

        cat ./sample/hello.html |
          shite_template_common_default_page
    
        # Or..
    
        cat ./sample/hello.org |
          pandoc -f org -t html |
          shite_template_common_default_page
    

    Just imagine all the pipelined pre/post-processor possibilities.

    [0] project codename `shite`, literally, renders my site https://github.com/adityaathalye/shite

adityaathalye 6 hours ago
  > Within that machine lies Org-mode.
  > ...
  > Absolute maniacs run their finances, their spreadsheets, 
  > and their fragile grip on reality out of it.

I feel seen... who else is with me?

  • adityaathalye 4 hours ago

    Also...

      > 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})
plexom 10 hours ago

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