Coder Social home page Coder Social logo

daviwil / dotfiles Goto Github PK

View Code? Open in Web Editor NEW
785.0 24.0 186.0 21.85 MB

The path to GNUrvana

Home Page: https://config.daviwil.com

License: MIT License

Shell 13.15% Emacs Lisp 53.00% Common Lisp 1.32% Python 7.56% Scheme 23.72% CSS 1.17% HTML 0.09%

dotfiles's Introduction

/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.

dotfiles's People

Contributors

daviwil avatar parimal7 avatar paul-jewell avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dotfiles's Issues

Connecting via broadband connection impossible before installation of Guix

Forgotten about broadband connection during operating system installation (as usually with official linux iso).

If you are with 3g modem and mobile broadband connection it is not possible to make Guix install. How about including packages/drivers to create mobile network connections active before the final installation phase?
It is good to have an iso which is focused on creating internet connection by any possible methods first because without it you can't install this OS. For supporting mobile broadband connection iso should include such packages as usb-modeswitch ,NetworkManager, mobile-broadband-provider-info, ModemManager

Evil magit conflict on update

Recently evil-magit is part of evil-collection. So the (use-package evil-magit ... is no longer needed (cause errors on magit-status).

More info: here

Indenting Org Babel's Source Blocks

I've noticed in a lot of your videos you copy/paste code into an Emacs lisp source block and then manually fix the indent.

This is Emacs lisp - it's trivial to autoindent it! Below is a function that will do this for you:

(defun mn:indent-src-block ()
  (interactive)
  (org-edit-special)
  (indent-region (point-min) (point-max))
  (org-edit-src-exit))

Simply invoke it while the point is in a source block.

Make desktop config work in non-Guix distros

Guix can be installed over top of Ubuntu.
Once you install Guix binary in Ubuntu.
Which commands need to be to so that your entire config can be replicated over my ubuntu.
I dont want to mess with Guix OS installation now, also I dont want to mess with my perfectly working Ubuntu to try this.

Need to solve this before issue #1

guix-home branch: emacs loaded from guix dependencies can't process help lookups

i'm porting my .emacs.d to be more like the emacs config in your guix-home setup. I've begun a long migration away from doom. I've tried asking in a few places so far, but no luck.

i'm using emacs-* packages from guix on a foreign distro, but whenever i use C-h k or C-h f to look things up, i get an error for (void variable read-symbol-positions-list). it's pointing to the correct files in the hashed /gnu/store package AFAIK. is there something I need to do to set this up?

emacs help error - Pastebin.com the stack trace is here, but "debugging emacs help system" is a bit tough to google

to reproduce:

  • git clone https://github.com/dcunited001/.emacs.guix
  • guix shell -m .emacs.guix/emacs-guix.scm
  • then run emacs --with-profile guix or read the ./init.el line by line.

C-h f and C-h k lookups are successful when the code is inside emacs. if it's in any of the libraries, it fails. it's just occured to me that perhaps it's the (setup ...) code.

I use chemacs, so there's a few lines in ./init.el. the config that differ from yours, @daviwil. particularly, the (setup (:pkg ...)) defaults to pulling in dependencies from guix unless :straight t is specified.

Home manifests don't work with package outputs?

Hello, I'm using your code from utils.scm for guix home with package manifests. It seems to not properly install package outputs (glib:bin, lsp-plugins:lv2, etc). Guix shell works with these packages but not guix home.

Could not get to partition phase, installed "vanilla GUIX"... now rebuilding fun

Dave -

You've sold me on GUIX/Emacs.

So, I'm doing it.

But my Lenovo laptop wouldn't build your custom image (after the channel and system changes, the install would dump before I could get to the partition).

I could get it to work with the vanilla install using your early September install image, but, no Wireless and no custom kernal.

I'm working on rebuilding it.

The error I'm currently stuck with is:

**** no code for module (nongnu packages linux)

After

sudo -E guix system reconfigure /etc/guix/system.scm

(this has the kernal changes and such from your USB install)

I've updated all of the channels - no problem.

Is there a kernal package that I need to explicitly install?

Installing Guix OS and whole config using common linux OS like Ubuntu

Guix beginner here, just want to try Guix OS + your whole config (will change it eventually).

I am plannng to install this Guix OS + your whole config on external SSD, just to try it out and modify it further whenever I have time. It will not stop my usual workflow which uses Ubuntu.

I believe it is possible to do above thing by making bootable USB from my Ubuntu system and then follow the Guix installation process from it and somehow copying yr config files in that.

These are steps I have done to achieve it,

git clone https://github.com/daviwil/dotfiles # clone this repo
cd dotfiles
cd .config/guix/systems
guix system disk-image ./install.scm #will make iso file, mount it on USB, install Guix OS on external SSD

The last command is not working and giving following error,

guix system: error: failed to load './install.scm':
ice-9/boot-9.scm:3300:6: In procedure resolve-interface:
no code for module (nongnu packages linux)

Any suggestions to resolve it.

I would like to update this issue further as new issues come out.

Emacs config. <escape> won't work

Hello David,

It is a good and detailed guide and configuration of your Emacs.org. But I'm struggling with one of your configurations, namely (global-set-key (kbd "<escape>") 'keyboard-escape-quit). That I don't think it will work, since global-set-key will put the key binding into Emacs's global keymap which resides in a quite low precedence. You activated evil, and all evil's default keymaps reside in emulation mode keymap of Emacs which has higher precedence than global keymap.

Evil devises its own keymaps into hierarchy as well, all evil's state mode keymaps are basically in the evil global keymap, which in turn has relatively low precedence in evil's own keymap hierarchy. The <escape> key is mapped to evil-force-normal-state command in evil-normal-state-map. So evil's definition will intercept yours. You can use command-log-mode to see to which command exactly the key is bind.

You can use evil-define-key command to define your key binding again. This will put it into evil's axauliry keymap, which is higher than the evil global keymap. For me, evil-force-normal-state is not too useful when you are already in evil's normal state.

Please don't use sudo -E

Hi! Thank you very much for this great Guix resource, it's been very useful to get everything set up.

I suggest you stop using sudo -E in your config and examples. It will make the Guile auto-compiler use the user's home directory to write caches for the system.scm (~/.cache). This means these files will be created with the root user.

The bad part is, if ~/.cache/guix or even just ~/.cache don't already exist, these directories will also be created with the root user and be owned and only writeable by them. As you can imagine, this becomes a problem.

EDIT: Try find ~ -user root to list all root-owned files to see what I mean :P

It took me quite a while to understand why guile would complain all the time when trying to run Scheme scripts, and I just realized it's because it was unable to write the compiled code to the cache. Luckily I haven't had problems with other programs, but I think that's because the ~/.cache directory is created by default (or I've just been really lucky).

So, I suggest you stop using it in examples and in your own code too. This is not the first time sudo -E has caused me problems, so I really discourage it. (sudo -E $EDITOR is also a common use, and it's just as harmful! If your editor downloads any plugins or creates any folders inside $HOME, they will have the exact same problem as the Guile compiler above).

Again, thank you for this resource. The use of org-mode (or whatever other emacs magic is involved :s) to make the self-describing files in a nice format is amazing and very easy to follow.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.