Last update on my dice roller project for a while.
It can now interpret exploding dice, compounding dice, and reroll dice when they are greater than, equal to, greater than or equal to etc some number and finally you can have tooltips on dice rolls by putting an inline comment directly after it.
If you want to support the project and help me pay rent I have a patreon page.

YMMV, but nxes can now be built on Linux. Probably not on Ubuntu without some additional magic macros, but on Void-musl things appear to be working well enough with only mild hassle.
CC=clang LD=ld.lld ./configure
bmake YACC=byacc ADDCFLAGS="-D_DEFAULT_SOURCE -D_POSIX_SOURCE=200809L -std=c99 -Oz"

Hopefully can streamline this some, but that's a project for maybe the weekend.

I think I'm going to look for a little, mITX type machine to run on as well, just to ensure I can get back to work on dfbeadm. Unfortunately, testing filesystem management utilities isn't quite as easy as testing customizations to a rather nicely designed shell.

Just added bitwise operations to nxes, so now it's got everything I'm particularly interested in other than history manipulation, which will probably take a few good sessions to work on. I'll probably need to look into ways to benchmark certain operations in this shell soon, if only as a nice reference point against sh, rc, and bash.

Oh, I also added one of the initial author's es config files to help provide additional historical context for anyone curious enough to take a peek.

This is doubly a strike against their docs because in reading about various interfaces, they typically cover using the macro that resolves to one of the two+ real functions based on I'm not even sure what.

I've got a feeling that I'm going to need some black magic fuckery with these various macros just to ensure proper resolution. OTOH, maybe it'll be faster and less painful to try manually deciphering what resolution I need and then not using the macros at all.

Show thread

Compatibility layers/shims provide additional surface area for attackers. Out of an abundance of caution, #HardenedBSD generally stays away from compat shims (like COMPAT_FREEBSD32) and is thus unaffected.

We'll release binary updates to cover today's #FreeBSD SAs soon.

I take back what I said about MS documentation, their macro soup leads to tons of fun (probably) type errors that the compiler won't warn you about.

I'm not even sure what's going wrong right now because for some reason I can't run lldb (or I can and it just exits silently every time?). Best I could get is adding ASAN, but that couldn't tell me where it broke, and it changed all my output.

If this is going to be a regular part of my job, I'm going to need, like 20% more cash or something.

Also on my list of things to do: use editline instead of readline. Maybe someday write/adapt something better, or at least simpler, focusing on handling some core functionality well rather than splitting effort across several different code paths that may never get used.

Show thread

The code snippet ("{sum 1 2 3}") returns a single element list, but does not print anything, which is why the "<=" construct is needed, it's more or less the equivalent of using "$()" in Bourne-like shells.
This example would be equivalent to running: $ echo $(( 1 + 2 + 3))

Show thread

Usage is fairly lisp-like (semicolon is the default prompt):
; echo <= {sum 1 2 3}
; echo <= {mul 1 2 4}
; echo <= {div 8 2 1}
; echo <= {mod 7 5}

Didn't feel like adding any bitwise operations yet, but that ought to be pretty easy. Next up is mostly learning the code structure and probably some modernization, drop any idiosyncrasies for platforms that are older than me, etc.

Show thread

These primitives are unsafe because I'm not doing any sanity or bounds checking right now, but that shouldn't be a significant issue for most uses.

Show thread

For any of y'all curious: I've already added unsafe integer addition/subtraction, multiplication, division and modulus primitives to my fork of `es(1)`, being called `nxes(1)`.
Github mirror of the fossil repo is available here:

I've only tried installing it via the ports tree with my own patches so far, so it's probably a PITA to build and install locally, but I'm really loving this shell. Just needs a few history related functions and it'll replace bash!

Wow, hacking `es(1)` is way easier than I expected. Definitely setting up my own fork and hacking on it. Who knows? Maybe I won't need to write my own shell from scratch with the relative ease of hacking something more useful out of this ancient, wonderful shell.

More Thoughts for the Future 

I guess to wrap this thread up, I, like many, if not most others, only hope I'll be able to contribute something to the world truly worth remembering for centuries to come. Provided humanity or our children make it that long, of course.

Show thread

Thoughts for the Future, ~10min 

Well, I guess that's as good an excuse as any to pour myself a drink with dinner.

Show thread

Thoughts for the Future, Profanity 

Looking at my config repo, at least it's not my "forge" repo, where I have my first steps into C++ from when I was in college and my terrible, but mostly cleanly written introduction to C.

Show thread

Thoughts for the Future, Profanity 

The one fucking time that my apathy towards the way github measures activity actually means something. Literally any human can see that I've done more than **JUST** create some new repos, but github's accounting won't credit my account for the activity because of an issue with email addresses (also the difference in my fossil commits, but that's way more recent and easy enough to work around if only I fucking knew that some bot would archive my repos like this)

Show thread

Thoughts for the Future 

I just now realized that I have an "Arctic Code Vault Contributor" badge on my Github page...
It's for my configs repo. Because somehow I never learned the criteria for getting included, my .vimrc, .rcrc, .tmux.conf, .profile, etc. are going to be among the pet projects of others, such as the Linux kernel, OpenSSL, Rust, PostgreSQL, Go, and CPython to name a few.

Huh, apparently there's no arithmetic operators in `es(1)`, which feels wrong considering how many other cool things it has. Might end up hacking on that sort of basic functionality, if nothing else it'd be a good exercise in working with interactive shells, which would help in preparing to try writing my own at some point.

Show more

Linux Geeks doing what Linux Geeks do..