dotfiles of Collin Doering.
Go to file
Collin J. Doering 7dbf427881
home.scm: Add caddy development ca-certificate
* .guix/rekahsoft/guix-config/home.scm (caddy-local-ca-cert): New variable. Defines a package that contains the ca certificate used by caddy in local development on this machine.

* .ca-certificates/caddy-local-dev.pem: New file, the pem encoded certificate used by caddy in local development (note: this is specific to my personal laptop)
2022-08-27 14:52:13 -04:00
.ca-certificates
.guix/rekahsoft/guix-config
user-config
user-config-unused
.envrc
.gitignore
.guix-authorizations
.guix-channel
channels.scm
home-manifest.scm
Makefile
README.org

RekahSoft Dotfiles

Cuirass Status

These are the dotfiles of the author, managed using guix-home, in combination with gnu stow (until the gnu stow deployment mechanism has been deprecated in preference of guix-home).

Repository Structure

channels.scm
Guix Channel File
.gitignore
Files ignored by git
.guix/
Guix channel directory
.guix-authorizations
Guix authorizations file1
.guix-channel
Guix channel file2
README.org
Org-mode3 documentation
TODO.org
Org-mode todo's, known issues and future aspirations
home-manifest.scm
Guix manifest used for cuirass builds (and as needed via the cli)
user-config
Configuration for various programs managed using gnu stow, not guix-home (just yet)
user-config-unused
Configuration for various programs (managed using gnu stow) that is no longer used

Guix Channel File

Guix channels4 allow for Guix to be customized and extended. They are also critical for replicating a Guix system5. To ensure reproducibility, a channels.scm file is provided in this repository that is expected to be used during deployment. It pins external guix channels to specific versions.

TODO Updating guix channels used for deployment

This doesn't work right unless your channels match what is expected by this repository.

  guix time-machine -- describe -f channels > channels.scm

dotfiles the Guix Channel

This repository is itself a Guix channel, which allows home configurations to come directly from the channel, and the version of this configuration be managed just like any other guix channel. It also facilitates CI, allowing for changes this channel be evaluated by Cuirass at https://guix-ci.home.rekahsoft.ca6. This channel does not define any packages, only home configurations.

Quickstart

Home configuration, including startup services (via userland shepherd), configuration files and installed packages are all managed using guix/guix-home and can be installed with the following.

  guix pull -C ~/.dotfiles/channels.scm
  guix home reconfigure -e '(@ (rekahsoft guix-config home) %home)'

TODO Working with Local Sources

Clone this repository.

  git clone <repo> ~/.dotfiles
  cd ~/.dotfiles

To deploy changes that have not yet been commit, the -L|--load-path option to guix can be used like so.

  guix home reconfigure -L .guix -e '(@ (rekahsoft guix-config home) %home)'

TODO Legacy Configuration

Configurations for a variety of programs are available to be 'installed' by symbolically linking them into $HOME using stow. This process is simplified by the provided Makefile, however is expected to be deprecated by the switch to Guix home, which is not yet fully completed. Currently guix home only manages bash configuration, and all other configuration is still managed using the 'legacy' stow method described here.

  # See what will be installed/linked by stow
  make DRY=true

  # Install/link all configurations
  make

TODO Makefile Usage

Makefile is expected to be become unnecessary after this configuration is managed by Guix home instead of using stow.

make [packages] [DRY=true] [RESTOW=true] [DELETE=true]

Where: <DRY> must be undfined or 'true' <RESTOW> must be undfined or 'true' <DELETE> must be undfined or 'true'

Notes: If no [packages] are listed, all packages are actioned upon via the all target

Examples

  # Install a subset of the entire configuration
  make zsh xorg

  # Relink configuration
  make RESTOW=true

  # Relink configuration for a subset of packages
  make RESTOW=true bash zsh

  # Uninstall/unlink configuration
  make DELETE=true

  # Uninstall/unlink configuration for a subset of packages
  make DELETE=true bash

Development

This section details some useful tips regarding development.

Guix

Here are some useful commands for working with package upgrades on guix.

  # Check for binary substitute availability on the tip of master
  guix time-machine -- weather -m ~/.dotfiles/home-manifest.scm

  # Build a environment using the provided home-manifest.scm off the tip of master (useful to test the new environment)
  guix time-machine -- environment -m ~/.dotfiles/home-manifest.scm -- exit

Updates that modify zsh site-functions (completions)

These updates require additional manual effort, otherwise completions don't show up.

  # Set fpath in ~/.zprofile (this is already done in the zsh configuration)
  #fpath=(~/.guix-home/profile/share/zsh/site-functions $fpath)

  rm -r ~/.zcompdump && compinit

Try out any packaged window manager

The included xorg configuration provides a script that is used to startx, located in ~/.bin/startx.sh after installing/linking the xorg configuration. This script is required as the startx that comes with the xinit package on guix does not work when Xorg is installed in a user profile. Like the original startx command, this script passes through arguments to ~/.xinitrc. The included ~/.xinitrc takes two optional arguments, SESSION_WM and SESSION_TYPE, the window manager to run and the session type to use. The session type can be one of full (default), min, or new.

Start the default window manager (exwm) with the default session type (full).

  startx

Note: if using the configuration zsh or bash, all *.sh scripts linked into ~/.bin are aliased to exclude the .sh suffix.

  guix environment --ad-hoc ratpoison -- startx.sh ratpoison new

Note: The script startx.sh must be used directly here, and not by the startx alias mentioned above.

This works very well for simple window managers, however for more complicated environments, many times there are numerous packages that will be required. Here is an example of starting xfce using this mechanism.

  guix environment --ad-hoc xfce xfce4-session xfconf -- startx.sh startxfce4 new