diff --git a/flake.lock b/flake.lock index 892f0c2..9971282 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,133 @@ { "nodes": { + "doom-emacs": { + "flake": false, + "locked": { + "lastModified": 1623114989, + "narHash": "sha256-btRwMu76Gnn9lW7YbzDAgWjlJx61tCT+e3kByNx97aw=", + "owner": "hlissner", + "repo": "doom-emacs", + "rev": "2731685095d1e6101b3215aa689426e1834ce00f", + "type": "github" + }, + "original": { + "owner": "hlissner", + "ref": "develop", + "repo": "doom-emacs", + "type": "github" + } + }, + "doom-snippets": { + "flake": false, + "locked": { + "lastModified": 1622216706, + "narHash": "sha256-Dsl5T1OFPy++md0Lo0pKUqcpCW6T5WDF2sjeB/IVi1g=", + "owner": "hlissner", + "repo": "doom-snippets", + "rev": "bc613f448eed1bd363e61c41691a61e9fd139534", + "type": "github" + }, + "original": { + "owner": "hlissner", + "repo": "doom-snippets", + "type": "github" + } + }, + "emacs-overlay": { + "locked": { + "lastModified": 1625937277, + "narHash": "sha256-JbID1xZBoJrDkcqiwk/i42oXVWh7uXSt0EPbGM4HVpw=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "215fb1596ffc8f317cba6460c45ca3e678b51c1f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "emacs-overlay", + "type": "github" + } + }, + "emacs-so-long": { + "flake": false, + "locked": { + "lastModified": 1575031854, + "narHash": "sha256-xIa5zO0ZaToDrec1OFjBK6l39AbA4l/CE4LInVu2hi0=", + "owner": "hlissner", + "repo": "emacs-so-long", + "rev": "ed666b0716f60e8988c455804de24b55919e71ca", + "type": "github" + }, + "original": { + "owner": "hlissner", + "repo": "emacs-so-long", + "type": "github" + } + }, + "evil-markdown": { + "flake": false, + "locked": { + "lastModified": 1591038520, + "narHash": "sha256-Kt2wxG1XCFowavVWtj0urM/yURKegonpZcxTy/+CrJY=", + "owner": "Somelauw", + "repo": "evil-markdown", + "rev": "064fe9b4767470472356d20bdd08e2f30ebbc9ac", + "type": "github" + }, + "original": { + "owner": "Somelauw", + "repo": "evil-markdown", + "type": "github" + } + }, + "evil-org-mode": { + "flake": false, + "locked": { + "lastModified": 1607203864, + "narHash": "sha256-JxwqVYDN6OIJEH15MVI6XOZAPtUWUhJQWHyzcrUvrFg=", + "owner": "hlissner", + "repo": "evil-org-mode", + "rev": "a9706da260c45b98601bcd72b1d2c0a24a017700", + "type": "github" + }, + "original": { + "owner": "hlissner", + "repo": "evil-org-mode", + "type": "github" + } + }, + "evil-quick-diff": { + "flake": false, + "locked": { + "lastModified": 1575189609, + "narHash": "sha256-oGzl1ayW9rIuq0haoiFS7RZsS8NFMdEA7K1BSozgnJU=", + "owner": "rgrinberg", + "repo": "evil-quick-diff", + "rev": "69c883720b30a892c63bc89f49d4f0e8b8028908", + "type": "github" + }, + "original": { + "owner": "rgrinberg", + "repo": "evil-quick-diff", + "type": "github" + } + }, + "explain-pause-mode": { + "flake": false, + "locked": { + "lastModified": 1595842060, + "narHash": "sha256-++znrjiDSx+cy4okFBBXUBkRFdtnE2x+trkmqjB3Njs=", + "owner": "lastquestion", + "repo": "explain-pause-mode", + "rev": "2356c8c3639cbeeb9751744dbe737267849b4b51", + "type": "github" + }, + "original": { + "owner": "lastquestion", + "repo": "explain-pause-mode", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1623875721, @@ -30,6 +158,21 @@ "type": "github" } }, + "flake-utils_3": { + "locked": { + "lastModified": 1623875721, + "narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "f7e004a55b120c02ecb6219596820fcd32ca8772", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs" @@ -48,6 +191,60 @@ "type": "github" } }, + "nix-doom-emacs": { + "inputs": { + "doom-emacs": "doom-emacs", + "doom-snippets": "doom-snippets", + "emacs-overlay": [ + "emacs-overlay" + ], + "emacs-so-long": "emacs-so-long", + "evil-markdown": "evil-markdown", + "evil-org-mode": "evil-org-mode", + "evil-quick-diff": "evil-quick-diff", + "explain-pause-mode": "explain-pause-mode", + "flake-utils": "flake-utils_2", + "nix-straight": "nix-straight", + "nixpkgs": "nixpkgs_2", + "nose": "nose", + "ob-racket": "ob-racket", + "org-mode": "org-mode", + "org-yt": "org-yt", + "php-extras": "php-extras", + "revealjs": "revealjs", + "rotate-text": "rotate-text" + }, + "locked": { + "lastModified": 1625001464, + "narHash": "sha256-3RGoNYZ4hAo+iRTfy6qJfQ3YzLMDDFzBIUQNEmCv6Ms=", + "owner": "vlaci", + "repo": "nix-doom-emacs", + "rev": "3893c50877a9d2d5d4aeee524ba1539f22115f1f", + "type": "github" + }, + "original": { + "owner": "vlaci", + "repo": "nix-doom-emacs", + "type": "github" + } + }, + "nix-straight": { + "flake": false, + "locked": { + "lastModified": 1621543597, + "narHash": "sha256-E/m2Hrw2og//CfOCOWe2yapYC01Tqhozn4YMPYJsC3o=", + "owner": "vlaci", + "repo": "nix-straight.el", + "rev": "8e84d04f10b2298de856b2b8b9a0d13abc91b5ca", + "type": "github" + }, + "original": { + "owner": "vlaci", + "ref": "v2.2.0", + "repo": "nix-straight.el", + "type": "github" + } + }, "nixos-hardware": { "locked": { "lastModified": 1625333638, @@ -66,10 +263,10 @@ }, "nixpkgs": { "locked": { - "lastModified": 1625281901, - "narHash": "sha256-DkZDtTIPzhXATqIps2ifNFpnI+PTcfMYdcrx/oFm00Q=", - "path": "/nix/store/wsfwxm10shvi4yr0ll8p4v1dp7l7wqfl-source", - "rev": "09c38c29f2c719cd76ca17a596c2fdac9e186ceb", + "lastModified": 1625697353, + "narHash": "sha256-/v85RkZ0Z+lxipkG2sjYNRINktc8VySbLQmPbirY0hQ=", + "path": "/nix/store/aa0a8kkfywkgg3hq9njg45rip2ndq5pf-source", + "rev": "87807e64a5ef5206b745a40af118c7be8db73681", "type": "path" }, "original": { @@ -78,6 +275,21 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1624561540, + "narHash": "sha256-izJ2PYZMGMsSkg+e7c9A1x3t/yOLT+qzUM6WQsc2tqo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c6a049a3d32293b24c0f894a840872cf67fd7c11", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixpkgs-unstable", + "type": "indirect" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1625697353, "narHash": "sha256-/v85RkZ0Z+lxipkG2sjYNRINktc8VySbLQmPbirY0hQ=", @@ -93,12 +305,12 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { - "lastModified": 1625281901, - "narHash": "sha256-DkZDtTIPzhXATqIps2ifNFpnI+PTcfMYdcrx/oFm00Q=", - "path": "/nix/store/wsfwxm10shvi4yr0ll8p4v1dp7l7wqfl-source", - "rev": "09c38c29f2c719cd76ca17a596c2fdac9e186ceb", + "lastModified": 1625697353, + "narHash": "sha256-/v85RkZ0Z+lxipkG2sjYNRINktc8VySbLQmPbirY0hQ=", + "path": "/nix/store/aa0a8kkfywkgg3hq9njg45rip2ndq5pf-source", + "rev": "87807e64a5ef5206b745a40af118c7be8db73681", "type": "path" }, "original": { @@ -106,10 +318,26 @@ "type": "indirect" } }, + "nose": { + "flake": false, + "locked": { + "lastModified": 1400604510, + "narHash": "sha256-daEi8Kta1oGaDEmUUDDQMahTTPOpvNpDKk22rlr7cB0=", + "owner": "emacsattic", + "repo": "nose", + "rev": "f8528297519eba911696c4e68fa88892de9a7b72", + "type": "github" + }, + "original": { + "owner": "emacsattic", + "repo": "nose", + "type": "github" + } + }, "nvd": { "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_3" + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1625773975, @@ -126,14 +354,112 @@ "url": "https://gitlab.com/dadada_/nvd.git" } }, + "ob-racket": { + "flake": false, + "locked": { + "lastModified": 1584656173, + "narHash": "sha256-rBUYDDCXb+3D4xTPQo9UocbTPZ32kWV1Uya/1DmZknU=", + "owner": "xchrishawk", + "repo": "ob-racket", + "rev": "83457ec9e1e96a29fd2086ed19432b9d75787673", + "type": "github" + }, + "original": { + "owner": "xchrishawk", + "repo": "ob-racket", + "type": "github" + } + }, + "org-mode": { + "flake": false, + "locked": { + "lastModified": 1624525995, + "narHash": "sha256-1eximAnDXKC+midwicoKko1cHF3ElCEOzzkUUWC8G4M=", + "owner": "emacs-straight", + "repo": "org-mode", + "rev": "5c07b279e0737b19e91c1d1b21016d9b4c8ffa62", + "type": "github" + }, + "original": { + "owner": "emacs-straight", + "repo": "org-mode", + "type": "github" + } + }, + "org-yt": { + "flake": false, + "locked": { + "lastModified": 1527381913, + "narHash": "sha256-dzQ6B7ryzatHCTLyEnRSbWO0VUiX/FHYnpHTs74aVUs=", + "owner": "TobiasZawada", + "repo": "org-yt", + "rev": "40cc1ac76d741055cbefa13860d9f070a7ade001", + "type": "github" + }, + "original": { + "owner": "TobiasZawada", + "repo": "org-yt", + "type": "github" + } + }, + "php-extras": { + "flake": false, + "locked": { + "lastModified": 1573312690, + "narHash": "sha256-r4WyVbzvT0ra4Z6JywNBOw5RxOEYd6Qe2IpebHXkj1U=", + "owner": "arnested", + "repo": "php-extras", + "rev": "d410c5af663c30c01d461ac476d1cbfbacb49367", + "type": "github" + }, + "original": { + "owner": "arnested", + "repo": "php-extras", + "type": "github" + } + }, + "revealjs": { + "flake": false, + "locked": { + "lastModified": 1623242337, + "narHash": "sha256-u3gZ13x40cjK1k9HTNnqRrp3io0tDTu6JPGd05mGJGw=", + "owner": "hakimel", + "repo": "reveal.js", + "rev": "ade234576e8ddd683cf16d0d8bb0236f37cf1a99", + "type": "github" + }, + "original": { + "owner": "hakimel", + "repo": "reveal.js", + "type": "github" + } + }, "root": { "inputs": { + "emacs-overlay": "emacs-overlay", "flake-utils": "flake-utils", "home-manager": "home-manager", + "nix-doom-emacs": "nix-doom-emacs", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "nvd": "nvd" } + }, + "rotate-text": { + "flake": false, + "locked": { + "lastModified": 1322962747, + "narHash": "sha256-SOeOgSlcEIsKhUiYDJv0p+mLUb420s9E2BmvZQvZ0wk=", + "owner": "debug-ito", + "repo": "rotate-text.el", + "rev": "48f193697db996855aee1ad2bc99b38c6646fe76", + "type": "github" + }, + "original": { + "owner": "debug-ito", + "repo": "rotate-text.el", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 8550cb7..da37caa 100644 --- a/flake.nix +++ b/flake.nix @@ -2,10 +2,15 @@ description = "dadada's nix flake"; inputs = { + emacs-overlay.url = github:nix-community/emacs-overlay; flake-utils.url = github:numtide/flake-utils; - nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; home-manager.url = github:nix-community/home-manager; + nix-doom-emacs = { + url = github:vlaci/nix-doom-emacs; + inputs.emacs-overlay.follows = "emacs-overlay"; + }; nixos-hardware.url = github:NixOS/nixos-hardware/master; + nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; nvd.url = git+https://gitlab.com/dadada_/nvd.git?ref=init-flake; }; diff --git a/home/configurations.nix b/home/configurations.nix index 0df592e..3c9fc8e 100644 --- a/home/configurations.nix +++ b/home/configurations.nix @@ -1,8 +1,9 @@ { self , nixpkgs , home-manager +, nix-doom-emacs , nvd -}: +}@inputs: let hmConfiguration = { homeDirectory ? "/home/dadada" diff --git a/home/home/default.nix b/home/home/default.nix index b46d9cf..7af7445 100644 --- a/home/home/default.nix +++ b/home/home/default.nix @@ -2,6 +2,7 @@ let useFeatures = [ "alacritty" + "emacs" "vim" "direnv" "git" diff --git a/home/modules/default.nix b/home/modules/default.nix index 674289f..c5fe056 100644 --- a/home/modules/default.nix +++ b/home/modules/default.nix @@ -1,8 +1,9 @@ -{ self, ... }@inputs: +{ self, nix-doom-emacs, ... }@inputs: { alacritty = import ./alacritty; colors = import ./colors.nix; direnv = import ./direnv.nix; + emacs = import ./emacs { inherit nix-doom-emacs; }; fish = import ./fish.nix; git = import ./git.nix; gpg = import ./gpg.nix; diff --git a/home/modules/emacs/default.nix b/home/modules/emacs/default.nix new file mode 100644 index 0000000..febcc9c --- /dev/null +++ b/home/modules/emacs/default.nix @@ -0,0 +1,22 @@ +{ nix-doom-emacs, ... }: +{ config, pkgs, lib, ... }: +with lib; +let + cfg = config.dadada.home.emacs; +in +{ + imports = [ nix-doom-emacs.hmModule ]; + options.dadada.home.emacs = { + enable = mkEnableOption "Enable dadada emacs config"; + }; + config = mkIf cfg.enable { + programs.doom-emacs = { + enable = true; + doomPrivateDir = ./doom.d; + }; + services.emacs = { + enable = true; + socketActivation.enable = true; + }; + }; +} diff --git a/home/modules/emacs/doom.d/config.el b/home/modules/emacs/doom.d/config.el new file mode 100644 index 0000000..bf82f00 --- /dev/null +++ b/home/modules/emacs/doom.d/config.el @@ -0,0 +1,4 @@ +(setq doom-font (font-spec :family "Source Code Pro" :size 12 :weight 'semi-light)) +(setq org-directory "~/src/notes/org/") +(with-eval-after-load 'treemacs + (define-key treemacs-mode-map [mouse-1] #'treemacs-single-click-expand-action)) diff --git a/home/modules/emacs/doom.d/init.el b/home/modules/emacs/doom.d/init.el new file mode 100644 index 0000000..cf543a7 --- /dev/null +++ b/home/modules/emacs/doom.d/init.el @@ -0,0 +1,188 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a "Module Index" link where you'll find +;; a comprehensive list of Doom's modules and what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ivy ; a search engine for love and life + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs + (emoji +unicode) ; 🙂 + ;;fill-column ; a `fill-column' indicator + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + hydra + ;;indent-guides ; highlighted indent columns + ;;ligatures ; ligatures and symbols to make your code pretty again + minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + vc-gutter ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + ;;(format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + ;;(spell +flyspell) ; tasing you for misspelling mispelling + ;;grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;debugger ; FIXME stepping through code, to help you add bugs + direnv + docker + editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + lookup ; navigate your code and its documentation + lsp + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + ;;rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + cc ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + (go +lsp) ; the hipster dialect + (haskell +dante) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + json ; At least it ain't XML + (java +meghanada) ; the poster child for carpal tunnel syndrome + javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + org ; organize your plain life in plain text + php ; perl's insecure younger brother + plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + yaml ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/home/modules/emacs/doom.d/packages.el b/home/modules/emacs/doom.d/packages.el new file mode 100644 index 0000000..e69de29 diff --git a/outputs.nix b/outputs.nix index 3eafa42..b982421 100644 --- a/outputs.nix +++ b/outputs.nix @@ -3,6 +3,7 @@ , flake-utils , nixpkgs , home-manager +, nix-doom-emacs , nixos-hardware , nvd , ... @@ -55,7 +56,7 @@ }; })) // { hmConfigurations = import ./home/configurations.nix { - inherit self nixpkgs home-manager nvd; + inherit self nixpkgs home-manager nix-doom-emacs nvd; }; hmModules = import ./home/modules inputs; nixosConfigurations = import ./nixos/configurations.nix {