#+TITLE: Guix Machines #+AUTHOR: Collin J. Doering #+BEGIN_EXPORT html
#+END_EXPORT #+begin_abstract Guix configurations for all Guix powered systems privately managed by the author. This includes all virtual machines for my home network, cloud/vps instances, as well as personal computers. Due to the variety of types of systems managed via this repository, two mutable deployment methodologies are supported: 1. A push based model, using ~guix deploy~[fn:1] to remotely deploy changes (useful for example from ci/cd). 2. A pull based model, using ~guix~ along with this repository directly from the target machine. Immutable deployment is not yet supported, but is certainly possible given Guix's ability to build an ~operating-system~ configuration into a image. #+end_abstract * Repository Structure - ~channels*.scm~ :: [[*Guix Channel Files][Guix channel files]] - ~deploy/~ :: Folder containing all ~guix deploy~ configurations - ~.gitignore~ :: Files ignored by git - ~.guix/~ :: Guix channel directory - ~.guix-authorizations~ :: Guix authorizations file[fn:2] - ~.guix-channel~ :: Guix channel file[fn:3] - ~.pub-keys/~ :: Folder containing public key files used by Guix configurations - ~README.org~ :: Org-mode[fn:4] documentation - ~TODO.org~ :: Org-mode todo's, known issues and future aspirations - ~unguix/~ :: Docker/docker-compose files used on deployed instances, managed outside of guix. Once better support for running docker/docker-compose via shepherd, specified declaratively via Guix configuration has been implemented, this directory and all files within it should be able to be removed. ** User Supplied Files Required for Push Based Deployment - ~.deploy-key~ :: Folder expected to contain two files (a public and private ssh key, named ~key.pub~ and ~key~ respectively). ** Guix Channel Files Guix channels[fn:5] allow for Guix to be customized and extended. They are also critical for replicating a Guix system[fn:6]. As mentioned above, there are two primary classes of deployments that are managed using this repository, push based and pull based. In both cases, what specific versions of software that will be installed during deployment depends on the guix channels in use. To ensure reproducibility, ~channel*.scm~ files are provided in this repository that are expected to be used during deployment. However, multiple channel files are provided as it makes sense to lock software versions across different sets of machines in varying ways. For example, there is value in using the same channel file (and thus, same software versions) across all virtual machines running on my home hypervisor cluster, but there is no reason to explicitly lock my personal machines to the same software versions. Further, cases could arise where my personal computer configuration/s or server configuration/s need to be pinned to a specific set of software versions, and thus require a individual channel file. Though supporting a channel file per machine is possible, it would cause additional maintenance overhead. So instead, two channel files are provided, that correspond to the two classes of machines that are managed. - ~channels-vms.scm~ :: Channel file used for push based deployments to vm's running on my home hypervisor cluster - ~channels.scm :: Channel file used for pull based deployments of personal computers If for some reason channels need to be pinned for a specific deployment, a new channel file named ~channels-