• Stars
    star
    740
  • Rank 61,282 (Top 2 %)
  • Language
    Shell
  • License
    MIT License
  • Created over 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The path to GNUrvana

/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 GNU Stow. This allows me to set up symlinks for all of my dotfiles using a single command:

stow .

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; the Vimb browser makes that 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 my panel (using Polybar).

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

I’ve started to migrate all of my important configuration files to a literate configuration strategy using Emacs’ Org Mode. This enables me to have a single annotated file for a particular configuration area which automatically writes out the actual configuration files involved when I save the .org file.

Org Babel Tips

When inside of an Org source block, you can use org-babel-demarcate-block (C-c C-v d by default) to split the block you’re currently in so that you can insert an annotation.

noweb blocks are extremely useful for configuration organization and sharing configuration values across files. The org documentation on this topic is helpful in understanding the different ways you can reference another block in noweb style.

System Installation

Instructions for installing a system from a Guix configuration can be found in the System Installation section of Systems.org.

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.

More Repositories

1

emacs-from-scratch

An example of a fully custom Emacs configuration developed live on YouTube!
Emacs Lisp
1,517
star
2

dotcrafter.el

Manage your dotfiles with Emacs!
Emacs Lisp
50
star
3

node-pty-prebuilt

A parallel fork of node-pty providing prebuilt packages for Node.js and Electron.
TypeScript
27
star
4

ide-powershell

A package for Atom providing rich PowerShell language features via Atom IDE!
TypeScript
26
star
5

emacs-from-hell

⚠️ The most dangerous init.el ⚠️
Emacs Lisp
18
star
6

nix-config

NixOS configurations for multiple computers
Nix
16
star
7

electroshell

An experimental PowerShell console hosted in Electron.
TypeScript
16
star
8

emacs-nushell

Experiments with integrating Emacs and Nushell!
Emacs Lisp
9
star
9

hack-panel

A live stream manager and OBS overlay server for hackers
TypeScript
9
star
10

channel-x

The Most Xtreme Guix Channel
Scheme
5
star
11

ld28

A submission for the Ludum Dare 28 competition.
JavaScript
5
star
12

rebase-examples

Examples of common usages of the 'git rebase' command
4
star
13

terminal-tab-service

Provides a 'terminal-tab' service API in Atom for creating terminal tabs.
CSS
4
star
14

daviwil.github.io

https://daviwil.com
HTML
3
star
15

eclispe

An experimental Lisp compiler
C
2
star
16

guix

A mirror of the GNU Guix repository for my own patch development.
Scheme
1
star
17

dotweaver.el

Emacs Lisp
1
star
18

gitter-actions-webhook

Experimenting with sending Gitter webhooks for GitHub Actions job results.
1
star
19

emscripten-guix

An example of building a C application with Emscripten on Guix
C
1
star
20

quil-overtone-lab

A test project to integrate Quil and Overtone for procedural art and music.
Clojure
1
star
21

org-site-testing

Experimenting with website generation using org-mode
Emacs Lisp
1
star
22

what-the-doug

Testing out Probot
JavaScript
1
star
23

PSOrgMode

A PowerShell module for reading and manipulating org-mode files.
1
star