Skip to content
/ sss Public

Supreme Sexp System - SSS - a Lisp machine adventure

License

Notifications You must be signed in to change notification settings

jjba23/sss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Supreme Sexp System - SSS

A Lisp machine adventure, where GNU, Emacs, Lisp and the hacking culture are celebrated.

GNU Guix + GNU Emacs + Nix + Sway 💚

Let me help you achieve GNUrvana.

If you like my work, please support me by buying me a cup of coffee ☕ so I can continue with a lot of motivation.

Find the divine sayings, and the destined computer configurations, all my Guix, Scheme, Sway, and Emacs Lisp and more configurations here for learning you a fully Lisp machine with GNU/Linux for a great good.

This setup enhances customization to infinity and offers a superior user experience thanks in part too to REPL (Read Eval Print Loop) and Lisps.

🇳🇱 parts of the code and settings might be in the Dutch language ( nl_NL.UTF-8 ).

What lies here?

Knowledge you may find in the repo includes:

  • Emacs configurations with Emacs Lisp + Elpaca
  • GNU Guix system configurations with Guile Scheme
  • Sway WM configurations in Guile Scheme with GNU Home
  • foot terminal emulator

Note: Screenshot below might be outdated and no longer representative of the current, everchanging state of these “dotfiles”.

Introduction

These are my configuration files, which also explain a lot about the tooling I use and enjoy, and can teach you a thing or two.

If you like my work, please support me by buying me a cup of coffee ☕ so I can continue with a lot of motivation.

This is the set of files that powers my day-to-day computing experience, so do not track my dotfiles (rolling, unstable, and untested), but feel free to use them and take inspiration from them or fork and work under the terms of the GNU GPL v3 or newer.

GNU Emacs

In some ways this is a laboratory of experimentation for my computing environment. What I do with any other program that forms part of sss is only meant to work for me. As such, I may introduce breaking changes without prior notice.

This is all to say that you understand the risks associated with tracking an ever-changing project that does not enjoy widespread testing and whose target audience is only me. If you are fine with that and are willing to assume responsibility for any possible breakage, then please feel welcome to follow along. You can always open an issue here or contribute any fixes, if you will.

Per host - per-host.scm

It is REQUIRED to include a per-host.scm in the root of this project, which is excluded from Git, and will determine certain settings for your own machine. Find here a reference configuration with what is required.

(use-modules (gnu)
           (gnu packages))

(define sss-filesystems
    (list (file-system
           (device "/dev/nvme0n1p3")
           (mount-point "/")
           (type "ext4"))
          (file-system
           (device "/dev/nvme0n1p1")
           (mount-point "/boot/efi")
           (type "vfat"))))

;; or (define sss-per-host-packages '())
(define sss-per-host-packages
  (list
   (specification->package "amd-microcode")
   (specification->package "amdgpu-firmware")
   (specification->package "steam")))

Words of Advice

Learning Lisps is really going down a rabbit hole, but trust me, you will come out with a better understanding of programming as a whole out the other end.

This configuration is heavily biased towards containing a joe user who also acts as administrator for most of the time. Your mileage may vary (YMMV).

Some commands in the Makefile are more geared towards joe since we assume a device is most frequently only tended to by one system administration most of the time. Some examples are make fr or make jr.

The system and home folders of users are managed independently of each other, in quite a loosely coupled manner.

Bootstrapping

It’s possible you need to some manual installations, and temporary workarounds, in order to install sss on a brand-new Guix installation.

Some aspects will be dependent on the manner of installation and hardware.

For example including nonguix in your channels (~/.config/guix/channels.scm). You might also need to install tools like Git and GNU make temporarily.

(cons* (channel
      (name 'nonguix)
      (url "https://gitlab.com/nonguix/nonguix")
      (introduction
       (make-channel-introduction
        "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
        (openpgp-fingerprint
         "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
     %default-channels)

Updates

You should every now and then do a guix pull from your regular user, and then rebuild this system. See the Makefile for more information.

Nix profile

Nixpkgs contains a lot of software which we can leverage and manage from Guix. SSS will automatically install and provide the Nix package manager for you.

SSS also provides some facilities to manage Nix from the comfort of your Guile Scheme.

You might need to activate and link the profile in order to be able to use, for the first time.

ln -sfv /nix/var/nix/profiles/per-user/joe/profile /home/joe/.nix-profile

You can switch your install to use nixpkgs-unstable with:

nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update

You can install Nix packages by running:

nix -L profile install --impure nixpkgs#firefox

You can keep your Nix packages updated by running:

NIXPGS_ALLOW_UNFREE=1 nix profile upgrade --impure '.*'

The installed software will be available, for example at: /home/joe/.nix-profile/bin/


Project Management

Backlog

record types (define-configuration) to modularize config and translate foot configs and git configs and other complex ones to Scheme.

scheme to json for waybar config

make it easier to manage Nix packages from Guile scheme

create simple bootstrap script to help adoption

create project banners, logos, marketing

create a user factory which is by default configured to joe’s settings but is easily tweaked and with no duplication it creates new users.

Work done

manage all simple key-value configs from Scheme code