Age | Commit message (Collapse) | Author |
|
Prevents nested lists in the app state.
|
|
|
|
|
|
|
|
Idk what I was thinking, I dodn't need any of that stuff.
|
|
This also includes some drive-by formatting changes and config changes
needed to get it up and running.
|
|
I prefer lucid anyway
|
|
|
|
|
|
|
|
|
|
This prevents and further code from being executed. I think this was
happening so posted messages were still going on the que even though I
said they weren't. I really need some tests.
|
|
|
|
|
|
|
|
I still have to reimplement the SSL stuff but in the Haskell code. That
seems kinda hard or at least requires research that I don't wanna do
right now.
|
|
|
|
I stored them in my org files.
|
|
Not sure if this worked. Hopefully it didn't break anything in the meantime.
|
|
Apparently it needs the user to be jellyfin. Idk.
|
|
Hopefully this will be the last time I need to do this!
|
|
|
|
|
|
I also had to refactor the overlays stuff a bit, but it is much nicer now.
|
|
|
|
This also allowes me to make 'repl' into a universal command. This makes
it much easier to work across different projects.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I wanted to even further simplify the build tooling overhead. My general
goal is to not have to think about declaring packages, or dependencies,
or really anything that you might find in a cabal file. Not all of these
goals are possible, but we can get pretty close. With this commit all I
need for the 'buildGhc/buildGhcjs' functions is the path to the
entrypoint file; everything else is either inferred by the Nix code or
declared in the Haskell code comments.
The strategy is to map a Haskell module to an executable artifact, and
pass just that module to 'ghc --make'. Then we can rely on ghc to handle
walking the local filesystem for imports. The only thing ghc really
needs to know is a name for the output executable; it is hard to
automatically infer this, so we have a simple comment syntax to declare
this in the file. The comment syntax is inspired by existing Haskell
'LANGUAGE' pragmas; having this in the same file keeps the configuration
as close to the real code as possible. The Nix code then extracts this
info from the code comments, and sets the required ghc flags.
Second, we need to declare the set of 3rd-party packages that our
program relies on. For this we can re-use the same comment syntax and
just list the dependencies, then extract them in Nix and construct a
package set as we were before.
This reduces the amount of "package declaration" code we have to write
in default.nix, and reduces the amount of time we have to spend
switching between the Haskell code and the Nix code (I find such context
switching super annoying). I also think having the configuration in with
the Haskell code encourages us to write smaller, simpler modules and
only write code that we need.
Additionally, I refactored the bild and ghci (now called 'repl') scripts
to work in any directory. The .envrc uses direnv to set the path so that
you can run these scripts anywhere. That means the following works:
$ cd Run/Que
$ bild Website
$ repl Server
λ> :l Run.Que.Server
I find this to be a rather nice workflow.
|
|
|
|
I also block before taking, instead of doing a mult and tap. This is a
simple way to fix the memory issue, and makes them conceptually simpler
to work with I think.
The channels are still mutli-consumer and multi-producer, which is
fine. I'm not sure now I will implement the regular pubsub, but I'm not
sure there is a great usecase for that anyway.
|
|
If we've gotten past the first auth check then we are already
"authenticated", or whatever.
|
|
|
|
|
|
|
|
|
|
|
|
Turns out the ultimate reason was that I wasn't actually returning out
of the handler, I was just setting the HTTP status. Now I'm sure that it
works correctly.
|
|
|
|
First problem was that my `extract` function wasn't working. Second
problem was that nginx wasn't passing along the headers anyway.
|
|
|
|
So now _ is the special namespace that only I can post to. Unfortunately
I think the guardIP function is still broken.
|
|
curl was throwing an exception if the file got too long, because I was
passing the entire file contents in the arguments to curl. I tried using
a tmp file but that didn't work for some reason. So I switched to req
and that seems to work well.
I also made it faster by serving all pages concurrently, and I spruced
up the CSS a ton.
|
|
The scheme version of this is currently useless anyway.
|
|
|
|
Apparently guardIP wasn't working because it wasn't matching on the
right string, *and* I had typo'ed my IP address. I took this opportunity
to also organize the Scotty code a bit better with some comments.
|