diff options
28 files changed, 726 insertions, 137 deletions
diff --git a/.config/ghostty/config b/.config/ghostty/config new file mode 100644 index 0000000..6701b96 --- /dev/null +++ b/.config/ghostty/config @@ -0,0 +1,25 @@ +font-family = "Aporetic Sans Mono" +font-style-bold = "Bold" +font-style-italic = "Italic" +font-style-bold-italic = "Bold Italic" + +font-size = 15 + +theme = "rose-pine" + +cursor-style = bar +cursor-style-blink = true + +command = "zsh" + +window-padding-x = 4 +window-padding-y = 4 +window-padding-balance = true +window-padding-color = extend + +title-report = true + +quit-after-last-window-closed = true +macos-titlebar-style = transparent +macos-titlebar-proxy-icon = hidden +macos-option-as-alt = true diff --git a/.config/mc/ini b/.config/mc/ini index 115ff36..b3a7bb1 100644 --- a/.config/mc/ini +++ b/.config/mc/ini @@ -90,7 +90,7 @@ fish_directory_timeout=900 [Layout] output_lines=0 -left_panel_size=40 +left_panel_size=160 top_panel_size=0 message_visible=true keybar_visible=false @@ -121,6 +121,7 @@ xterm-kitty= color_terminals= xterm-256color= +linux= [Panels] simple_swap=false @@ -161,6 +162,6 @@ ignore_dirs= [Panelize] Find *.orig after patching=find . -name \\*.orig -print -Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print Find rejects after patching=find . -name \\*.rej -print Modified git files=git ls-files --modified +Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print diff --git a/.config/nvim/.gitignore b/.config/nvim/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/.config/nvim/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json new file mode 100644 index 0000000..ceb1818 --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,12 @@ +{ + "runtime.version": "LuaJIT", + "runtime.path": [ + "lua/?.lua", + "lua/?/init.lua" + ], + "diagnostics.globals": ["vim"], + "workspace.checkThirdParty": false, + "workspace.library": [ + "$VIMRUNTIME" + ] +} diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..6eda1ce --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,7 @@ +-- Setup Config +require("config.colemak") +require("config.options") +require("config.keymaps") + +-- Setup Lazy Plugin Manager +require("manager") diff --git a/.config/nvim/lua/config/colemak.lua b/.config/nvim/lua/config/colemak.lua new file mode 100644 index 0000000..36b1e67 --- /dev/null +++ b/.config/nvim/lua/config/colemak.lua @@ -0,0 +1,29 @@ +local function map(mode, lhs, rhs, opts) + local options = { noremap = true, silent = true } + if opts then + options = vim.tbl_extend("force", options, opts) + end + vim.keymap.set(mode, lhs, rhs, options) +end + +map("", "n", "j") +map("", "e", "k") +map("", "i", "l") +map("", "j", "n") +map("", "k", "e") +map("", "l", "i") +map("", "K", "E") +map("", "N", "J") +map("", "E", "K") -- As in 'Explore' documentation +map("", "L", "I") +map("", "I", "L") +map("", "J", "N") + +map("n", "<c-w>h", "<c-w>h") +map("n", "<c-w>n", "<c-w>j") +map("n", "<c-w>e", "<c-w>k") +map("n", "<C-w>i", "<c-w>l") + +-- Kakoune Holdover +map ("", "gh", "0") +map ("", "gi", "$") diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..80cd704 --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,42 @@ +vim.g.mapleader = " " +vim.keymap.set("n", "<leader>bk", vim.cmd.bdelete, + { desc = "Kill Buffer" }) +vim.keymap.set("n", "<leader>bn", vim.cmd.bnext, + { desc = "Next Buffer" }) +vim.keymap.set("n", "<leader>bp", vim.cmd.bprev, + { desc = "Previous Buffer" }) + +vim.keymap.set("n", "E", vim.lsp.buf.hover) +vim.keymap.set("n", "<C-e>", vim.diagnostic.open_float) +vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) +vim.keymap.set("n", "<leader>lt", vim.lsp.buf.type_definition) +vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) +vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action) +vim.keymap.set("n", "<leader>lf", vim.lsp.buf.format) +vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename) +vim.keymap.set("n", "<leader>le", function() + vim.diagnostic.jump({ count = 1, float = true }) +end) + +vim.keymap.set("n", "<leader>wh", vim.cmd.split, + { desc = "Split Window Horizontally" }) +vim.keymap.set("n", "<leader>wv", vim.cmd.vsplit, + { desc = "Split Window Vertically" }) +vim.keymap.set("n", "<leader>wc", "<C-w>q", + { desc = "Close Window" }) +vim.keymap.set("n", "<leader>ww", "<C-w>w", + { desc = "Next Window" }) + +vim.keymap.set("n", "<leader>fc", function() + vim.cmd('edit ~/.config/nvim/init.lua') +end) +vim.keymap.set("n", "<leader>ft", function() + vim.cmd('edit ~/Documents/TODO.org') +end) +vim.keymap.set("n", "<leader>fn", function() + vim.cmd('edit ~/Documents/Notes.org') +end) + +vim.keymap.set('n', '<Tab>', '==', { noremap = true, silent = true }) + +vim.keymap.set('n', 'q:', ':q<CR>', { noremap = true }) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..c1621fa --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,59 @@ +vim.opt.nu = true +vim.opt.rnu = true + +vim.opt.tabstop = 2 +vim.opt.softtabstop = 2 +vim.opt.shiftwidth = 2 +vim.opt.expandtab = true +vim.opt.autoindent = true + +vim.opt.smartindent = true + +vim.opt.wrap = false + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv("HOME") .. "/.nvim/undodir" +vim.opt.undofile = true + +vim.opt.hlsearch = false +vim.opt.incsearch = true + +vim.opt.termguicolors = true + +vim.opt.scrolloff = 12 + +vim.opt.updatetime = 50 + +vim.opt.splitbelow = true +vim.opt.splitright = true + +vim.opt.encoding = "utf-8" + +vim.opt.shell = "zsh" + +vim.opt.mouse = "" + +vim.opt.ignorecase = true +vim.opt.smartcase = true +vim.opt.incsearch = true + +vim.opt.cursorline = true + +vim.opt.title = true + +vim.opt.clipboard = "unnamedplus" + +vim.opt.colorcolumn = "80" + +vim.opt.signcolumn = 'no' + +vim.cmd "set showtabline=0 | set laststatus=0" + +vim.wo.fillchars='eob: ' + +-- Remove Whitespaces on File Save +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { "*" }, + command = [[%s/\s\+$//e]], +}) diff --git a/.config/nvim/lua/config/vim.lua b/.config/nvim/lua/config/vim.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/nvim/lua/config/vim.lua diff --git a/.config/nvim/lua/manager.lua b/.config/nvim/lua/manager.lua new file mode 100644 index 0000000..f533341 --- /dev/null +++ b/.config/nvim/lua/manager.lua @@ -0,0 +1,26 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +require("lazy").setup({ + spec = { + { import = "plugins" }, + }, + install = { colorscheme = { "habamax" } }, + checker = { enabled = true }, +}) diff --git a/.config/nvim/lua/plugins/autopairs.lua b/.config/nvim/lua/plugins/autopairs.lua new file mode 100644 index 0000000..c37e301 --- /dev/null +++ b/.config/nvim/lua/plugins/autopairs.lua @@ -0,0 +1,8 @@ +return { + "windwp/nvim-autopairs", + config = function() + require("nvim-autopairs").setup({ + disable_filetype = { "TelescopePrompt" , "vim" } + }) + end, +} diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..e61b901 --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,51 @@ +return { + 'hrsh7th/nvim-cmp', + dependencies = { + 'neovim/nvim-lspconfig', + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'lukas-reineke/cmp-rg', + 'onsails/lspkind.nvim' + }, + config = function() + local cmp = require('cmp') + local lspkind = require('lspkind') + cmp.setup({ + snippet = { + expand = function(arg) + vim.snippet.expand(arg.body) + end + }, + mapping = cmp.mapping.preset.insert({ + -- ['<CR>'] = cmp.mapping.confirm({ select = true }), + ['<CR>'] = cmp.mapping.confirm(), + ['<Tab>'] = cmp.mapping.select_next_item(), + ['<S-Tab>'] = cmp.mapping.select_prev_item(), + }), + sources = cmp.config.sources( + { + { name = 'nvim_lsp' }, + }, + { + { name = 'path' }, + }, + { + { name = 'buffer' }, + { name = 'rg', keyword_length = 3 } + } + ), + formatting = { + format = lspkind.cmp_format({ + mode = 'symbol' + }) + }, + view = { + entries = 'native' + } + }) + + local capabilities = require('cmp_nvim_lsp').default_capabilities() + require("lspconfig").lua_ls.setup({capabilities = capabilities}) + end +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..d18e65c --- /dev/null +++ b/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,14 @@ +return { + require('plugins.rose-pine'), + require('plugins.autopairs'), + require('plugins.treesitter'), + require('plugins.rainbow-delimiters'), + require('plugins.telescope'), + require('plugins.lualine'), + require('plugins.statuscol'), + require('plugins.oil'), + require('plugins.cmp'), + require('plugins.lastplace'), + require('plugins.orgmode'), + require('plugins.love') +} diff --git a/.config/nvim/lua/plugins/lastplace.lua b/.config/nvim/lua/plugins/lastplace.lua new file mode 100644 index 0000000..6c9f074 --- /dev/null +++ b/.config/nvim/lua/plugins/lastplace.lua @@ -0,0 +1,6 @@ +return { + 'ethanholz/nvim-lastplace', + config = function() + require'nvim-lastplace'.setup({}) + end +} diff --git a/.config/nvim/lua/plugins/love.lua b/.config/nvim/lua/plugins/love.lua new file mode 100644 index 0000000..2e0ac4f --- /dev/null +++ b/.config/nvim/lua/plugins/love.lua @@ -0,0 +1,10 @@ +return { + "S1M0N38/love2d.nvim", + event = "VeryLazy", + opts = { }, + keys = { + { "<leader>v", ft = "lua", desc = "LÖVE" }, + { "<leader>vv", "<cmd>LoveRun<cr>", ft = "lua", desc = "Run LÖVE" }, + { "<leader>vs", "<cmd>LoveStop<cr>", ft = "lua", desc = "Stop LÖVE" }, + }, +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..cd3d6f1 --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,26 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = { 'nvim-tree/nvim-web-devicons' }, + config = function() + require("lualine").setup({ + options = { + icons_enabled = true, + component_separators = { left = '|', right = '|'}, + section_separators = { left = '', right = ''}, + }, + sections = { + lualine_a = {"mode", { + "filetype", + icon_only = true, + separator = "", + padding = { right = 0, left = 1 }, + }, "filename" }, + lualine_b = {}, + lualine_c = {}, + lualine_x = {"diagnostics"}, + lualine_y = {}, + lualine_z = {} + } + }) + end, +} diff --git a/.config/nvim/lua/plugins/oil.lua b/.config/nvim/lua/plugins/oil.lua new file mode 100644 index 0000000..3eb396d --- /dev/null +++ b/.config/nvim/lua/plugins/oil.lua @@ -0,0 +1,28 @@ +return { + 'stevearc/oil.nvim', + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + + function _G.get_oil_winbar() + local bufnr = vim.api.nvim_win_get_buf(vim.g.statusline_winid) + local dir = require("oil").get_current_dir(bufnr) + if dir then + return vim.fn.fnamemodify(dir, ":~") + else + -- If there is no current directory (e.g. over ssh), just show the buffer name + return vim.api.nvim_buf_get_name(0) + end + end + + require('oil').setup({ + win_options = { + winbar = "%!v:lua.get_oil_winbar()", + }, + view_options = { + show_hidden = true + } + }) + vim.keymap.set('n', '-', '<CMD>Oil<CR>', {desc = "Open Dir in Oil"}) + end, + lazy = false, +} diff --git a/.config/nvim/lua/plugins/orgmode.lua b/.config/nvim/lua/plugins/orgmode.lua new file mode 100644 index 0000000..ff383ff --- /dev/null +++ b/.config/nvim/lua/plugins/orgmode.lua @@ -0,0 +1,19 @@ +return { + 'nvim-orgmode/orgmode', + event = 'VeryLazy', + ft = { 'org' }, + config = function() + -- Setup orgmode + require('orgmode').setup({ + org_agenda_files = '~/orgfiles/**/*', + org_default_notes_file = '~/orgfiles/refile.org', + }) + + -- NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option + -- add ~org~ to ignore_install + -- require('nvim-treesitter.configs').setup({ + -- ensure_installed = 'all', + -- ignore_install = { 'org' }, + -- }) + end, +} diff --git a/.config/nvim/lua/plugins/rainbow-delimiters.lua b/.config/nvim/lua/plugins/rainbow-delimiters.lua new file mode 100644 index 0000000..9fe4a06 --- /dev/null +++ b/.config/nvim/lua/plugins/rainbow-delimiters.lua @@ -0,0 +1,6 @@ +return { + "hiphish/rainbow-delimiters.nvim", + config = function() + require('rainbow-delimiters.setup').setup({}) + end, +} diff --git a/.config/nvim/lua/plugins/rose-pine.lua b/.config/nvim/lua/plugins/rose-pine.lua new file mode 100644 index 0000000..be59e5e --- /dev/null +++ b/.config/nvim/lua/plugins/rose-pine.lua @@ -0,0 +1,9 @@ +return { + "rose-pine/neovim", + as = "rose-pine", + config = function() + vim.opt.termguicolors = true + -- vim.cmd.colorscheme("rose-pine") + vim.cmd.colorscheme("rose-pine") + end, +} diff --git a/.config/nvim/lua/plugins/statuscol.lua b/.config/nvim/lua/plugins/statuscol.lua new file mode 100644 index 0000000..15ccef9 --- /dev/null +++ b/.config/nvim/lua/plugins/statuscol.lua @@ -0,0 +1,6 @@ +return { + "luukvbaal/statuscol.nvim", + config = function() + require("statuscol").setup({relculright = true}) + end, +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..0e0d3f4 --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,26 @@ +return { + "nvim-telescope/telescope.nvim", + dependencies = {"nvim-lua/plenary.nvim"}, + config = function() + require("telescope").setup({}) + + local tscope = require('telescope.builtin') + vim.keymap.set('n', '<leader>ff', tscope.find_files, + { desc = "Find File" }) + vim.keymap.set('n', '<leader>bb', tscope.buffers, + { desc = "Find Buffer" }) + vim.keymap.set('n', '<leader>fh', tscope.help_tags, + { desc = "Find Help" }) + -- vim.keymap.set('n', '<leader>fg', function() + -- tscope.grep_string( + -- { search = vim.fn.input("Grep > "), + -- desc = "Find by Grep" }); + -- end) + vim.keymap.set('n', '<leader>fg', tscope.live_grep, + { desc = "Find by Grep" }) + vim.keymap.set('n', '<leader>fr', tscope.oldfiles, + { desc = "Find Recent Files" }) + vim.keymap.set('n', '<leader>lw', tscope.diagnostics, + { desc = "Search Diagnostics" }) + end, +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..626c329 --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,11 @@ +return { + "nvim-treesitter/nvim-treesitter", + config = function() + require("nvim-treesitter.configs").setup({ + ensure_installed = {"c", "vimdoc", "markdown", "jsonc", "lua"}, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true }, + }) + end, +} diff --git a/.config/shell/alias b/.config/shell/alias index c060c0e..aea0c70 100644 --- a/.config/shell/alias +++ b/.config/shell/alias @@ -1,3 +1,6 @@ alias gvc="ssh git@git.venomade.com" alias rgf='rg --files | rg' -alias ls='ls --color=auto' \ No newline at end of file +alias ls='ls --color=auto' +alias md='mkdir' +alias ec='emacsclient -nw' +alias cat='bat' diff --git a/.emacs.d/config.org b/.emacs.d/config.org index 5b7f51e..36876fa 100644 --- a/.emacs.d/config.org +++ b/.emacs.d/config.org @@ -29,40 +29,43 @@ - [[#programming][Programming]] - [[#projects][Projects]] - [[#lsp][LSP]] + - [[#sidebar][Sidebar]] - [[#treesitter][TreeSitter]] - [[#languages][Languages]] - [[#company][Company]] - [[#cape][Cape]] + - [[#codeium][Codeium]] - [[#utilities][Utilities]] - [[#user-interface][User Interface]] - [[#add-nerd-icons][Add Nerd Icons]] - [[#fonts][Fonts]] - [[#theme][Theme]] - [[#niceties][Niceties]] - - [[#modern-looking-emacs][Modern Looking Emacs]] + - [[#zen-mode][Zen Mode]] * Straight Package Manager I'm using the Straight package manager instead of use-package because it is only available in Emacs 29 and above. #+begin_src emacs-lisp (defvar bootstrap-version) (let ((bootstrap-file - (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) - (bootstrap-version 6)) + (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) + (bootstrap-version 6)) (unless (file-exists-p bootstrap-file) (with-current-buffer - (url-retrieve-synchronously - "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" - 'silent 'inhibit-cookies) - (goto-char (point-max)) - (eval-print-last-sexp))) + (url-retrieve-synchronously + "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" + 'silent 'inhibit-cookies) + (goto-char (point-max)) + (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) (setq straight-use-package-by-default t) + (setq package-native-compile t) #+end_src * Configs ** Custom Functions -*** Cursor follow on split +*** Cursor follow on split This is so that action can be taken as soon as a split takes place, to either close/move the window or perform an action inside of it. #+begin_src emacs-lisp (defun split-and-follow-horizontally() @@ -159,6 +162,11 @@ Quickly grep both my current project and the system include directory. #+end_src ** Fix Annoyances +*** Add Scroll Marginn +This adds a scroll margin at the top and bottom of 10 lines to make it easier to scroll through the buffer. +#+begin_src emacs-lisp + (setq scroll-margin 10) +#+end_src *** Disable Backups Living on the edge. #+begin_src emacs-lisp @@ -179,16 +187,40 @@ Fixing warnings is for nerds. This is basically necessary after more than 5 pack #+begin_src emacs-lisp (setq warning-minimum-level :emergency) #+end_src -*** Add Scroll Marginn -This adds a scroll margin at the top and bottom of 10 lines to make it easier to scroll through the buffer. +*** Local Bin +Add the local bin directory to PATH. #+begin_src emacs-lisp - (setq scroll-margin 10) + (setenv "PATH" (concat (concat + (concat (expand-file-name "~/.local/bin") ":") + (getenv "PATH")))) + + (setq exec-path (append exec-path (list (expand-file-name "~/.local/bin")))) #+end_src *** Save Place Go back to old position on file open. #+begin_src emacs-lisp (save-place-mode 1) #+end_src +*** COMMENT System Clipboard +Use system clipboard in terminal-mode. (Currently commented out due to using graphical-mode) +#+begin_src emacs-lisp + ;; credit: yorickvP on Github + (setq wl-copy-process nil) + (defun wl-copy (text) + (setq wl-copy-process (make-process :name "wl-copy" + :buffer nil + :command '("wl-copy" "-f" "-n") + :connection-type 'pipe + :noquery t)) + (process-send-string wl-copy-process text) + (process-send-eof wl-copy-process)) + (defun wl-paste () + (if (and wl-copy-process (process-live-p wl-copy-process)) + nil ; should return nil if we're the current paste owner + (shell-command-to-string "wl-paste -n | tr -d \r"))) + (setq interprogram-cut-function 'wl-copy) + (setq interprogram-paste-function 'wl-paste) +#+end_src ** Keybindings *** Reload Emacs @@ -226,7 +258,7 @@ Add shortcuts to various Emacs functions. (keymap-global-set "C-c e b" 'eval-buffer) (keymap-global-set "C-c e r" 'eval-region) (keymap-global-set "C-c e s" 'eshell) - (keymap-global-set "C-c e t" 'ef-themes-load-random) + (keymap-global-set "C-c e t" 'theme-toggle) #+end_src *** Regex and Copy from Above Add shortcuts to entering a regex replace and copying a line from above. @@ -234,6 +266,11 @@ Add shortcuts to entering a regex replace and copying a line from above. (keymap-global-set "C-c r" 'replace-regexp) (keymap-global-set "C-c y a" 'copy-from-above-command) #+end_src +*** Reverse C-x o +Add a reversed C-x o to go to previous window. +#+begin_src emacs-lisp + (keymap-global-set "C-x O" 'previous-multiframe-window) +#+end_src *** Window Management Add shortcuts to scrolling and moving between windows. #+begin_src emacs-lisp @@ -245,6 +282,10 @@ Add shortcuts to scrolling and moving between windows. (keymap-global-set "C-c w p" (lambda () (interactive) (other-window -1))) (keymap-global-set "C-c w b" (lambda () (interactive) (other-window -1))) #+end_src +*** MacOS Bindings +#+begin_src emacs-lisp + (setq mac-option-key-is-meta t) +#+end_src ** Setup Line Numbers *** Always show line numbers @@ -408,7 +449,10 @@ Tools for the primary version control system. *** Magit A very extensive Git GUI for Emacs. #+begin_src emacs-lisp - (use-package magit) + (use-package magit + :after nerd-icons + :custom + (magit-format-file-function #'magit-format-file-nerd-icons)) #+end_src *** Magit Todos Show Todo list in Magit. @@ -459,11 +503,6 @@ Adds fuzzy completion to basic Emacs commands. (setq enable-recursive-minibuffers t) :config (ivy-mode 1)) - - ;; (use-package ivy-prescient - ;; :after counsel - ;; :config - ;; (ivy-prescient-mode 1)) #+end_src *** Ivy Rich Adds Icons to all the new fuzzy completed Emacs commands. @@ -518,17 +557,17 @@ Automatically generate a table of contents for an Org file. (add-hook 'org-mode-hook 'org-indent-mode) #+end_src -** Bullet Headers +** Bullet Headers Stylize Org Mode headers with Nerd Icons. #+begin_src emacs-lisp (use-package org-bullets :config (setq org-bullets-bullet-list '( - "" - "" - "" - "" - ""))) + "•" + "•" + "◦" + "◦" + "◦"))) (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))) #+end_src @@ -673,21 +712,42 @@ Use language servers to provide info and completion. :init (setq lsp-completion-provider :none lsp-keymap-prefix "C-c l" - lsp-headerline-breadcrumb-enable nil) + lsp-headerline-breadcrumb-enable nil + lsp-modeline-code-actions-enable nil) :commands lsp lsp-deferred :config (lsp-enable-snippet t)) - ;; (lsp-enable-which-key-integration t)) - - ;; (use-package lsp-ui - ;; :commands lsp-ui-mode - ;; :hook (prog-mode . lsp-ui-mode) - ;; :config - ;; (keymap-global-set "C-c l d" 'lsp-ui-doc-show)) - ;; Instead: (keymap-global-set "C-c l d" 'lsp-describe-thing-at-point) #+end_src + +*** LSP Mode - Undo Tree compatibility +#+begin_src emacs-lisp + (with-eval-after-load 'lsp-mode + (defun my/lsp--should-ignore-file (filename) + (or (string-match-p "\\.emacs[-_.]backups?/" filename) + (string-match-p "\\.emacs[-_.]undo/" filename) + (string-match-p "/\\.emacs\\.d/undo/" filename) + (string-match-p "/\\.emacs\\.d/backups/" filename) + (string-match-p "/#.*#$" filename) + (string-match-p "/.*~$" filename) + (string-match-p "/.*\\.~undo-tree~$" filename))) + + (advice-add 'lsp--on-did-open :before + (lambda (&rest args) + (let ((file (lsp--uri-to-path (gethash "uri" (cl-first args))))) + (when (my/lsp--should-ignore-file file) + (cl-return-from lsp--on-did-open)))) + '((name . ignore-emacs-backup-open))) + + (advice-add 'lsp--on-did-save :before + (lambda (&rest args) + (let ((file (lsp--uri-to-path (gethash "uri" (cl-first args))))) + (when (my/lsp--should-ignore-file file) + (cl-return-from lsp--on-did-save)))) + '((name . ignore-emacs-backup-save)))) +#+end_src + *** YASnippet Autocomplete Snippets to write common code patterns faster. #+begin_src emacs-lisp @@ -718,6 +778,50 @@ Search documentation from within Emacs. (keymap-global-set "C-c d" 'devdocs-lookup)) #+end_src +** Sidebar +Project file sidebar for project wide visual grepping. +#+begin_src emacs-lisp + (use-package dired-sidebar + :init + (setq dired-sidebar-theme 'icons + dired-sidebar-use-term-integration t + dired-sidebar-width 30 + dired-sidebar-no-delete-other-windows t + dired-sidebar-should-follow-file t)) + + (defun open-project-sidebar () + "Toggle `dired-sidebar' at the project root." + (interactive) + (let ((default-directory (project-root (project-current t)))) + (dired-sidebar-toggle-sidebar))) + + (keymap-global-set "C-c p s" 'open-project-sidebar) + + (defun dired-sidebar-header-line () + "Set a minimal header line for dired-sidebar buffers." + (setq header-line-format + (propertize + (concat " " (file-name-nondirectory + (directory-file-name default-directory))) + 'face 'bold))) + + (add-hook 'dired-sidebar-mode-hook #'dired-sidebar-header-line) + + (defun dired-sidebar-clean-top-line () + "Hide the top directory line in `dired-sidebar` buffers." + (save-excursion + (goto-char (point-min)) + (when (looking-at "^ \\(/.*\\):.*$") + (let ((inhibit-read-only t)) + (delete-region (point) (progn (forward-line 1) (point))))))) + + (add-hook 'dired-sidebar-mode-hook #'dired-sidebar-clean-top-line) + + (add-hook 'dired-sidebar-mode-hook + (lambda () + (setq mode-line-format nil))) ;; disable modeline in sidebar +#+end_src + ** TreeSitter Use advanced highlighting by default. #+begin_src emacs-lisp @@ -754,13 +858,7 @@ The Classic. (add-hook 'find-file-hook 'insert-header-guards) #+end_src -*** COMMENT D -C Interop with a GC. -#+begin_src emacs-lisp - (use-package d-mode - :hook (d-mode . lsp)) -#+end_src -*** COMMENT Go +*** Go A simple C-like language with a GC. #+begin_src emacs-lisp (use-package go-mode @@ -795,16 +893,21 @@ Functionally Scottish. :hook (haskell-mode . lsp)) #+end_src -*** COMMENT LISP -Programming for Programmers. +*** Kotlin +Jetbrains had enough of Java. #+begin_src emacs-lisp - ;; (use-package slime - ;; :init - ;; (slime-setup '(slime-fancy slime-quicklisp slime-asdf slime-mrepl)) - ;; :config - ;; (setq inferior-lisp-program "/usr/bin/sbcl") - ;; (add-hook 'slime-repl-mode-hook 'smartparens-mode)) + (use-package kotlin-ts-mode + :config + (add-hook 'kotlin-ts-mode-hook 'lsp) + + (add-to-list 'auto-mode-alist '("\\.kt\\'" . kotlin-ts-mode))) + ;; Java Support + (use-package lsp-java) +#+end_src +*** LISP +Programming for Programmers. +#+begin_src emacs-lisp (use-package sly :config (setq inferior-lisp-program "ros -Q run" @@ -814,11 +917,8 @@ Programming for Programmers. (add-hook 'lisp-mode-hook (lambda () (define-key lisp-mode-map (kbd "C-c d") 'sly-documentation)))) - - ;; (with-eval-after-load 'sly - ;; (load (expand-file-name "~/.roswell/helper.el"))) #+end_src -*** COMMENT Lua +*** Lua A simple Python-like language with many implementations. #+begin_src emacs-lisp (straight-use-package @@ -841,7 +941,12 @@ A simple Python-like language with many implementations. (add-hook 'lua-mode-hook 'lua-abbrev-mode-off) (setq save-abbrevs nil) ;; is this still needed? #+end_src -*** OCaml +*** Nix +The deterministic package manager. +#+begin_src emacs-lisp + (use-package nix-mode) +#+end_src +*** COMMENT OCaml Installed with OPAM #+begin_src emacs-lisp (setenv "PATH" (concat (concat @@ -859,10 +964,42 @@ Installed with OPAM (require 'dune) (require 'utop) #+end_src -*** COMMENT Vala -An OOP Language for C & GLib interop. +*** Typescript +Embrace, Extend, Exstinguish, Eich. +#+begin_src emacs-lisp + (setenv "PATH" (concat (concat + (concat (expand-file-name "~/.bun/bin") ":") + (getenv "PATH")))) + + (setq exec-path (append exec-path (list (expand-file-name "~/.bun/bin")))) + + (add-hook 'typescript-ts-mode-hook 'lsp) + (add-hook 'tsx-ts-mode-hook 'lsp) + + (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode)) + (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode)) + (add-to-list 'auto-mode-alist '("\\.json\\'" . json-ts-mode)) + + ;; Tailwind + (use-package lsp-tailwindcss + :straight '(lsp-tailwindcss :type git :host github :repo "merrickluo/lsp-tailwindcss") + :init (setq lsp-tailwindcss-add-on-mode t) + :config + (dolist (tw-major-mode + '(css-mode + css-ts-mode + typescript-mode + typescript-ts-mode + tsx-ts-mode + js2-mode + js-ts-mode)) + (add-to-list 'lsp-tailwindcss-major-modes tw-major-mode))) +#+end_src +*** Zig +A systems language with emphasis on metaprogramming. #+begin_src emacs-lisp - (use-package vala-mode) + (use-package zig-mode + :hook (zig-mode . lsp)) #+end_src ** Company @@ -894,7 +1031,7 @@ A powerful auto-completion utility. ;; Bind M-/ to company-complete (define-key global-map (kbd "M-/") 'company-complete) - (define-key global-map (kbd "M-?") 'dabbrev-expand) + (define-key global-map (kbd "M-?") 'dabbrev-expand) :hook (prog-mode . company-mode)) @@ -923,6 +1060,31 @@ Add non-lsp completions to the capf. (add-hook 'completion-at-point-functions #'yasnippet-capf)) #+end_src +** Codeium +#+begin_src emacs-lisp + (straight-use-package + '(codeium :type git :host github :repo "Exafunction/codeium.el")) + + (setq codeium-api-enabled + (lambda (api) + (memq api '(GetCompletions Heartbeat CancelRequest GetAuthToken RegisterUser auth-redirect AcceptCompletion)))) + + (defun my-codeium/document/text () + (buffer-substring-no-properties (max (- (point) 3000) (point-min)) (min (+ (point) 1000) (point-max)))) + (defun my-codeium/document/cursor_offset () + (codeium-utf8-byte-length + (buffer-substring-no-properties (max (- (point) 3000) (point-min)) (point)))) + (setq codeium/document/text 'my-codeium/document/text) + (setq codeium/document/cursor_offset 'my-codeium/document/cursor_offset) + + (defun my/codeium/completion () + "Decouple codeium from other completions" + (interactive) + (cape-interactive #'codeium-completion-at-point)) + + (keymap-global-set "C-c a" 'my/codeium/completion) +#+end_src + ** Utilities *** Flycheck Syntax checking for Emacs. @@ -936,10 +1098,17 @@ Syntax checking for Emacs. (flycheck-add-next-checker 'c/c++-gcc 'c/c++-cppcheck 'append) (setq flycheck-indication-mode nil) (set-face-attribute 'flycheck-warning nil :underline nil)) ;; Disable Warning Underline (NOT WORKING) + + (add-to-list 'display-buffer-alist + '("\\*Flycheck errors\\*" + (display-buffer-reuse-window + display-buffer-in-side-window) + (side . bottom) + (window-height . 0.2))) ;; Set flycheck error list to only take up the bottom 20% of the window #+end_src * User Interface -** Add Nerd Icons +** Add Nerd Icons Use Icons from Nerd Font to add a little modern spice to Emacs. #+begin_src emacs-lisp (use-package nerd-icons @@ -961,7 +1130,7 @@ Set font for both Monospace and Proportional text. #+begin_src emacs-lisp (defvar fontconf '((font . "Aporetic Sans Mono") - (size . 13))) + (size . 15))) (set-face-attribute 'variable-pitch nil :font (cdr (assoc 'font fontconf)) @@ -1040,20 +1209,35 @@ Bind both scroling and +/- to zooming. ** Theme Set the theme to a nice dark one. #+begin_src emacs-lisp - (use-package ef-themes + (use-package kaolin-themes :config (set-window-margins nil 0)) (add-hook 'emacs-startup-hook (lambda () - (load-theme 'ef-bio t))) + (load-theme 'kaolin-dark t))) + + (defun theme-toggle () + "Toggle between two Emacs themes: doom-one and doom-dracula." + (interactive) + (let ((theme-a 'kaolin-dark) + (theme-b 'kaolin-light)) + (cond + ((member theme-a custom-enabled-themes) + (disable-theme theme-a) + (load-theme theme-b t)) + ((member theme-b custom-enabled-themes) + (disable-theme theme-b) + (load-theme theme-a t)) + (t + (load-theme theme-a t))))) #+end_src ** Niceties *** Disable Extra GUI Features Disable GUI features to simplify frames. #+begin_src emacs-lisp - (menu-bar-mode -1) + ;;(menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) (setq inhibit-startup-screen t) @@ -1069,67 +1253,14 @@ Reduce fringe size to 1px. #+begin_src emacs-lisp (set-fringe-mode 1) #+end_src -*** Disable Background -In no-window mode, disable the background to fit in with terminal theme. -#+begin_src emacs-lisp - (defun on-after-init () - (unless (display-graphic-p (selected-frame)) - (set-face-background 'default "unspecified-bg" (selected-frame)))) - - (add-hook 'window-setup-hook 'on-after-init) -#+end_src - -** Modern Looking Emacs -*** Org Modern -Modern iconography and styling for Org-Mode. +*** MacOS Style #+begin_src emacs-lisp - (use-package org-modern) - - (modify-all-frames-parameters - '((right-divider-width . 40) - (internal-border-width . 40))) - (dolist (face '(window-divider - window-divider-first-pixel - window-divider-last-pixel)) - (face-spec-reset-face face) - (set-face-foreground face (face-attribute 'default :background))) - (set-face-background 'fringe (face-attribute 'default :background)) - - - (setq org-pretty-entities t - org-auto-align-tags nil - org-tags-column 0 - org-catch-invisible-edits 'show-and-error - org-special-ctrl-a/e t - org-insert-heading-respect-content t) - - (add-hook 'org-mode-hook #'org-modern-mode) - (add-hook 'org-agenda-finalize-hook #'org-modern-agenda) + (use-package ns-auto-titlebar + :config + (when (eq system-type 'darwin) (ns-auto-titlebar-mode))) #+end_src -*** Spacious Padding -Adds padding around various elements. -#+begin_src emacs-lisp - (use-package spacious-padding) - - ;; These are the default values, but I keep them here for visibility. - (setq spacious-padding-widths - '( :internal-border-width 15 - :header-line-width 4 - :mode-line-width 6 - :tab-width 4 - :right-divider-width 30 - :scroll-bar-width 8 - :fringe-width 8)) - ;; Read the doc string of `spacious-padding-subtle-mode-line' as it - ;; is very flexible and provides several examples. - (setq spacious-padding-subtle-mode-line - `( :mode-line-active 'default - :mode-line-inactive vertical-border)) - - (spacious-padding-mode 1) -#+end_src -*** Zen Mode +** Zen Mode Center the edtior with Olivetti for distraction-free editing. #+begin_src emacs-lisp (use-package olivetti diff --git a/.emacs.d/early-init.el b/.emacs.d/early-init.el new file mode 100644 index 0000000..40200af --- /dev/null +++ b/.emacs.d/early-init.el @@ -0,0 +1,10 @@ +(setenv "LIBRARY_PATH" + (string-join + '("/opt/homebrew/opt/gcc/lib/gcc/13" + "/opt/homebrew/opt/libgccjit/lib/gcc/13" + "/opt/homebrew/opt/gcc/lib/gcc/13/gcc/aarch64-apple-darwin22/13") + ":")) +(setq gc-cons-threshold 100000000) +(setq read-process-output-max (* 1024 1024)) +(setenv "LSP_USE_PLISTS" "true") +(setq-default lsp-use-plists t) diff --git a/.xsessionrc b/.xsessionrc deleted file mode 100644 index c923b63..0000000 --- a/.xsessionrc +++ /dev/null @@ -1,2 +0,0 @@ -export QT_QPA_PLATFORMTHEME=gtk2 -export QT_STYLE_OVERRIDE=gtk2 diff --git a/.zshrc b/.zshrc index 6af87b4..97ce5f5 100644 --- a/.zshrc +++ b/.zshrc @@ -57,30 +57,55 @@ git_dirty() { } set_prompt() { - local user="${USER_COLOR}%n${RESET_COLOR}" - local venv="" - [[ -n "$VIRTUAL_ENV" ]] && venv="${VENV_COLOR}($(basename $VIRTUAL_ENV))${RESET_COLOR} " + if [ "$DEVBOX_SHELL_ENABLED" -ne 1 ]; then + local user="${USER_COLOR}%n${RESET_COLOR}" + local venv="" + [[ -n "$VIRTUAL_ENV" ]] && venv="${VENV_COLOR}($(basename $VIRTUAL_ENV))${RESET_COLOR} " - local path="${DIR_COLOR}$(shorten_path)${RESET_COLOR}" - local git_info="" - local branch="$(git_branch)" + local path="${DIR_COLOR}$(shorten_path)${RESET_COLOR}" + local git_info="" + local branch="$(git_branch)" - if [[ -n "$branch" ]]; then - git_info=" %F{white}on%f ${GIT_COLOR}${branch}${RESET_COLOR}${GIT_DIRTY_COLOR}$(git_dirty)${RESET_COLOR}" - fi + if [[ -n "$branch" ]]; then + git_info=" %F{white}on%f ${GIT_COLOR}${branch}${RESET_COLOR}${GIT_DIRTY_COLOR}$(git_dirty)${RESET_COLOR}" + fi - PROMPT="${user} %F{white}in%f ${venv}${path}${git_info} + PROMPT="${user} %F{white}in%f ${venv}${path}${git_info} ${PROMPT_SYMBOL_COLOR}λ${RESET_COLOR} " + fi } autoload -Uz add-zsh-hook add-zsh-hook precmd set_prompt # plugins -source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /Users/venomade/.local/share/zsh-plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # GHCUP for Haskell [ -f "/home/venomade/.ghcup/env" ] && . "/home/venomade/.ghcup/env" # ghcup-env # OPAM for OCaml [[ ! -r '/home/venomade/.opam/opam-init/init.zsh' ]] || source '/home/venomade/.opam/opam-init/init.zsh' > /dev/null 2> /dev/null +# bun completions +[ -s "/home/venomade/.bun/_bun" ] && source "/home/venomade/.bun/_bun" + +# bun +# export BUN_INSTALL="$HOME/.bun" +# export PATH="$BUN_INSTALL/bin:$PATH" + +# Devbox +eval "$(devbox global shellenv)" + +# Function to run emacs based on the presence of devbox.json +run_emacs() { + if [[ $# -eq 0 ]]; then + if [[ -f "devbox.json" ]]; then + devbox run emacs . &>/dev/null & + else + emacs + fi + else + command emacs "$@" + fi +} +alias emacs='run_emacs' |