Oni Machine Interface
My Literate Machine Configuration
This is my latest attempt at a literate configuration.
This is in the very early stages of an attempt to do this. And usually I get frustrated and give up quite early on. I'll try and get small bits and pieces in here one at a time.
Here is the command that converts this file into my home configuration. This calls Guix shell with just the emacs-next
package installed and runs Emacs to tangle this file. When tangling is done it runs guix home to configure my environment.
For the moment this doesn't do guix home reconfigure
but guix home build
instead. I'm still getting this up to the point where I can actually use it.
guix shell --pure emacs-next -- emacs \ -quick -batch \ -load ob-tangle \ -visit rincewind.org \ -funcall org-babel-tangle guix home build rincewind.scm
Environment
This is a random assortment of environment variables that I like to have defined for various reasons.
The LESS
environment variable specifies the default command-line arguments to pass in to less
whenever it is run. I've gotten quite used to these:
F
- Causes
less
to exit right away when there is less than one screen of text to display. X
- Prevents the screen from being cleared away when
less
exits (it does more, but this is why I use it) R
- Displays ANSI color escape sequences to be rendered as normal, instead of as readable characters. In other words it lets
less
display colored text instead of displaying escape sequences. S
- Truncates long lines instead of wrapping them. Makes it easier for me to read.
i
- This causes any searches using
/
to become case-insensitive so that the search term “done” will match “done”, “Done”, “DONE”, and any other combination of upper- and lowercase letters.
("LESS" . "FXRSi")
I use the MY_GUIX_CONFIGURED
just as an indication that Guix home actually configured my user profile. It's not actually necessary for anything.
("MY_GUIX_CONFIGURED" . "1")
This opts out of sending any telemetry to Microsoft whenever I play around with any .Net things.
("DOTNET_CLI_TELEMETRY_OPTOUT" . "1")
Turn on dark-mode for Calibre. I prefer dark mode everywhere.
("CALIBRE_USE_DARK_PALETTE" . "1")
Because I use Guix on top of another distribution, this variable needs to be set in order for locales to work properly for both package installed through Guix and ones installed by the host distribution.
("GUIX_LOCPATH" . "$HOME/.guix-home/profile/lib/locale")
Again because I use Guix on top of another distribution this variable ensures that the things I have stored away in my usual data directory get included, not just the ones Guix defines.
("XDG_DATA_DIRS" . "${XDG_DATA_DIRS}${XDG_DATA_DIRS:+:}/usr/local/share:/usr/share")
I was working with git
recently, splitting some utilities out into their own repository from a bigger repository using filter-branch
. Apparently filter-branch
has been deprecated because it's easy to make mistakes and there's better alternatives now. But filter-branch
is what I know and my needs are simple, so I disable that warning.
("FILTER_BRANCH_SQUELCH_WARNING" . "1")
Putting it all together to define the service for my home configuration.
(define oni-environment-service (simple-service 'home-environment-service home-environment-variables-service-type '( ("LESS" . "FXRSi") ("MY_GUIX_CONFIGURED" . "1") ("DOTNET_CLI_TELEMETRY_OPTOUT" . "1") ("CALIBRE_USE_DARK_PALETTE" . "1") ("GUIX_LOCPATH" . "$HOME/.guix-home/profile/lib/locale") ("XDG_DATA_DIRS" . "${XDG_DATA_DIRS}${XDG_DATA_DIRS:+:}/usr/local/share:/usr/share") ("FILTER_BRANCH_SQUELCH_WARNING" . "1"))))
GTK3
I have a very simple GTK configuration. All I configure is that the applications should prefer a dark theme over a light one.
[Settings] gtk-application-prefer-dark-theme=true
Home
This brings it all together. The <<services>>
is where all the services defined throughout this document are placed, and the last few lines return my home environment.
(use-modules (gnu services) (gnu home services)) <<services>> (home-environment (services (list oni-environment-service)))
Changelog
- Added a code block that tries to tangle this file and then build the result. And made the output an actual home environment.