summaryrefslogtreecommitdiff
path: root/Com
AgeCommit message (Collapse)Author
2020-04-03Rename Serval to ProdBen Sima
2020-04-03Fix typo in dev configBen Sima
2020-04-03Consolidate most build functions to biz.nixBen Sima
2020-04-03Rewrite buildGhc and buildGhcjsBen Sima
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.
2020-04-02Reorganize and comment some of the nix codeBen Sima
2020-04-01Bound ques to about 10 itemsBen Sima
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.
2020-04-01Delete old nixpkgs pinBen Sima
2020-04-01Add matrix and riot server configBen Sima
2020-03-30Add nix service declaration for que.runBen Sima
I'm using serval.simatime.com as a catch-all production app server for now. The 'que.run' domain is pointed at that instance, and the service is just installed as a regular NixOS systemd service. I had to do some troubleshooting because I wasn't getting any DNS names to resolve. I think changing the nameservers fixed it. Don't know why the 127 number was in there. Another issue concerns how to add our packages to the set of nixpkgs in the generated NixOS. I played around with this for a while and landed on using an overlay to put our set of packages under 'pkgs.biz.<name>', and then passing that in to the 'buildOS' function. This isn't really the best solution because it is confusing and rather disconnected. I'm starting to realize that it might be good to separate nix artifacts into "machines" and "programs", but I don't want to do that just yet. I'd like to finish designing my bild program before making any large design decisions or re-organizations.
2020-03-30Rename Com.Simatime.Que to Run.QueBen Sima
Now that I have the domain name que.run! Aw yeah.
2020-03-30Add polling and streaming to QueBen Sima
2020-03-30Add queBen Sima
2020-03-30Rewrite Go to use unagi-chanBen Sima
The performance is reportedly better. The API is simpler. Also with STM channels, I couldn't get multiconsumer to work. I was able to get it to work with unagi. Also I could write 'mult' and 'tap' which bring me back to my Clojure days.
2020-03-30Add 'broadcast' and 'tap'Ben Sima
2020-03-30Add idea about file-based dependenciesBen Sima
More generally, we could extend this to other settings, like 'main-is' and target architecture to compile for and so on. It would be best to define the parameters in Nix first, then later inline them to the code comments after we've worked out the interface.
2020-03-29Bump nixpkgs pinBen Sima
2020-03-28Refactor and remove custom operatorsBen Sima
As much as I like these operators, I have to remove them because they don't work as expected. Haskell doesn't allow you to have unary prefix operators. I can't find a way around this, and it's not that important anyway.
2020-03-28Add onomatopoeitic operatorsBen Sima
It's easier to remember what operators do, and thus easier to write and read condens code, if they follow some symbolic pattern or visually represent the concept to which they map. This is in part inspired by hoon, in part by OCaml's operators. I'm not married to these operators specifically, but I think they are good so far.
2020-03-28Open UDP port for murmurBen Sima
2020-03-28Add murmur serverBen Sima
2020-03-17Add double fmap, switch "say" to Text, and autoformatBen Sima
2020-02-16Split buildHaskellApp into buildGhc and buildGhcjsBen Sima
Two functions makes it simpler to reason about what is being built and when, even if it is a bit more explicit. I also removed the dumb Apex/Aero naming thing because Server/Client is just easier to remember.
2020-02-11Add servalBen Sima
2020-02-07Update my IPBen Sima
2020-01-30Add clay source, add dontCheck to wai-middleware, clay.David Johnson
2019-11-23Remove undefinedBen Sima
2019-11-23Make all warnings errors in GHCBen Sima
2019-11-23Add Com.MusicMeetsComicsBen Sima
2019-11-23Remove apex and aero argumentsBen Sima
2019-11-23Delete unused roun scriptBen Sima
rouns are no longer in use anyway.
2019-11-23Capitalize all Scheme and Haskell modulesBen Sima
2019-11-22Redefine 'second'Ben Sima
2019-11-21Organize exports and add printfBen Sima
2019-11-19Fix name of emby userBen Sima
2019-11-19Add initial miniKanren implementationBen Sima
2019-11-19Fixes to Com.Simatime.CoreBen Sima
- make it actually compile - add fmt - export stuff I'm using elsewhere - comment stuff that doesn't work yet
2019-11-19Add telnet and tracerouteBen Sima
2019-11-14Re-namespace Serval under Com.SimatimeBen Sima
I don't have runserval.com yet, so I'm not gonna put the cart before the horse
2019-11-12update networking to new servalBen Sima
2019-11-12add file and htop to the base OS imageBen Sima
2019-11-11ensure all documentation is included in my dev machineBen Sima
2019-11-11Disable auto-upgradeBen Sima
This was causing the system to revert once per day.
2019-11-08disable tinc for nowBen Sima
2019-11-08add runserval configBen Sima
2019-11-08only make the vpnExtraConfig if enableVpnBen Sima
2019-11-08make sure to open the firewallBen Sima
2019-11-08format the motdBen Sima
2019-11-08Turn off mutable usersBen Sima
2019-11-06add a common buildOS function with preliminary vpnBen Sima
2019-11-02add some clojure-inspired scheme functionsBen Sima