diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index a16f201..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: main - -on: - push: - pull_request: - workflow_dispatch: -jobs: - packages: - name: test packages - runs-on: ubuntu-latest - strategy: - matrix: - pkg: - - anup - - discord - - proxychains - - st - - dmenu - steps: - - uses: actions/checkout@v2.3.4 - - uses: cachix/install-nix-action@v13 - with: - install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-2.4pre20210429_d15a196/install - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: - name: natto1784 - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - run: nix build -L .#${{ matrix.pkg }} diff --git a/flake.lock b/flake.lock index 3efd06d..be98b4a 100644 --- a/flake.lock +++ b/flake.lock @@ -34,6 +34,21 @@ "type": "gitlab" } }, + "emacs": { + "locked": { + "lastModified": 1631467754, + "narHash": "sha256-lZbeo1Y/jni/KW1W+DnaeCPgIu+W+ks8qp3xlRtUYFQ=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "e00f171142307b3c9bb962beeaaf09d0254f9e31", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "emacs-overlay", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -339,6 +354,7 @@ "root": { "inputs": { "agenix": "agenix", + "emacs": "emacs", "home-manager": "home-manager", "home-manager-unstable": "home-manager-unstable", "mailserver": "mailserver", diff --git a/flake.nix b/flake.nix index 4bdb2bd..579643b 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,7 @@ nvim.url = github:nix-community/neovim-nightly-overlay; mailserver.url = gitlab:simple-nixos-mailserver/nixos-mailserver; nbfc.url = github:natto1784/nbfc-linux/yawr; + emacs.url = github:nix-community/emacs-overlay; }; outputs = inputs@{self, nixpkgs, unstable, master, ... }: @@ -36,6 +37,7 @@ overlays = overlays ++ [ inputs.nur.overlay inputs.nvim.overlay + inputs.emacs.overlay channels (_:_:{nbfc-linux=inputs.nbfc.defaultPackage.${system};}) ]; @@ -49,6 +51,7 @@ ./modules/nvidia-offload.nix ./modules/pipewire.nix ./modules/xorg.nix + ./modules/emacs ]; commonModules = [ ./modules/nvim diff --git a/home/config/emacs/init.el b/home/config/emacs/init.el deleted file mode 100644 index 8ccaaff..0000000 --- a/home/config/emacs/init.el +++ /dev/null @@ -1,45 +0,0 @@ -;;settings -(setq display-line-numbers-type 'relative) -(setq inhibit-startup-screen t) -(set-face-attribute 'default nil :font "Fira Mono for Powerline" :height 120) - - - -;;add packages and shit -(require 'package) -(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) -(package-initialize) -(setq pkgs '(ivy gruvbox-theme elcord rainbow-delimiters)) -(while pkgs - (require (car pkgs)) - (setq pkgs (cdr pkgs))) - - -;;package config and modes -(global-hl-line-mode 1) -(scroll-bar-mode 0) -(tool-bar-mode 0) -(menu-bar-mode 0) -(fringe-mode 0) -(global-display-line-numbers-mode 1) -(load-theme 'gruvbox-dark-hard t) -(ivy-mode 1) -(elcord-mode 1) - - -;;keybinds -;ivy -(define-key ivy-minibuffer-map (kbd "C-n") 'ivy-next-line) -(define-key ivy-minibuffer-map (kbd "C-e") 'ivy-previous-line) -(define-key ivy-minibuffer-map (kbd "C-i") 'ivy-done) - - -;;hooks -;exclude line numbers -(setq exclude-ln '(term-mode-hook eshell-mode-hook shell-mode-hook)) -(while exclude-ln - (add-hook (car exclude-ln) (lambda () (display-line-numbers-mode 0))) - (setq exclude-ln (cdr exclude-ln))) - -;rainbow delims -(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) diff --git a/home/config/emacs/init.el b/home/config/emacs/init.el new file mode 120000 index 0000000..751ce37 --- /dev/null +++ b/home/config/emacs/init.el @@ -0,0 +1 @@ +../../../modules/emacs/init.el \ No newline at end of file diff --git a/home/stuff/programs/emacs.nix b/home/stuff/programs/emacs.nix index 6795a6f..c5072f1 100644 --- a/home/stuff/programs/emacs.nix +++ b/home/stuff/programs/emacs.nix @@ -1,18 +1,60 @@ { pkgs, config, ... }: { - #i dont really use emacs but eh programs.emacs = { - enable = true; + enable = false; extraPackages = epkgs: with epkgs; [ elcord gruvbox-theme ivy rainbow-delimiters + evil + evil-colemak-basics + treemacs + treemacs-evil + lsp-mode + lsp-treemacs + lsp-ui + tree-sitter + tree-sitter-langs + tsc ]; - overrides = self: super: { - gruvbox-theme = self.melpaPackages.gruvbox-theme.overrideAttrs(_: { - patches = [ ../../config/emacs/gruvbox-el.patch ]; - }); + overrides = self: super : { + tsc = super.tsc.overrideAttrs(oa: + let + tsc-dyn = version: pkgs.fetchurl { + url = "https://github.com/emacs-tree-sitter/elisp-tree-sitter/releases/download/${version}/tsc-dyn.so"; + sha256 = "sha256-oOq/TAooHRUo7JypCblrB/ztABowAHv2LRhFL/ZmVrg="; + }; + in { postInstall = oa.postInstall or "" + "cp ${tsc-dyn "0.15.2"} $out/share/emacs/site-lisp/elpa/tsc-${super.tsc.version}/tsc-dyn.so" ;}); + tree-sitter-langs = pkgs.symlinkJoin rec { + name = "tree-sitter-langs"; + paths = + let + tree-sitter-grammars = pkgs.stdenv.mkDerivation rec { + name = "tree-sitter-grammars"; + version = "0.10.4"; + src = pkgs.fetchzip { + url = "https://github.com/emacs-tree-sitter/tree-sitter-langs/releases/download/${version}/tree-sitter-grammars-linux-${version}.tar.gz"; + sha256 = "sha256-Z+JtuGLTCVhCJBR60cbcDgWtdKcoYGWoeI5u9GcfvUQ="; + stripRoot = false; + }; + installPhase = '' + install -d $out/langs/bin + install -m444 * $out/langs/bin + echo -n $version > $out/langs/bin/BUNDLE-VERSION + ''; + }; + in + [ + (super.tree-sitter-langs.overrideAttrs (oldAttrs: { + postPatch = oldAttrs.postPatch or "" + '' + substituteInPlace ./tree-sitter-langs-build.el \ + --replace "tree-sitter-langs-grammar-dir tree-sitter-langs--dir" "tree-sitter-langs-grammar-dir \"${tree-sitter-grammars}/langs\"" + ''; + })) + tree-sitter-grammars + ]; + }; }; }; home.file.emacs = { diff --git a/hosts/satori/stuff.nix b/hosts/satori/stuff.nix index aeec6af..dcc3579 100644 --- a/hosts/satori/stuff.nix +++ b/hosts/satori/stuff.nix @@ -28,6 +28,7 @@ lohit-fonts.gurmukhi nerdfonts font-awesome + monoid ]; users.users.natto = { isNormalUser = true; diff --git a/modules/emacs/default.nix b/modules/emacs/default.nix new file mode 100644 index 0000000..b6b609f --- /dev/null +++ b/modules/emacs/default.nix @@ -0,0 +1,62 @@ +{ pkgs, config, ... }: +{ + environment.systemPackages = with pkgs; [ + (emacsWithPackagesFromUsePackage { + config = ./init.el; + alwaysEnsure = true; + extraEmacsPackages = epkgs: with epkgs; [ + use-package + tsc + ]; + override = epkgs : epkgs // { + tsc = epkgs.melpaPackages.tsc.overrideAttrs(oa: + let + version = "0.15.1"; + tsc-dyn = fetchurl { + url = "https://github.com/emacs-tree-sitter/elisp-tree-sitter/releases/download/${version}/tsc-dyn.so"; + sha256 = "sha256-TrwyQZEfARHfafT4IhxR+p7vpjSuw9lUcgOSwCvPxe4="; + }; + version-file = writeText "DYN-VERSION" version; + in { +/* src = fetchFromGitHub { + owner = "emacs-tree-sitter"; + repo = "elisp-tree-sitter"; + rev = version; + sha256 = "sha256-dGWg4dj+85kxytvm+nNEJUN9UXdr9L6pSRz5OqDMFAM="; + };*/ + postInstall = '' + cp ${tsc-dyn} $out/share/emacs/site-lisp/elpa/tsc-${oa.version}/tsc-dyn.so + cp ${version-file} $out/share/emacs/site-lisp/elpa/tsc-${oa.version}/DYN-VERSION + ''; + }); + tree-sitter-langs = epkgs.melpaPackages.tree-sitter-langs.overrideAttrs (oa: + let + tree-sitter-grammars = super.stdenv.mkDerivation rec { + name = "tree-sitter-grammars"; + version = "0.10.4"; + src = fetchzip { + url = "https://github.com/emacs-tree-sitter/tree-sitter-langs/releases/download/${version}/tree-sitter-grammars-linux-${version}.tar.gz"; + sha256 = "sha256-Z+JtuGLTCVhCJBR60cbcDgWtdKcoYGWoeI5u9GcfvUQ="; + stripRoot = false; + }; + installPhase = '' + install -d $out/langs/bin + install -m444 * $out/langs/bin + echo -n $version > $out/langs/bin/BUNDLE-VERSION + ''; + }; + in { + postPatch = oa.postPatch or "" + '' + substituteInPlace ./tree-sitter-langs-build.el \ + --replace "tree-sitter-langs-grammar-dir tree-sitter-langs--dir" "tree-sitter-langs-grammar-dir \"${tree-sitter-grammars}/langs\"" + ''; +# postInstall = oa.postInstall or "" + '' + # mkdir $out/share/emacs/site-lisp/elpa/tree-sitter-langs-${oa.version}/bin + # cp ${binaries}/* $out/share/emacs/site-lisp/elpa/tree-sitter-langs-${oa.version}/bin/ + # ''; + }); + gruvbox-theme = epkgs.melpaPackages.gruvbox-theme.overrideAttrs(_: { patches = [ ./gruvbox-el.patch ]; } ); + }; + }) + ]; +} diff --git a/home/config/emacs/gruvbox-el.patch b/modules/emacs/gruvbox-el.patch similarity index 100% rename from home/config/emacs/gruvbox-el.patch rename to modules/emacs/gruvbox-el.patch diff --git a/modules/emacs/init.el b/modules/emacs/init.el new file mode 100644 index 0000000..8edd2aa --- /dev/null +++ b/modules/emacs/init.el @@ -0,0 +1,101 @@ +;;settings +(setq display-line-numbers-type 'relative) +(setq inhibit-startup-screen t) +(set-face-attribute 'default nil :font "Monoid" :height 120) +(global-hl-line-mode 1) +(scroll-bar-mode 0) +(tool-bar-mode 0) +(menu-bar-mode 0) +(fringe-mode 0) +(global-display-line-numbers-mode 1) +(setq initial-major-mode 'emacs-lisp-mode) + +;;add packages and shit +(require 'package) +(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) +(package-initialize) +(require 'use-package) + + +;;package config and modes +(use-package gruvbox-theme + :init + (load-theme 'gruvbox-dark-hard t)) + +(use-package ivy + :config + (ivy-mode 1)) + +(use-package elcord + :config + (elcord-mode 1)) + +(use-package evil + :config + (evil-mode 1)) + +(use-package evil-colemak-basics + :init + (setq evil-colemak-basics-layout-mod 'mod-dh) + :config + (global-evil-colemak-basics-mode 1)) + +(use-package treemacs + :config + (treemacs-filewatch-mode 1) + (treemacs-git-mode 'deferred)) + +(use-package treemacs-evil + :bind (:map evil-treemacs-state-map + ("n" . treemacs-next-line) + ("e" . treemacs-previous-line) + ("M-n" . treemacs-next-neighbour) + ("M-e" . treemacs-previous-neighbour) + ("M-N" . treemacs-next-line-other-window) + ("M-E" . treemacs-previous-line-other-window) + ("M" . treemacs-collapse-parent-node)) + :init + +(use-package lsp-mode + :config + (lsp-mode 1)) + +(use-package lsp-treemacs + :config + (lsp-treemacs-sync-mode)) + +(use-package lsp-ui + :config + (lsp-ui-peek-enable 1) + (lsp-ui-doc-enable 1)) + +(use-package tree-sitter-langs) + +(use-package tree-sitter + :config + (global-tree-sitter-mode) + :init + (add-to-list 'tree-sitter-major-mode-language-alist '(fundamental-mode . bash)) + (add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)) + +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) + +;(use-package rustic) + +;;keybinds +;ivy +(define-key ivy-minibuffer-map (kbd "C-n") 'ivy-next-line) +(define-key ivy-minibuffer-map (kbd "C-e") 'ivy-previous-line) +(define-key ivy-minibuffer-map (kbd "C-i") 'ivy-done) + +;evil-treemacs +(evil-define-key 'treemacs treemacs-mode-map (kbd "m") #'treemacs-COLLAPSE-action) +(evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action)) + +;;hooks +;exclude line numbers +(setq exclude-ln '(term-mode-hook eshell-mode-hook shell-mode-hook)) +(while exclude-ln + (add-hook (car exclude-ln) (lambda () (display-line-numbers-mode 0))) + (setq exclude-ln (cdr exclude-ln))) diff --git a/modules/nvim/default.nix b/modules/nvim/default.nix index 4b3b68d..2fcda6f 100644 --- a/modules/nvim/default.nix +++ b/modules/nvim/default.nix @@ -29,7 +29,7 @@ nvim-tree-lua vim-vsnip nvim-treesitter - vim-polyglot + vim-nix (gruvbox.overrideAttrs (oa: { patches = [ ./gruvbox.patch ]; })) ]; }; diff --git a/modules/nvim/init.lua b/modules/nvim/init.lua index 7a1fc5d..0d2afc4 100644 --- a/modules/nvim/init.lua +++ b/modules/nvim/init.lua @@ -60,10 +60,12 @@ cdhbind('m', 'h') cdhbind('n', 'j') cdhbind('e', 'k') cdhbind('i', 'l') -cdhbind('h', 'i') -cdhbind('j', 'm') +cdhbind('u', 'i') +cdhbind('l', 'u') cdhbind('k', 'n') -cdhbind('l', 'e') +cdhbind('f', 'e') +cdhbind('t', 'f') +cdhbind('j', 't') bind('n', "", ":w", {noremap=true}) bind('n', "", ":resize -2", {noremap=true, silent=true}) bind('n', "", ":resize +2", {noremap=true, silent=true})