The Complete Computing Environment


CCE is the amalgamation of Tools I use to build a computer I don't hate. It's primarily a distribution of Emacs and Fedora Linux embodying an ideal of modern modal interface, and a focus on Knowledge Management through org-mode to produce independent knowledge work. It is implemented and justified through the following documentation, Emacs Lisp source code, and Ansible task and role definitions. This system is a Literate Programming project, a collection of configurations and simple software written with the mental inputs which went with its creation, basically. Each page is loaded up by the code in this document, source code is extracted and compiled, and then evaluated, an init.elc created for the next boot's benefit.

This is not an Open Source Project, nor is it a public wiki. These documents mainly exists to be consumed by me as an org-mode meta application existing within my Concept Operating System. It can eventually be consumed by others through the World Wide Web. It is not designed to be built on top of by others except as a collection of concepts and ideas and implementation details. It is not designed to be "used" by others, per se, outside of copying and pasting code from changes delivered eventually via RSS. "don't @ me"1 about this. Post changes to your blog, publish your own wiki, or host it via GitLab if you seek to build a shareable solution or a community. I am happy to move on to well-supported library solutions as opposed to my own tin-can code, so take my contribution to the commons and expand upon it if you want. I do not want to be a maintainer of an Open Source Project. This is a space for me to explore and to learn about myself and my world. Build your own tools and collaborate with me over high-bandwidth communication protocols. Find me on Matrix if you wanna talk about this – or directly.

These code blocks use helpers in Shared CCE Helpers and depend on a running org-roam session. I need to understand better how to Provisioning New Machines is affected by this high-level dependencies.

This code will "tangle" the org-mode files' source code out to individual files:

