6
13
Fork
You've already forked dotfiles
1
The path to GNUrvana.
  • Emacs Lisp 54%
  • Scheme 20.2%
  • Shell 15.4%
  • Python 5.7%
  • Lua 2.7%
  • Other 1.9%
Find a file
2026年07月10日 15:15:19 +03:00
.archive archive: Include Flatpak invocation for Firefox 2023年03月02日 17:52:22 +02:00
.emacs.d emacs: Add @system tag and custom agenda for Untagged Tasks 2024年06月19日 10:24:48 +03:00
.files tmux: Add fzf file picker and magit popup keybindings, add fzf to profile 2026年03月24日 13:41:21 +02:00
.github Create FUNDING.yml 2020年10月06日 16:44:51 -07:00
.site site: Strip HTML elements from page titles (thanks Ashraz!) 2021年03月21日 15:22:15 -07:00
backgrounds meta: Add new background image 2023年03月09日 20:47:05 +02:00
daviwil home: add ~/.sigil/bin to PATH; GPG pinentry-tmux + sudo-askpass-tmux popups; sway-login XDG_VTNR guard; drop chief-ping cron 2026年07月10日 11:47:07 +03:00
emacs emacs: Update sigil-program 2026年07月10日 15:15:19 +03:00
.build.yml build: When mirroring, force-push to GitHub 2021年05月06日 16:13:21 -07:00
.gitignore desktop: Remove OBS configuration, it's a pain to keep in Git 2024年04月05日 09:02:36 +03:00
.gitmodules emacs: Remove Chemacs submodule 2024年04月05日 09:04:23 +03:00
.stow-local-ignore meta: archive -> .archive 2021年10月13日 06:02:21 -07:00
Emacs.org emacs: Update sigil-program 2026年07月10日 15:15:19 +03:00
LICENSE meta: Switch back to the MIT license 2021年10月04日 08:09:46 -07:00
README.org meta: Typos 2023年03月09日 16:03:44 +02:00
tangle.sh emacs: Add tangle script for Emacs.org 2026年01月05日 06:24:44 +02:00

/home/daviwil/.dotfiles

This repo is the home of my custom system configuration which enables a consistent computing experience across multiple machines. These days I primarily use GNU/Linux via the GNU Guix distribution.

I manage the various configuration files in this repo using a combination of Guix Home and GNU Stow. This allows me to set up symlinks for all of my user-level configuration using two commands:

stow .files/
update-home

The update-home command is my own custom script to launch the guix home command.

Principles

The configuration files in this repo crystallize a workflow that is increasingly effective and satisfying for daily use. When choosing tools and putting them together, I generally follow these principles:

Keyboard Focused

I prefer tools that enable me to control everything primarily with the keyboard. When you work with words and code all day, reaching for the mouse switches your input modality and slows you down. Using GNU Emacs enables me to have consistent, convenient key bindings for just 80% of what I need to do on a daily basis. Another 15% is covered by using web sites and apps; Qutebrowser makes the web browsing experience a lot more keyboard friendly and seamlessly integrates with my Emacs workflow.

Minimal Distractions

I don't want things on the screen that are unrelated to what I'm doing. My workflow focuses on a single main screen with an occasional secondary screen (my laptop) when docked. I very rarely display more than one buffer or window on the main screen at a time. Emacs makes it easy and fast to switch between open buffers (and workspaces in EXWM) so there's really no reason to have two unrelated things visible on the screen.

I display minimal information in my Emacs mode line (using doom-modeline) and I only display a small amount of computer status information in Emacs' tab-bar-mode.

Text-based Configuration

I really don't want to use a program that doesn't support text-based configuration files. I also prefer tools that don't write out those configuration files on my behalf. This enables me to commit program configuration to source control (this repository) so that I can keep configurations in sync on every machine that I use.

Guix enables me to apply this principle to my entire system configuration, even sharing the same base configuration across multiple machines. This has provided me with a stable, consistent computing experience across the three machines I use on a regular basis.

Highly Customizable

To perfect my computing workflow, I choose tools that allow me to customize them to fit in smoothly with everything else. Emacs is the most faithful adherent to this principle as it allows you to intercept or replace the code for just about anything it does. For other programs, I like to use tools that are either scriptable by some means or enable to you call out to another process (or shell script) to gather information. Vimb and Polybar both do this, so it's pretty easy to integrate them into the rest of my workflow.

Literate Configuration

My former literate configuration (archived here) has now been replaced by a Guix Home configuration. I will document this more completely as time permits.

Check out my YouTube channel

I have created a number of videos on YouTube that will teach you how to make a custom system and desktop environment configuration like mine. Check out the System Crafters channel, or any of the following playlists:

  • Emacs From Scratch: Step by step creation of a custom Emacs configuration from scratch
  • Emacs Desktop Environment: Create a minimalistic desktop environment with EXWM and other tools
  • Emacs IDE: Set up a development environment using lsp-mode and dap-mode
  • Emacs Tips: A variety of tips and explanations of community packages
  • Emacs Mail: Configuring Emacs as a mail client

License

Released under the MIT License unless otherwise specified by license files in subfolders.