Giter Site home page Giter Site logo

rin-emacs's Introduction

rin-emacs

(placeholder name)

Name ideas:

  • cdrmacs
  • xrdg
  • ri-macs
  • rin-emacs
  • Xmodmacs
  • windowmacs
  • terramacs
  • (these are all mid….)

A modular Emacs distribution designed for speed, flexibility, transparency, and ease of configuration.

Why another Emacs distribution?

I found that most popular Emacs distros like Doom Emacs are slow, bloated, and too abstracted away for my liking. I wanted to create an Emacs distribution that’s very fast, minimal, and transparent, all the while meeting my needs and beyond.

And beyond me simply creating a personal Emacs config that does all of that, I wanted others, including those with very little Emacs experience, to be able to pick up and use my config. I wanted users to be able to start off with a polished experience like that of Doom Emacs, then gradually strip away abstractions and uncessesary features to make it as minimal as desired, while still meeting all of their needs.

And to those who love having an environment that’s as minimal and transparent as possible, instead of Emacs distro-hopping to increasingly more minimal distros, your config can simply be flexibly molded into a more minimal one, all the way to something that’s akin to vanilla Emacs.

The module system:

This distribution provides many modules, with each one providing a specific feature. The user has their own config file where they can load any of those modules, allowing one to easily put together a base config that meets their needs without introducing too much bloat.

./init.el
The first file that is loaded. Does miscellaneous initial setup, then loads the userside config.
./config.el
The userside config and is for declaring default fonts, loading your modules of choice, setting variables related to those modules, and writing whatever elisp you want. You could even try writing your own modules and load them from here, if you’d like.
./modules/
Directory containing a list of subdirectories from which modules will be loaded from. These subdirectories are organized by how/when they are loaded.
./modules/pre-init/
Directory containing modules that are run in init.el, and must be run in a very specific order. These deal with package management and other pivotal features that must be configured first.
./modules/init/
Directory containing modules that are run in init.el after the modules in pre-init/, and can be run in any order, but some may be more preferable. These deal with themes and basic packages that are expected to be installed in many later modules.
./modules/features/
Directory containing lots of modules to be loaded from config.el. This is where you get to freely choose which modules to load. The order does not matter.

Note:

This project is still very incomplete and under active (procrastinative) development.

At its current state, the default config has keybinds designed for dvorak-programmer.

Installation

To use this config without eradicating your pre-existing ~/.emacs.d, you may git clone the project anywhere, and then run $ emacs --init-directory <path-to-repo> to run emacs from that directory. Because meow with dvorak-programmer is the default, run the previous command with the argument --sane-keybinds to load qwerty meow keybinds (temporary feature so others can easily try out my config).

All this is subject to change.

Configuration

You can configure which modules are loaded in config.el. However, I wouldn’t advise configuring it and expecting everything to work when you next run git pull. Use at your own risk!!!

Basic keybinds reference (wip) (might not work based on modules loaded):

M-o
other-window
SPC
Meow/Evil leader key (if Meow, SPC is basically same as C-c)
SPC f
(prefix) files
SPC b
(prefix) buffers
SPC w
(prefix) windows (TO FIX)

TODO:

  • [ ] able to swap between evil and meow
  • [ ] try to make compatible with at least dvp and qwerty
  • [ ] evil-mode
  • [ ] undo-tree
  • [ ] crux
  • [ ] free-keys
  • [ ] better window management
  • [ ] better ivy
  • [ ] info
  • [ ] darkroom
  • [ ] calc
  • [ ] improve dired/dirvish keybinds
  • [ ] improve keybinds for everything
  • [ ] stumpwm-mode
  • [ ] ALL of org and related stuff
  • [ ] polish LSP, ide, languages
  • [ ] crdt
  • [ ] eshell
  • [ ] sudo edit
  • [ ] hide dots
  • [ ] misc programs
  • [ ] lots and lots and lots more

Notes to self:

Cool keybinds to write down:

M-/
dabbrev-expand
C-M-/
dabbrev-completion
C-M-i (C-M– if dvorak)
complete-symbol

(override-module ‘ri-meow-gen) ;; module not found ;; run before load modules?

have cursor pre-indented to header body distance in org-mode? is this bad? slow? when open new help window, make it auto switch?

  • actually, only has this effect if cursor at end of file/buffer…

For each user module found, create a function called mod/file-name that can be run to load the module!

Make C-<return> take the C-j command for lsp-mode? using [brackets] thing used in helpful mode?

For crux, make it local to buffer, like in org-mode only…

In userside config, (:ri-disable) will prevent future setup declaration with same name from running.

docview disable line numbers mode

docview disable blink cursor modee

TODO: create backup bitmap fontface for symbols? tamzen-powerline?

TODO: in stumpwm, startup emacsclient with cmd multi-vterm instance?

emacsclient -ce "(multi-vterm)" -a "alacritty"

TODO: in stumpwm, for scratchpad terminal, run emacsclient with standard vterm?

emacsclient -ce "(vterm)" -a "emacs"

do i need to do ~-a “emacs -e ‘(vterm)’”~ to work?

ri-lsp–depend <- pulled by both ri-lsp-mode and ri-lsp-eglot ?

(require ‘ri-lsp-mode) (ri/require-incl-setups ‘ri-lsp-mode ‘(“lsp-mode” “flycheck” “company”) (ri/require-excl-setups ‘ri-lsp-mode ‘(“lsp-ui” “yasnippet”)

  • will need to modify setup macro. Vars ri/require–to-incl and ri/require–to-excl, both nil by def. Make it so for every setup macro, if either vars are non-nil, print message and abort. function ri/require-….-setups (TO-REQ LIST): fill appropriate var to LIST (require TO-REQ) set appropriate var to nil end of fun;

For bitmap fonts, create custom backup italic face.

Keep yas-minor-mode enabled, but disable TAB to randomly complete at point

dired sort by file size (or any value)

SPC-SPC error, commandp 1 (fix?)

for stumpwm, notifs, make persisting, or at least cmd to show last few notifs

create a script that plays random media in a dir with mpv

Switch to ratpoison and script it with Emacs or guile following system crafters tutorial

set up org-roam for stats and bio classes (everything in there) (follow bookmarked tutorials)

add whatever everything in config.el after init part, will later convert to modules maybe. (require-module ‘ri-org) for less verbose shortcut, inline with misc config.el configs down

post-system fix: make sure to daily btrfs snapshot

notice that there’s a lot of user-related stuff in init.el (is-guix, etc…). move these to user-side, gradually make it more separate between default init.el and user config, all the while adding more random stuff to the end of config.el to make into defined user-side stuff.

use #’load or use-package with path to local repo for each module: e.g.: https://github.com/countvajhula/.emacs.d/blob/master/init.el

straight-normalize-all vs straight-pull-all https://github.com/radian-software/straight.el?tab=readme-ov-file#version-control-operations

switch to use-package? (if yes, don’t ever use :ensure, and use :require if required).

rin-emacs's People

Contributors

senkowo avatar

Watchers

 avatar

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.