(let ((modules (cce/module-list)))
  (mapc (lambda (l) (org-babel-tangle-file (car l)))

cce/dynamic-ansible will run the Ansible portions of CCE in a buffer named cce-install.

cce/dynamic-init will create a cce/init.el which contains the Emacs Lisp from the code in each CCE module, and then byte-compile that file directly to ~/.emacs.d/init.el for next startup.

Here are the modules that the indexer can see:

00 Configure Packaging packaging cce/packaging
01 Emacs Persistent Scratch cce/persistent-scratch
01 External Display Test Functions cce/display-test-functions
01 Effective Emacs Marking cce/mark
01 Running Things in Emacs Forever cce/async-forever
01 Flowing Keybindings with Hydra cce/hydra-base
01 Evil Mode – Vim in Emacs cce/evil-mode
01 Emacs Session Startup cce/startup
10 Themeing my Emacs cce/appearance
10 Emacs Dashboard cce/dashboard
10 Window Management in Emacs cce/window-management
10 Emacs "Launcher" Hydra cce/hydra-launcher
10 Clean Buffers at a Regular Interval with Midnight Mode cce/midnight-mode
10 Dired File Manager cce/dired
10 Smarter Emacs Help cce/hydra-help
10 Undo and Redo with a tree cce/undo-tree
10 Emacs Control Via Ivy cce/ivy-config
10 Moving Through Text with Emacs cce/text-navigation
10 Doom Modeline cce/doom-modeline
10 Hydra Dipswitches cce/hydra-dipswitch
10 Editing Privileged Files with sudo-edit cce/sudo-edit
10 Focused Text Editing cce/focused-mode
10 Text Editing Fundamental Opinions cce/text-editing
10 Floating Minibuffer via Ivy/PosFrame cce/ivy-posframe
10 In Emacs Underscores should be part of words underscores-syntax-table cce/underscores-syntax-table
10 Selectrum, etc cce/selectrum
15 Spell-checking with Flyspell Mode cce/flyspell
18 Toggle Bright/Dark Theme in Emacs, KDE and FireFox cce/toggle-theme
20 NixGL nixgl cce/
20 Picom on EXWM startup cce/exwm-xcompmgr
20 Unlock Computer With Yubikey pam-u2f cce/
20 use PodMan for local container builds podman cce/
20 defdaily cce/defdaily
20 EXWM cce/exwm
20 Japanese Text Input in Emacs cce/japanese-input
20 My NixOS configuration cce/
21 Super-P runs commands cce/super-p
21 EXWM should ignore Plasma notifications cce/exwm-ignore-plasma
21 EXWM Input Simulation cce/exwm-input-simulation
21 Generate a Dynamic Home Manager Configuration cce/home-manager
30 Using Yubikey as a GPG Key yubikeys cce/
30 Vulfpeck Fonts are Fun vulfpeck cce/vulfpeck
30 My "Now Playing" on Fediverse cce/
30 SSH Configuration cce/ssh
30 Nearly Stateless Computing Using Syncthing cce/
30 Redshift redshift cce/
30 Deadgrep is a Great Grep Interface cce/deadgrep
30 Using Yubikey as an OTP Key yubikey-otp cce/yubikey-otp
30 GnuPG Configuration cce/gnupg
30 Keyboardio Atreus atreus cce/
30 Encumbered Media Support rpmfusion cce/
30 KDE is a Base for my Emacs Desktop kde-desktop cce/kde-desktop
30 Using Pass for Passwords pass cce/pass
31 Sitelen Pona Pona sitelen-pona-pona cce/sitelen-pona-pona
40 Emacs Shell-Mode is Good Enough cce/shell-mode
40 Use Emacs as a Pager emacs-pager cce/emacs-pager
40 Org Mode Installation cce/org-mode
40 Emacs vterm Mode cce/vterm
41 Org Tagging Principles cce/org-tagging
41 org-protocol to quickly annotate web pages org-protocol cce/org-protocol
41 Some Thoughts on Time Tracking cce/org-time-tracking
41 Project Work with Org Mode cce/org-tasks
41 My Org-mode Agendas cce/org-agenda
41 Extracting Org Roam Headings cce/org-roam-extract
41 Capturing Tasks cce/org-capture
41 Project Management in Org Mode cce/org-projects
41 org-roam org-roam cce/org-roam
42 Mood Log cce/mood-log
42 Journal cce/journal
43 Spaced Repetition Study cce/org-fc
45 publicimageltd/delve: Delve into your org-roam zettelkasten. cce/delve
45 Dynamic and fast agenda cce/dynamic-fast-agenda
45 Quickly Rename Captured Zettel Files cce/org-roam-rename-file
45 org-download cce/org-download
45 Embed CSS in Org-Mode HTML Exports cce/org-html-css
48 org-caldav cce/org-caldav
49 Finding Broken Knowledge Base Links cce/org-roam-sbl
50 Web Browsing cce/web-browsing
50 Weechat for Matrix weechat cce/weechat
50 Evil, EXWM, and Firefox walk in to a bar cce/exwm-evil-firefox
50 A Custom Firefox User Chrome firefox-cust cce/
50 Firefox can use KDE file dialogs firefox-portal cce/
50 Plasma Browser Integration cce/plasma-browser
50 A Basic Firefox Installation firefox cce/firefox
50 A Basic Firefox Installation firefox cce/firefox
60 Surfing Through Codebases cce/code-surf
60 Basic Emacs Coding Config cce/code-base
60 Code Formatting, Aggressively cce/aggressive-indent
60 Basic Language Coverage code-modes cce/code-modes
60 Company Code Completion cce/company
60 Git in Emacs with Magit cce/magit
60 Literate Programming with Org Babel cce/literate-programming
60 CCE Nixos Core nixos cce/nixos
60 Navigating Projects With Projectile cce/projectile
61 Smart Snippet Templates with Yasnippet cce/yasnippet
61 Ediff Configuration cce/ediff-config
62 Programming Common Lisp in Emacs common-lisp cce/common-lisp
62 Programming Lisp in Emacs cce/lisp-core
62 Python in Emacs through LSP python cce/python
62 Elixir Programming Configuration elixir cce/elixir
62 Emacs and the Language Server Protocol cce/lsp-base
62 karlicoss - Human Programming Interface hpi cce/
62 AxiDraw cce/
63 Extracting notes from Kobo Aura One hpi-kobo cce/
70 Ansible Bender ansible-bender cce/
70 CCE Dynamic Loader cce/cce-loader
70 Gnus gnus cce/gnus
70 mbsync for local mail storage mbsync cce/mbsync
71 Gnus Evil Mode cce/gnus-evil-mode
71 Sending Mail in Gnus msmtp cce/msmtp
71 Gnus Task Tracking cce/gnus-org-integration
71 Gnus Adaptive Scoring cce/gnus-adaptive
80 Universal Aggregator universal-aggregator cce/universal-aggregator
80 Japanese Study cce/japanese-study
90 Therapy Notes and Work cce/therapy-notes
Meditation Log cce/meditation-log
Monthly Review cce/monthly-review
Tea Practice cce/tea-practice
Nixos Automatic Partitioning Installer cce/
NixOps cce/nixops
90 Shared CCE Helpers cce/cce-common
Decision Log cce/decision-log
Weekly Review cce/weekly-review
90 PrintrBot Simple Metal cce/
Deploying the Arcology cce/
90 v4l2loopback and obs-v4l2sink let you use OBS for your webcam obs-v4l2sink cce/
90 Applications I Use cce/
Managing Firefox with Nix home-manager cce/
99 Run Hooks After init cce/run-hooks
99 CCE on Termux cce/termux


This is Referenced


in "Emacs"

The substrate for CCE: The Complete Computing Environment, a programmable Lisp Machine which is also a text editor.

in "The Change of Scenery and Kickass Systems"

And so I've withdrawn, and built The Complete Computing Environment for myself, built the first iteration of Arcology knowing that no one else could use it, all while of course feeding this monster of capital in my own way. But as this vision comes together, I think there is a future where these things can be shared, where a private network can be operated by three or four people and serve the needs of 20 or 50. I think that society could structure itself in this fashion more. Small community and familial collectives, providing for each other in spite of the rest of the world. I know I'm a fool. The point is that I would like to live in a world which respects its inhabitants, and that those inhabitants respect the world. As our world is shut down and isolate, gripped in fear of COVID-19, I see signs that I am not the only person looking for solutions towards the increasingly visibile inequity around me. And so, I have decided once again to sharpen the axe, to find a point on the map of space-time-culture and walk towards it with purpose.

in "Fedora Linux"

A community Linux distribution, the base of the CCE and my OS of choice since adolescence.

in "Concept Operating System"

I describe The Complete Computing Environment half-seriously as a Concept Operating System.

in "org-mode meta application"

org-roam and the CCE are also org-mode meta-applications. My Practice Captures may be, I am unsure.

in "Navigating the Arcology"

The Lion's Rear, The Arcology Garden, The Complete Computing Environment are these roots.

in "Arcology Sitemap"

Navigating the Arcology is supposed to be a somewhat curated experience. I either send out a direct link to a page, and people can read and explore from there, or they go to one of the index pages like The Arcology Garden, The Complete Computing Environment, or The Lion's Rear. Those index pages are carefully curated, if not to send people on a romp through the respective garden, then to at least not get lost if they go back to that page.

in "Run Hooks After init"

This code runs at the end of the init file generated in my Index of CCE Functionality. Throughout the CCE, there's code which attaches functions to after-cce-hook ((deadgrep "after-cce-hook") to take a look), this makes sure they're run after everything else is initialized.

in "CCE Dynamic Loader"

The Complete Computing Environment is at its core a set of documentation, a pile of org-mode files and code that extracts the source code from those files before compiling and ultimately running that code. In the original implementation of CCE, there was a hard-coded list of files to load code from, and managing this over the years has become complicated. Eventually I expanded the CCE to also manage my server, opting to push all of that in to a single file.

in "org-protocol to quickly annotate web pages"

This page is a CCE module based on two sources12 from the WWW (Probably one of Sacha's Emacs weeklies) and the org-roam documentation.

in "Configure Packaging"

This is the package manager configuration for CCE: The Complete Computing Environment

in "Mood Log"

Build Practice Captures for recording my mood and graphing over long term CCE. It's funny, I never actually did this, and maybe this says more about how I am using this software: I have been using this as a Topic Files within the Journal. So, this informed the design of the defdaily system, a system evolving.

in "Running Things in Emacs Forever"

In The Complete Computing Environment there are a number of processes that I run that I want to have more visibility in to than if they were running as SystemD User Services. They may die, they may start to spawn errors, I want to know if it's failing or misbehaving. Right now this is mainly used in my OfflineIMAP setup, but I maintain it here and use it for one-off solutions.

in "Correct IMAP unread counts - dabrahams/dwamacs@0d6a991 - GitHub"

Candidate for CCE module to restore unread message counts in Gnus, even with MaxMessages set in mbsync configuration. with MaxMessages 1000, my ~/Maildir is 8.0 gb, probably from A bunch of cool tumblrs which I might move in to an actual Tumblr account again.

in "Elixir Programming Configuration"

I use Language Server Protocol for Elixir in Emacs CCE, I believe LSP mode can automatically install the server

in "Arcology: An Org Roam Publishing System"

in "Morning Routine"

in "What Lies in the Path of the Revolution"

in "Lipu Kasi - A Plant Diary"

in "Tea Practice"

in "CCE Nixos Core"

in "CCE Nixos Core"

in "Universal Aggregator"

in "Themeing my Emacs"

in "Literate Programming with Org Babel"

in "My Org-mode Agendas"

in "rrix Uses This"

in "Arcology DB Creates a Queryable Cache of Knowledge"

in "CCE on Termux"

in "Dynamic and fast agenda"

in "NixGL"

in "Evil, EXWM, and Firefox walk in to a bar"

in "Web Browsing"

in "org-roam"

in "Creating Activation Scripts for Home Manager"

in "Shared CCE Helpers"

in "Shared CCE Helpers"

in "The Arcology Garden"

in "The Arcology Garden"

in "Gnus"

in "Generate a Dynamic Home Manager Configuration"

in "Generate a Dynamic Home Manager Configuration"

in "Generate a Dynamic Home Manager Configuration"