what dwm patches do yall use?
Just curious.
I'll start: none.
Just curious.
I'll start: none.
Hello.
I've been participating on suckless and LISP communities at the same time, and ugh... just wanted to ask a quick question: do you consider Common Lisp suckless? And its ecosystem?
Thanks.
Scheme is a programming language and derived from the LISP programming language, and a very good language for shells, overall.
Here I will (0) tell you about why you'd want to use Scheme as your shell, and (1) give you a simple generic way to implement it. :)
As aforementioned, Scheme is a programming language of the LISP family of languages, and is homoiconic, so data and code are the same thing, kinda.
Everything is expressed as an S-expression (s-exp, symbolic expression), which is a parenthesized expression format made on top of lists. It can look somewhat like this:
(+ 1 (* 2 3))
The first element of an unquoted list in eval notation (that is, a list not starting with '), (sometimes referred to as the car of the list) is the function to be executed (here +), and the rest the operands. Superfluous parenthesization is mostly forbidden, but you can still nest executable lists like on the example above, which would print 7, by the way.
S-expressions are also used to represent data, as an alternative for things like XML, JSON, etc.. The benefit is simplicity, less syntax, and ease to parse.
In an S-exp, there are three main types of values:
They often look somewhat like this:
(person
(name "John Doe")
(age 30)
(email "john@johndoe.es"))
In JSON, this would look somewhat like:
{
"name": "John Doe",
"age": 30,
"email": "john@johndoe.es"
}
S-expressions can also be composed exclusively of atoms, like an array:
(1 2 3)
In JSON:
[ 1, 2, 3 ]
Another example: configuring a web server:
(server-config
(port 80)
(webmaster-mail "webmaster@johndoe.es")
(for-route "www.johndoe.es"
(do 'redirect "johndoe.es"))
(for-route "johndoe.es"
(do 'serve "/var/www/htdocs/main/")))
On JSON, it'd look like this:
{
"port": 80,
"webmaster-mail": "webmaster@johndoe.es",
"for-route": { "www.johndoe.es", "do": { "redirect": "johndoe.es" } },
"for-route": { "johndoe.es", "do" : { "serve": "/var/www/htdocs/main/" } },
You can evaluate quoted S-expressions using the eval builtin, but you shouldn't, really.
Some objects are unreadable, which makes them very useful for internal data you want to make opaque, e.g.: a file. These are mostly printed as: #<SOME DATA> (e.g.: #<FILE name "file.txt" size 512 mode 777 owner "john">).
For example, you may have a ls function that does something like:
> (ls)
("hello.scm")
>
Which could be defined as (pseudocode):
(define (ls (optional dir))
(space-separated-list-to-sexp (syscall 'get-files (dir-path dir))))
S-expressions are really useful for an operating system, since they standardize a nice, powerful format across all applications, which can be REALLY useful.
There are two Scheme impls I'd recommend:
Add them to your initrd script, make it run: chez-scheme -q boot.scm. On boot.scm, add:
(load "customlib.scm") ; load the standard library (; makes a comment, by the way)
(load "login.scm") ; load the login script
(on-userspace ; on-userspace is a fictional function that will run a S-exp on userspace
(new-cafe)) ; make a new REPL
;; panic is a fictional-function that causes the kernel to panic
(panic "Shell returned.")
I used a few fictional functions:
on-userspace: Evaluate an S-exp on userspacepanic: panics, I guess...On TinyScheme, you have to relaunch TinyScheme, there isn't any (new-cafe) function.
Thanks in advance.
I am making a Scheme R5RS implementation and it is going pretty well.
I am trying implement macros, and don't really know how to implement them. Scheme has a pretty complex macro system, so for now I am trying to implement defmacro and then implement define-syntax, syntax-case, etc.
Any tips?
Thanks in advance.
Nowadays 90% of projects posted here is vibe-coded AI slop, so I think it is necessary to have a term for OSes that are just blatant vibe coded slop.
I'll start: aislop OS
EDIT: I am talking about when there's a single commit coauthored by Claude and the author has no idea what they are doing and have no real knowledge of their OS's architecture.
Some time ago I tried to run some glibc software on Void Linux, the musl version. After breaking my head for way too much time, I realized you can really just use the Bedrock Linux project to run software like Steam or Firefox (for Widevine CDN)!
My system is (was before I installed bedrock ig) a pretty standard bare-bones Void Linux musl install with X.org and dwm. Here uname -a if you really want (the hostname is xmm0):
Linux xmm0 6.18.26_1 #1 SMP PREEMPT_DYNAMIC Sun May 3 01:56:02 UTC 2026 x86_64 GNU/Linux
I will use the Debian stratum (plural: strata) here for this.
>ACHTUNG: Back up everything. Although I aim to make this mostly smooth and straight-forward, Bedrock is known to behave weirdly on musl systems (for example, I couldn't get unprivileged users to make clone new namespaces, so some stuff may have to be ran with setuid or straight out sudo, which is... suboptimal)
Bedrock Linux can be hijacked into your current distro (that is, installed in-place). Get your script for your architecture based on this reference. For x86-64 (aka. x64 or amd64), run:
$ wget https://github.com/bedrocklinux/bedrocklinux-userland/releases/download/0.7.31/bedrock-linux-0.7.31-x86_64.sh
$ ./bedrock-linux-0.7.31-x86_64.sh --hijack
After this is done, reboot! Log on to a session, and install a stratum of your choice:
$ brl fetch --list
should print out some strata you can use for your system. To install the Debian stratum, run:
$ brl fetch debian --mirror http://deb.debian.org/debian
Wait for a bit, and when it finishes, you will have access to Debian user-space and applications from your Void Linux install! You can enter a Debian shell with:
$ strat debian <optional command to run here>
Although all Debian commands will be available from a normal shell. You probably should bootstrap apt now (I will prefix the shell prompt with stratum$ for commands that use the stratum we installed):
stratum$ sudo apt update
stratum$ sudo apt upgrade
stratum$ sudo apt install <Debian packages here>
I hope you found this useful, thanks in advance!