From 8d688d1107c46b6dfdcaf02fa5c9c4c8a4640e65 Mon Sep 17 00:00:00 2001 From: venomade Date: Sun, 18 Jan 2026 16:07:54 +0000 Subject: KDE & Emacs --- .config/kxkbrc | 9 + .config/nvim/.gitignore | 1 + .config/nvim/.luarc.json | 33 + .config/nvim/init.lua | 7 + .config/nvim/lua/config/colemak.lua | 32 + .config/nvim/lua/config/keymaps.lua | 53 + .config/nvim/lua/config/options.lua | 110 ++ .config/nvim/lua/manager.lua | 26 + .config/nvim/lua/plugins/autopairs.lua | 8 + .config/nvim/lua/plugins/cmp.lua | 64 ++ .config/nvim/lua/plugins/compile.lua | 20 + .config/nvim/lua/plugins/flutter.lua | 11 + .config/nvim/lua/plugins/fterm.lua | 14 + .config/nvim/lua/plugins/init.lua | 14 + .config/nvim/lua/plugins/lastplace.lua | 6 + .config/nvim/lua/plugins/lazygit.lua | 20 + .config/nvim/lua/plugins/lualine.lua | 26 + .config/nvim/lua/plugins/markdown.lua | 7 + .config/nvim/lua/plugins/oil.lua | 28 + .config/nvim/lua/plugins/orgmode.lua | 31 + .config/nvim/lua/plugins/rainbow-delimiters.lua | 6 + .config/nvim/lua/plugins/statuscol.lua | 6 + .config/nvim/lua/plugins/telescope.lua | 42 + .config/nvim/lua/plugins/theme.lua | 29 + .config/nvim/lua/plugins/todo-comments.lua | 7 + .config/nvim/lua/plugins/treesitter.lua | 53 + .config/nvim/lua/plugins/which-key.lua | 17 + .config/nvim/lua/plugins/zen.lua | 24 + .config/shell/alias | 1 + .config/shell/vars | 11 +- .config/xkb/symbols/us_colemak_pt_mac | 13 + .emacs.d/.gitignore | 13 + .emacs.d/config.org | 1241 ----------------------- .emacs.d/custom.el | 39 + .emacs.d/early-init.el | 11 +- .emacs.d/init.el | 914 ++++++++++++++++- .emacs.d/lang/clojure.el | 26 + .emacs.d/lang/java.el | 38 + .emacs.d/lang/lisp.el | 9 + .emacs.d/lang/lua.el | 11 + .emacs.d/pkg/consult-jdt.el | 105 ++ .emacs.d/pkg/flymake-cppcheck.el | 84 ++ .kxkbrc | 10 + .mg | 1 + .tmux.conf | 107 ++ .xkbmap | 3 + .xsessionrc | 2 - .zprofile | 6 + .zshenv | 12 + .zshrc | 28 +- 50 files changed, 2122 insertions(+), 1267 deletions(-) create mode 100644 .config/kxkbrc create mode 100644 .config/nvim/.gitignore create mode 100644 .config/nvim/.luarc.json create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lua/config/colemak.lua create mode 100644 .config/nvim/lua/config/keymaps.lua create mode 100644 .config/nvim/lua/config/options.lua create mode 100644 .config/nvim/lua/manager.lua create mode 100644 .config/nvim/lua/plugins/autopairs.lua create mode 100644 .config/nvim/lua/plugins/cmp.lua create mode 100644 .config/nvim/lua/plugins/compile.lua create mode 100644 .config/nvim/lua/plugins/flutter.lua create mode 100644 .config/nvim/lua/plugins/fterm.lua create mode 100644 .config/nvim/lua/plugins/init.lua create mode 100644 .config/nvim/lua/plugins/lastplace.lua create mode 100644 .config/nvim/lua/plugins/lazygit.lua create mode 100644 .config/nvim/lua/plugins/lualine.lua create mode 100644 .config/nvim/lua/plugins/markdown.lua create mode 100644 .config/nvim/lua/plugins/oil.lua create mode 100644 .config/nvim/lua/plugins/orgmode.lua create mode 100644 .config/nvim/lua/plugins/rainbow-delimiters.lua create mode 100644 .config/nvim/lua/plugins/statuscol.lua create mode 100644 .config/nvim/lua/plugins/telescope.lua create mode 100644 .config/nvim/lua/plugins/theme.lua create mode 100644 .config/nvim/lua/plugins/todo-comments.lua create mode 100644 .config/nvim/lua/plugins/treesitter.lua create mode 100644 .config/nvim/lua/plugins/which-key.lua create mode 100644 .config/nvim/lua/plugins/zen.lua create mode 100644 .config/xkb/symbols/us_colemak_pt_mac create mode 100644 .emacs.d/.gitignore delete mode 100644 .emacs.d/config.org create mode 100644 .emacs.d/custom.el create mode 100644 .emacs.d/lang/clojure.el create mode 100644 .emacs.d/lang/java.el create mode 100644 .emacs.d/lang/lisp.el create mode 100644 .emacs.d/lang/lua.el create mode 100644 .emacs.d/pkg/consult-jdt.el create mode 100644 .emacs.d/pkg/flymake-cppcheck.el create mode 100644 .kxkbrc create mode 100644 .tmux.conf create mode 100644 .xkbmap delete mode 100644 .xsessionrc create mode 100644 .zprofile create mode 100644 .zshenv diff --git a/.config/kxkbrc b/.config/kxkbrc new file mode 100644 index 0000000..e5674f4 --- /dev/null +++ b/.config/kxkbrc @@ -0,0 +1,9 @@ +[$Version] +update_info=kxkb.upd:remove-empty-lists,kxkb.upd:add-back-resetoptions,kxkb_variants.upd:split-variants + +[Layout] +LayoutList=us_colemak_pt_mac +Options=ctrl:nocaps,lv3:switch +ResetOldOptions=true +Use=true +VariantList=basic 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..c5a6ffc --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json", + "Lua.runtime.version": "LuaJIT", + "Lua.runtime.path": [ + "?.lua", + "?/init.lua", + "/Users/venomade/.luarocks/share/lua/5.4/?.lua", + "/Users/venomade/.luarocks/share/lua/5.4/?/init.lua", + "/opt/homebrew/share/lua/5.4/?.lua", + "/opt/homebrew/share/lua/5.4/?/init.lua", + "./stubs/?.lua", + "./stubs/?/init.lua" + ], + "Lua.workspace.library": [ + "/Users/venomade/.luarocks/share/lua/5.4", + "/opt/homebrew/share/lua/5.4", + "./stubs" + ], + "diagnostics.globals": ["vim"], + "workspace.checkThirdParty": false, + "workspace.library": [ + "$VIMRUNTIME" + ], + "Lua.diagnostics.enable": true, + "Lua.format.defaultConfig": { + "indent_style": "space", + "indent_size": "2" + }, + "typeFormat.config": false, + "completion.callSnippet": "Replace", + "completion.showWord": "Disable", + "completion.workspaceWord": false +} 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..e6ce33b --- /dev/null +++ b/.config/nvim/lua/config/colemak.lua @@ -0,0 +1,32 @@ +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", "h", "h") +map("n", "n", "j") +map("n", "e", "k") +map("n", "i", "l") + +map ("", "gn", "gj") +map ("", "ge", "gk") + +-- 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..9764772 --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,53 @@ +vim.g.mapleader = " " +vim.keymap.set("n", "bk", vim.cmd.bdelete, + { desc = "Kill Buffer" }) +vim.keymap.set("n", "bn", vim.cmd.bnext, + { desc = "Next Buffer" }) +vim.keymap.set("n", "bp", vim.cmd.bprev, + { desc = "Previous Buffer" }) + +vim.keymap.set("n", "E", vim.lsp.buf.hover) +vim.keymap.set("n", "", vim.diagnostic.open_float) +vim.keymap.set("n", "ld", vim.lsp.buf.definition, + { desc = "Go to Definition" }) +vim.keymap.set("n", "lt", vim.lsp.buf.type_definition, + { desc = "Go to Type Definition"} ) +vim.keymap.set("n", "li", vim.lsp.buf.implementation, + { desc = "Go to Implementation" }) +vim.keymap.set("n", "la", vim.lsp.buf.code_action, + { desc = "Show Code Actions" }) +vim.keymap.set("n", "lf", vim.lsp.buf.format, + { desc = "Format Document" }) +vim.keymap.set("n", "lr", vim.lsp.buf.rename, + { desc = "Rename" }) +vim.keymap.set("n", "le", function() + vim.diagnostic.jump({ count = 1, float = true }) +end, + { desc = "Next Error" }) +vim.keymap.set("n", "lh", vim.lsp.buf.hover, + { desc = "Hover Diagnostics" }) + +vim.keymap.set("n", "wh", vim.cmd.split, + { desc = "Split Window Horizontally" }) +vim.keymap.set("n", "wv", vim.cmd.vsplit, + { desc = "Split Window Vertically" }) +vim.keymap.set("n", "wc", "q", + { desc = "Close Window" }) +vim.keymap.set("n", "ww", "w", + { desc = "Next Window" }) + +vim.keymap.set("n", "foc", function() + vim.cmd('edit ~/.config/nvim/init.lua') +end, { desc = "Open Config File" }) + +vim.keymap.set("n", "fot", function() + vim.cmd('edit ~/Documents/TODO.org') +end, { desc = "Open Todo File" }) + +vim.keymap.set("n", "fon", function() + vim.cmd('edit ~/Documents/Notes.org') +end, { desc = "Open Notes File" }) + +vim.keymap.set('n', '', '==', { noremap = true, silent = true }) + +vim.keymap.set('n', 'q:', ':q', { noremap = true }) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..fd1de92 --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,110 @@ +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 = "a" + +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: ' + +vim.opt.conceallevel = 3 + +-- Window Borders +vim.o.winborder = 'rounded' + +-- Remove Whitespaces on File Save +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { "*" }, + command = [[%s/\s\+$//e]], +}) + +-- Define highlight groups for line numbers with diagnostics +vim.api.nvim_set_hl(0, "LineNrDiagnosticError", { bg = "#3f1d1d", fg = "#ff6c6b" }) +vim.api.nvim_set_hl(0, "LineNrDiagnosticWarn", { bg = "#3f311d", fg = "#ECBE7B" }) +vim.api.nvim_set_hl(0, "LineNrDiagnosticInfo", { bg = "#1d2d3f", fg = "#51afef" }) +vim.api.nvim_set_hl(0, "LineNrDiagnosticHint", { bg = "#1d3f2d", fg = "#98be65" }) + +local function set_line_number_highlight() + -- Clear existing highlights + vim.fn.sign_unplace("LineNrDiagnostics") + + -- Get diagnostics per buffer + for _, diag in ipairs(vim.diagnostic.get(0)) do + local hl_group = nil + if diag.severity == vim.diagnostic.severity.ERROR then + hl_group = "LineNrDiagnosticError" + elseif diag.severity == vim.diagnostic.severity.WARN then + hl_group = "LineNrDiagnosticWarn" + elseif diag.severity == vim.diagnostic.severity.INFO then + hl_group = "LineNrDiagnosticInfo" + elseif diag.severity == vim.diagnostic.severity.HINT then + hl_group = "LineNrDiagnosticHint" + end + + if hl_group then + vim.fn.sign_place(0, "LineNrDiagnostics", hl_group, vim.api.nvim_get_current_buf(), { + lnum = diag.lnum + 1, -- diagnostics are 0-indexed + priority = 10, + }) + end + end +end + +-- Create the sign definitions +vim.fn.sign_define("LineNrDiagnosticError", { text = "", texthl = "LineNrDiagnosticError", numhl = "LineNrDiagnosticError" }) +vim.fn.sign_define("LineNrDiagnosticWarn", { text = "", texthl = "LineNrDiagnosticWarn", numhl = "LineNrDiagnosticWarn" }) +vim.fn.sign_define("LineNrDiagnosticInfo", { text = "", texthl = "LineNrDiagnosticInfo", numhl = "LineNrDiagnosticInfo" }) +vim.fn.sign_define("LineNrDiagnosticHint", { text = "", texthl = "LineNrDiagnosticHint", numhl = "LineNrDiagnosticHint" }) + +-- Update line numbers when diagnostics change +vim.api.nvim_create_autocmd({ "DiagnosticChanged", "BufEnter", "CursorHold" }, { + callback = set_line_number_highlight, +}) + +-- TODO: Put somewhere else (for llm.nvim) +vim.fn.setenv("LLM_KEY", "NONE") diff --git a/.config/nvim/lua/manager.lua b/.config/nvim/lua/manager.lua new file mode 100644 index 0000000..da5a221 --- /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, notify = false }, +}) 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..79bf9ac --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,64 @@ +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({ + preselect = 'none', + window = { + completion = cmp.config.window.bordered({}), + documentation = cmp.config.window.bordered({}), + }, + snippet = { + expand = function(arg) + vim.snippet.expand(arg.body) + end + }, + mapping = cmp.mapping.preset.insert({ + -- [''] = cmp.mapping.confirm({ select = true }), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.confirm(), + [''] = cmp.mapping.select_next_item(), + [''] = 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() + vim.lsp.config('lua_ls', { + capabilities = capabilities + }) + vim.lsp.enable('lua_ls') + vim.lsp.config('clangd', { + capabilities = capabilities + }) + vim.lsp.enable('clangd') + end +} diff --git a/.config/nvim/lua/plugins/compile.lua b/.config/nvim/lua/plugins/compile.lua new file mode 100644 index 0000000..8d824de --- /dev/null +++ b/.config/nvim/lua/plugins/compile.lua @@ -0,0 +1,20 @@ +return { + "ej-shafran/compile-mode.nvim", + branch = "latest", + dependencies = { + "nvim-lua/plenary.nvim", + }, + config = function() + vim.g.compile_mode = {} + + local compile_mode = require("compile-mode") + + vim.keymap.set("n", "cc", compile_mode.compile, + { desc = "Compile" }) + vim.keymap.set("n", "cr", compile_mode.recompile, + { desc = "Recompile" }) + vim.keymap.set("n", "cq", compile_mode.interrupt, + { desc = "Quit Compile (Interrupt)" }) + + end +} diff --git a/.config/nvim/lua/plugins/flutter.lua b/.config/nvim/lua/plugins/flutter.lua new file mode 100644 index 0000000..a6d3506 --- /dev/null +++ b/.config/nvim/lua/plugins/flutter.lua @@ -0,0 +1,11 @@ +return { + 'nvim-flutter/flutter-tools.nvim', + lazy = false, + dependencies = { + 'nvim-lua/plenary.nvim', + -- 'stevearc/dressing.nvim', -- optional for vim.ui.select + }, + config = function () + require('flutter-tools').setup({}) + end, +} diff --git a/.config/nvim/lua/plugins/fterm.lua b/.config/nvim/lua/plugins/fterm.lua new file mode 100644 index 0000000..dfc9375 --- /dev/null +++ b/.config/nvim/lua/plugins/fterm.lua @@ -0,0 +1,14 @@ +return { + "numToStr/FTerm.nvim", + config = function() + require("FTerm").setup({ + border = "bold", + dimensions = { + height = 0.9, + width = 0.9, + }, + }) + vim.keymap.set('n', '', 'lua require("FTerm").toggle()') + vim.keymap.set('t', '', 'lua require("FTerm").toggle()') + end, +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..4c12912 --- /dev/null +++ b/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,14 @@ +return { + require('plugins.theme'), + 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.which-key'), +} 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/lazygit.lua b/.config/nvim/lua/plugins/lazygit.lua new file mode 100644 index 0000000..f9ddc84 --- /dev/null +++ b/.config/nvim/lua/plugins/lazygit.lua @@ -0,0 +1,20 @@ +return { + "kdheepak/lazygit.nvim", + lazy = true, + cmd = { + "LazyGit", + "LazyGitConfig", + "LazyGitCurrentFile", + "LazyGitFilter", + "LazyGitFilterCurrentFile", + }, + -- optional for floating window border decoration + dependencies = { + "nvim-lua/plenary.nvim", + }, + -- setting the keybinding for LazyGit with 'keys' is recommended in + -- order to load the plugin when the command is run for the first time + keys = { + { "g", "LazyGit", desc = "LazyGit" } + } +} 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/markdown.lua b/.config/nvim/lua/plugins/markdown.lua new file mode 100644 index 0000000..b003495 --- /dev/null +++ b/.config/nvim/lua/plugins/markdown.lua @@ -0,0 +1,7 @@ +return { + 'MeanderingProgrammer/render-markdown.nvim', + dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, + ---@module 'render-markdown' + ---@type render.md.UserConfig + opts = {}, +} 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', '-', 'Oil', {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..f35d7b4 --- /dev/null +++ b/.config/nvim/lua/plugins/orgmode.lua @@ -0,0 +1,31 @@ +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', + org_hide_emphasis_markers = true, + }) + + -- Enable line wrapping and line breaking for Org files + vim.api.nvim_create_augroup("OrgMode", { clear = true }) + vim.api.nvim_create_autocmd("FileType", { + pattern = "org", + callback = function() + vim.opt_local.wrap = true + vim.opt_local.linebreak = true + vim.opt_local.textwidth = 80 + end, + }) + + -- AUTHORS_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/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..f942dc8 --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,42 @@ +return { + "nvim-telescope/telescope.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("telescope").setup({}) + + local tscope = require('telescope.builtin') + vim.keymap.set("n", "ff", function() + local cwd + if vim.bo.filetype == "oil" then + -- For Oil buffers + cwd = require("oil").get_current_dir() + else + cwd = vim.fn.expand("%:p:h") + end + tscope.find_files({ cwd = cwd }) + end, { desc = "Find File" }) + + vim.keymap.set("n", "fp", function() + tscope.find_files({ + cwd = vim.loop.cwd(), + }) + end, { desc = "Find Project File" }) + vim.keymap.set('n', 'bb', tscope.buffers, + { desc = "Find Buffer" }) + vim.keymap.set('n', 'fh', tscope.help_tags, + { desc = "Find Help" }) + -- vim.keymap.set('n', 'fg', function() + -- tscope.grep_string( + -- { search = vim.fn.input("Grep > "), + -- desc = "Find by Grep" }); + -- end) + vim.keymap.set('n', 'fg', tscope.live_grep, + { desc = "Find by Grep" }) + vim.keymap.set('n', 'fr', tscope.oldfiles, + { desc = "Find Recent Files" }) + vim.keymap.set('n', 'lw', tscope.diagnostics, + { desc = "Search Diagnostics" }) + vim.keymap.set('n', 'lg', tscope.lsp_references, + { desc = "Search References" }) + end, +} diff --git a/.config/nvim/lua/plugins/theme.lua b/.config/nvim/lua/plugins/theme.lua new file mode 100644 index 0000000..995c3dc --- /dev/null +++ b/.config/nvim/lua/plugins/theme.lua @@ -0,0 +1,29 @@ +-- return { +-- "rose-pine/neovim", +-- as = "rose-pine", +-- config = function() +-- require("rose-pine").setup({ +-- variant = "main", +-- palette = { +-- main = { +-- base = "#000000", +-- surface = "#000000", +-- } +-- } +-- }) +-- vim.opt.termguicolors = true +-- vim.cmd.colorscheme("rose-pine") +-- end, +-- } + +return { + "catppuccin/nvim", + priority = 1000, + config = function () + require("catppuccin").setup({ + flavour = "mocha" + }) + vim.cmd.colorscheme("catppuccin") + end, + opts = {} +} diff --git a/.config/nvim/lua/plugins/todo-comments.lua b/.config/nvim/lua/plugins/todo-comments.lua new file mode 100644 index 0000000..64f12b7 --- /dev/null +++ b/.config/nvim/lua/plugins/todo-comments.lua @@ -0,0 +1,7 @@ +return { + "folke/todo-comments.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + opts = { + } +} +-- TODO: Add a bind to :TodoTelescope at 'ft' diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..88b699b --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,53 @@ +-- 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, +-- } + +return { + "nvim-treesitter/nvim-treesitter", + opts = { + highlight = { enable = true }, + indent = { enable = true }, + ensure_installed = { + "bash", + "c", + "dart", + "diff", + "go", + "html", + "javascript", + "jsdoc", + "json", + "jsonc", + "lua", + "luadoc", + "luap", + "make", + "markdown", + "markdown_inline", + "printf", + "python", + "query", + "regex", + "rust", + "toml", + "tsx", + "typescript", + "vim", + "vimdoc", + "xml", + "yaml", + }, + }, + ---@param opts TSConfig + config = function(_, opts) + require("nvim-treesitter.configs").setup(opts) + end, +} diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..746b399 --- /dev/null +++ b/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,17 @@ +return { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + icons = { mappings = false }, + delay = 1000 + }, + keys = { + { + "?", + function() + require("which-key").show({ global = false }) + end, + desc = "Buffer Local Keymaps", + }, + }, +} diff --git a/.config/nvim/lua/plugins/zen.lua b/.config/nvim/lua/plugins/zen.lua new file mode 100644 index 0000000..004aa8c --- /dev/null +++ b/.config/nvim/lua/plugins/zen.lua @@ -0,0 +1,24 @@ +return { + "Pocco81/true-zen.nvim", + config = function() + require('true-zen').setup({ + modes = { + ataraxis = { + padding = { + left = 100, + right = 100, + } + }, + minimalist = { + options = { + -- Some weird bug fix :/ + cmdheight = 1 + } + } + } + }) + + vim.keymap.set('n', 'z', require('true-zen.ataraxis').toggle, + { desc = "Toggle Zen Mode" }) + end, +} diff --git a/.config/shell/alias b/.config/shell/alias index f0adee5..29a7333 100644 --- a/.config/shell/alias +++ b/.config/shell/alias @@ -3,3 +3,4 @@ alias rgf='rg --files | rg' alias ls='ls --color=auto' alias md='mkdir' alias ec='emacsclient -nw' +alias cat='bat -p' diff --git a/.config/shell/vars b/.config/shell/vars index 11f8faa..a68dea2 100644 --- a/.config/shell/vars +++ b/.config/shell/vars @@ -1,3 +1,12 @@ +export GOPATH="$HOME/.go" + +export PATH="$PATH:$GOPATH/bin" export PATH="$PATH:$HOME/.local/bin" +export PATH="$PATH:$HOME/.config/emacs/bin" + +export EDITOR=emacs + +# export LDFLAGS="-L/opt/homebrew/opt/llvm/lib" +# export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" -export EDITOR=mg \ No newline at end of file +# export CMAKE_PREFIX_PATH="/opt/homebrew/opt/llvm" diff --git a/.config/xkb/symbols/us_colemak_pt_mac b/.config/xkb/symbols/us_colemak_pt_mac new file mode 100644 index 0000000..db2394f --- /dev/null +++ b/.config/xkb/symbols/us_colemak_pt_mac @@ -0,0 +1,13 @@ +default partial alphanumeric_keys +xkb_symbols "basic" { + + include "us(colemak)" + + key { [ h, H, dead_circumflex, dead_circumflex ] }; + key { [ n, N, dead_tilde, dead_tilde ] }; + key { [ e, E, dead_acute, dead_acute ] }; + key { [ i, I, dead_grave, dead_grave ] }; + key { [ u, U, dead_diaeresis, dead_diaeresis ] }; + + name[Group1] = "English (US, Colemak, macOS PT accents)"; +}; diff --git a/.emacs.d/.gitignore b/.emacs.d/.gitignore new file mode 100644 index 0000000..44ac41e --- /dev/null +++ b/.emacs.d/.gitignore @@ -0,0 +1,13 @@ +#* +.cache +auto-save-list +autosaves +backups +eln-cache +elpa +eshell +history +lock +places +projects +recentf \ No newline at end of file diff --git a/.emacs.d/config.org b/.emacs.d/config.org deleted file mode 100644 index 070de5b..0000000 --- a/.emacs.d/config.org +++ /dev/null @@ -1,1241 +0,0 @@ -#+title: Emacs Config -#+author: Venomade - -* Contents :toc_2: -- [[#straight-package-manager][Straight Package Manager]] -- [[#configs][Configs]] - - [[#custom-functions][Custom Functions]] - - [[#fix-annoyances][Fix Annoyances]] - - [[#keybindings][Keybindings]] - - [[#setup-line-numbers][Setup Line Numbers]] -- [[#general][General]] - - [[#avy][Avy]] - - [[#colors][Colors]] - - [[#dired][Dired]] - - [[#eshell][EShell]] - - [[#git][Git]] - - [[#move-text][Move Text]] - - [[#ivy-counsel][Ivy (Counsel)]] - - [[#simple-modeline][Simple Modeline]] - - [[#smart-parentheses-pairing][Smart Parentheses Pairing]] - - [[#undo-tree][Undo Tree]] -- [[#org-mode][Org Mode]] - - [[#table-of-contents][Table of Contents]] - - [[#bullet-headers][Bullet Headers]] - - [[#org-agenda][Org Agenda]] - - [[#org-babel][Org Babel]] - - [[#org-tempo][Org Tempo]] - - [[#styling][Styling]] -- [[#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]] - - [[#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)) - (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))) - (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 -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() - (interactive) - (split-window-below) - (balance-windows) - (other-window 1)) - - (defun split-and-follow-vertically() - (interactive) - (split-window-right) - (balance-windows) - (other-window 1)) -#+end_src -*** Duplicate Line -Duplicates the current line to the line below. -#+begin_src emacs-lisp - (defun duplicate-line () - (interactive) - (let ((column (- (point) (point-at-bol))) - (line (let ((s (thing-at-point 'line t))) - (if s (string-remove-suffix "\n" s) "")))) - (move-end-of-line 1) - (newline) - (insert line) - (move-beginning-of-line 1) - (forward-char column))) - - (keymap-global-set "C-c y d" 'duplicate-line) -#+end_src -*** Open Line above and below -Vim's o and S-o implemented for Emacs bindings. -#+begin_src emacs-lisp - (defun vi-open-line-above () - (interactive) - (unless (bolp) - (beginning-of-line)) - (newline) - (forward-line -1) - (indent-according-to-mode)) - - (defun vi-open-line-below () - (interactive) - (unless (eolp) - (end-of-line)) - (newline-and-indent)) - - (keymap-global-set "C-c O" 'vi-open-line-below) - (keymap-global-set "C-c o" 'vi-open-line-above) -#+end_src -*** C-a to indentation -Have c-a move the cursor to the start after indentation unless already there. -#+begin_src emacs-lisp - (defun smart-beginning-of-line () - (interactive) - (let ((initial-point (point))) - (back-to-indentation) - (when (eq initial-point (point)) - (move-beginning-of-line 1)))) - - (defun setup-prog-mode-c-a () - (local-set-key (kbd "C-a") 'smart-beginning-of-line)) - - (add-hook 'prog-mode-hook 'setup-prog-mode-c-a) -#+end_src -*** Automatically Cull Whitespace -Remove trailing whitespaces when saving in prog-modes. -#+begin_src emacs-lisp - (defun prog-nuke-trailing-whitespace () - (when (derived-mode-p 'prog-mode) - (delete-trailing-whitespace))) - - (add-hook 'before-save-hook 'prog-nuke-trailing-whitespace) -#+end_src -*** Quick Grep -Quickly grep both my current project and the system include directory. -#+begin_src emacs-lisp - (defun grep-symbol-at-point () - (interactive) - (let ((symbol (thing-at-point 'symbol))) - (if symbol - (counsel-rg (concat symbol)) - (message "No symbol at point.")))) - - (defun grep-symbol-in-include-at-point () - (interactive) - (let ((symbol (thing-at-point 'symbol))) - (if symbol - (counsel-rg (concat symbol) "/usr/include/") - (message "No symbol at point.")))) - - (global-set-key (kbd "C-c g") 'grep-symbol-at-point) - (global-set-key (kbd "C-c G") 'grep-symbol-in-include-at-point) -#+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 - (setq backup-directory-alist - `(("." . ,(concat user-emacs-directory "backups")))) - (setq auto-save-file-name-transforms - `(("." ,(concat user-emacs-directory "autosaves/") t))) - (setq lock-file-name-transforms - `(("." ,(concat user-emacs-directory "lock") t))) -#+end_src -*** Disable Bell -Only flash, no sound, it gets annoying. -#+begin_src emacs-lisp - (setq ring-bell-function 'ignore) -#+end_src -*** Hide Warnings -Fixing warnings is for nerds. This is basically necessary after more than 5 packages. -#+begin_src emacs-lisp - (setq warning-minimum-level :emergency) -#+end_src -*** Local Bin -Add the local bin directory to PATH. -#+begin_src emacs-lisp - (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 -Reload Emacs by sourcing the init.el file. -#+begin_src emacs-lisp - (keymap-global-set "C-c e c" (lambda () (interactive) (load-file "~/.emacs.d/init.el"))) -#+end_src -*** Open Common Files -Open the TODO, Bookmarks and Notes from synced Documents and the config file with simple shortcuts. -#+begin_src emacs-lisp - (keymap-global-set "C-c f c" (lambda () (interactive) (find-file "~/.emacs.d/config.org"))) - (keymap-global-set "C-c f t" (lambda () (interactive) (find-file "~/Documents/TODO.org"))) - (keymap-global-set "C-c f b" (lambda () (interactive) (find-file "~/Documents/Bookmarks.org"))) - (keymap-global-set "C-c f n" (lambda () (interactive) (find-file "~/Documents/Notes.org"))) - (keymap-global-set "C-c f i" (lambda () (interactive) (find-file "~/Documents/Ideas.org"))) -#+end_src -*** Switch and Revert Buffers -Add shortcuts to switch buffers and to revert buffer. -#+begin_src emacs-lisp - (keymap-global-set "C-x C-b" 'ibuffer) - (keymap-global-set "C-c b p" 'previous-buffer) - (keymap-global-set "C-c b n" 'next-buffer) - (keymap-global-set "C-c b r" 'revert-buffer) -#+end_src -*** Compile Mode -Add shortcuts to build in compile-mode. -#+begin_src emacs-lisp - (setq compilation-scroll-output t) - (keymap-global-set "C-c m c" 'compile) - (keymap-global-set "C-c m r" 'recompile) -#+end_src -*** Emacs -Add shortcuts to various Emacs functions. -#+begin_src emacs-lisp - (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" 'theme-toggle) -#+end_src -*** Regex and Copy from Above -Add shortcuts to entering a regex replace and copying a line from above. -#+begin_src emacs-lisp - (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 - (keymap-global-set "C-c v" 'scroll-other-window) - (keymap-global-set "C-c V" 'scroll-other-window-down) - - (keymap-global-set "C-c w n" 'other-window) - (keymap-global-set "C-c w f" 'other-window) - (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 - -** Setup Line Numbers -*** Always show line numbers -Show line numbers and highlight the current line. -#+begin_src emacs-lisp - (add-hook 'prog-mode-hook 'display-line-numbers-mode) - (global-visual-line-mode t) - (add-hook 'prog-mode-hook (lambda () (visual-line-mode -1))) - (setq-default truncate-lines t) - (global-hl-line-mode 1) -#+end_src -*** Generally use spaces instead of tabs -Generally, as in everywhere but Go. -#+begin_src emacs-lisp - (setq-default indent-tabs-mode nil) - (setq tab-width 2) - (setq tab-stop-list (number-sequence 2 100 2)) -#+end_src -*** Highlight Column -Highlight a column at 120 chars to respect GNOME style. -#+begin_src emacs-lisp - (setq-default display-fill-column-indicator-column 120) - (add-hook 'prog-mode-hook #'display-fill-column-indicator-mode) -#+end_src - -* General -** Avy -Keybind superfast cursor movement to "C-q". -#+begin_src emacs-lisp - (use-package avy - :config - (setq avy-keys '(?a ?r ?s ?t ?n ?e ?i ?o) - avy-all-windows nil) - (bind-key* "C-q" 'avy-goto-char)) -#+end_src - -** Colors -*** Highlight Todo -Highlight TODO items so they can be reviewed later. -#+begin_src emacs-lisp - (use-package hl-todo - :hook ((org-mode . hl-todo-mode) - (prog-mode . hl-todo-mode)) - - :config - (setq hl-todo-highlight-punctuation ":" - hl-todo-highlight-faces - `(("TODO" warning bold) - ("FIXME" error bold) - ("HACK" font-lock-constant-face bold) - ("REVIEW" font-lock-doc-face bold) - ("NOTE" success bold) - ("DEPRECATED" font-lock-doc-face bold)))) -#+end_src -*** Rainbow Delimiters -Makes different brackets and other delimeters levels different colors so they can be quickly distinguished. -#+begin_src emacs-lisp - (use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) -#+end_src - -** Dired -A powerful built-in file manager. -#+begin_src emacs-lisp - (setq dired-listing-switches "-lh") -#+end_src - -** EShell -A built in posix shell. -#+begin_src emacs-lisp - ;; Define custom faces for the prompt. These inherit from standard faces so they - ;; automatically adapt to your current theme. - (defface eshell-prompt-user-face - '((t (:inherit font-lock-keyword-face))) - "Face for the username in the eshell prompt." - :group 'eshell-prompt) - - (defface eshell-prompt-venv-face - '((t (:inherit font-lock-string-face))) - "Face for the virtualenv name in the eshell prompt." - :group 'eshell-prompt) - - (defface eshell-prompt-dir-face - '((t (:inherit dired-directory))) - "Face for the directory path in the eshell prompt." - :group 'eshell-prompt) - - (defface eshell-prompt-git-face - '((t (:inherit magit-tag))) - "Face for the git branch in the eshell prompt." - :group 'eshell-prompt) - - (defface eshell-prompt-git-dirty-face - '((t (:inherit eshell-prompt-git-face))) - "Face for the git dirty status in the eshell prompt." - :group 'eshell-prompt) - - (defface eshell-prompt-symbol-face - '((t (:inherit font-lock-builtin-face))) - "Face for the prompt symbol (e.g. λ) in the eshell prompt." - :group 'eshell-prompt) - - ;; A helper function to abbreviate long directory names. - (defun my-abbreviate-dir (dir) - "Abbreviate DIR to show only the first and the last two components. - For example, \"~/Projects/Learning/C/GeneticsProject/TsodingGenetics\" becomes - \"~/.../GeneticsProject/TsodingGenetics\"." - (let* ((abbrev (abbreviate-file-name dir)) - (components (split-string abbrev "/" t)) ; t omits empty strings - (num-components (length components))) - (if (>= num-components 4) - (concat (car components) "/.../" - (mapconcat #'identity (last components 2) "/")) - abbrev))) - - ;; These are the same helper functions for git information you had. - (defun my-prompt-git-branch () - "Return the current git branch or short commit hash, if available." - (when (and (executable-find "git") - (locate-dominating-file default-directory ".git")) - (with-temp-buffer - (let ((ret (call-process "git" nil t nil "symbolic-ref" "--short" "HEAD"))) - (if (zerop ret) - (string-trim (buffer-string)) - (when (zerop (call-process "git" nil t nil "rev-parse" "--short" "HEAD")) - (string-trim (buffer-string)))))))) - - (defun my-prompt-git-dirty () - "Return a dirty flag (✗ if dirty, ✓ if clean) for the git repository." - (when (my-prompt-git-branch) - (with-temp-buffer - (call-process "git" nil t nil "status" "--porcelain") - (if (> (buffer-size) 0) "✗" "✓")))) - - ;; Finally, build the prompt itself. - (defun eshell-prompt () - "Custom eshell prompt with theme-derived colors and shortened directory path." - (let* ((user (propertize (user-login-name) 'face 'eshell-prompt-user-face)) - (venv (when-let ((venv (getenv "VIRTUAL_ENV"))) - (concat (propertize "(" 'face 'eshell-prompt-venv-face) - (propertize (file-name-nondirectory venv) 'face 'eshell-prompt-venv-face) - (propertize ")" 'face 'eshell-prompt-venv-face)))) - (path (propertize (my-abbreviate-dir (eshell/pwd)) 'face 'eshell-prompt-dir-face)) - (git-branch (my-prompt-git-branch)) - (git-info (when git-branch - (concat " " (propertize "on" 'face 'font-lock-number-face) " " - (propertize git-branch 'face 'eshell-prompt-git-face) - (propertize (my-prompt-git-dirty) 'face 'eshell-prompt-git-dirty-face)))) - (prompt (concat user " " (propertize "in" 'face 'font-lock-number-face) " " - (if venv (concat venv " ") "") - path git-info "\n" - (propertize "λ" 'face 'eshell-prompt-symbol-face) " "))) - prompt)) - - ;; Tell eshell to use our prompt function. - (setq eshell-prompt-function 'eshell-prompt) - (setq eshell-prompt-regexp "^[^λ\n]*λ ") -#+end_src -** Git -Tools for the primary version control system. -*** Magit -A very extensive Git GUI for Emacs. -#+begin_src emacs-lisp - (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. -#+begin_src emacs-lisp - (use-package magit-todos - :after magit - :config (magit-todos-mode 1)) -#+end_src -*** Magit Forge -Work with Git Forges from within Emacs. -#+begin_src emacs-lisp - (use-package forge - :after magit - :config - (setq auth-sources '("~/.authinfo"))) -#+end_src - -** Move Text -Move text up and down with simple keybindings. -#+begin_src emacs-lisp - (use-package move-text - :config - (keymap-global-set "M-p" 'move-text-up) - (keymap-global-set "M-n" 'move-text-down)) -#+end_src - -** Ivy (Counsel) -*** Counsel -Adds better fuzzy completion to many Emacs commands. -#+begin_src emacs-lisp - (use-package counsel - :after ivy - :config - (counsel-mode 1) - (keymap-global-set "C-c f r" 'counsel-buffer-or-recentf) - (keymap-global-set "C-c f f" 'counsel-fzf) - (keymap-global-set "C-c f g" 'counsel-rg) - (keymap-global-set "C-c f l" 'counsel-locate) - (keymap-global-set "C-c s" 'swiper)) -#+end_src -*** Ivy -Adds fuzzy completion to basic Emacs commands. -#+begin_src emacs-lisp - (use-package ivy - :custom - (setq ivy-use-virtual-buffers t) - (setq ivy-count-format "(%d/%d) ") - (setq enable-recursive-minibuffers t) - :config - (ivy-mode 1)) -#+end_src -*** Ivy Rich -Adds Icons to all the new fuzzy completed Emacs commands. -#+begin_src emacs-lisp - (use-package ivy-rich - :after ivy - :init (ivy-rich-mode 1) - :custom - (ivy-virtual-abbreviate 'full - ivy-rich-switch-buffer-align-virtual-buffer t - ivy-rich-path-style 'abbrev)) -#+end_src - -** Simple Modeline -Make the modeline simple by hiding modes. -#+begin_src emacs-lisp - (setq-default mode-line-format (delq 'mode-line-modes mode-line-format) - display-time-24hr-format t - display-time-default-load-average nil) - (display-battery-mode 1) - (display-time-mode 1) -#+end_src - -** Smart Parentheses Pairing -Automatically deals with parentheses in pairs. -#+begin_src emacs-lisp - (use-package smartparens - :hook (prog-mode text-mode markdown-mode) - :config - (require 'smartparens-config) - (sp-use-paredit-bindings)) -#+end_src - -** Undo Tree -Makes undo history like a Git commit tree, very powerful. -#+begin_src emacs-lisp - (use-package undo-tree - :config - (setq undo-tree-history-directory-alist - `(("." . ,(concat user-emacs-directory "undo")))) - (global-undo-tree-mode 1)) -#+end_src - -* Org Mode -** Table of Contents -Automatically generate a table of contents for an Org file. -#+begin_src emacs-lisp - (use-package toc-org - :commands toc-org-enable - :init (add-hook 'org-mode-hook 'toc-org-enable) - :config (setq org-src-window-setup 'current-window)) - (add-hook 'org-mode-hook 'org-indent-mode) -#+end_src - -** 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 - -** Org Agenda -Manage a Todo list, a Calendar, and other organization tools with Org. -#+begin_src emacs-lisp - (setq org-agenda-files '("~/Documents/Org/agenda.org")) - (setq org-fancy-priorities-list '("[A]" "[B]" "[C]") - org-priority-faces - '((?A :foreground "#ff6c6b" :weight bold) - (?B :foreground "#ffff91" :weight bold) - (?C :foreground "#aaffaa" :weight bold))) - (setq org-agenda-custom-commands - '(("v" "View Agenda" - ((tags "PRIORITY=\"A\"" - ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "HIGH PRIORITY:"))) - (tags "PRIORITY=\"B\"" - ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "Medium Priority:"))) - (tags "PRIORITY=\"C\"" - ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "low priority:"))) - (agenda "") - (alltodo ""))))) -#+end_src - -** Org Babel -Setup literate progamming in Org Mode. -*** Config -Don't ask for conformation when evaluating source blocks. -#+begin_src emacs-lisp - (setq org-confirm-babel-evaluate nil) -#+end_src -*** Load Languages -#+begin_src emacs-lisp - (org-babel-do-load-languages - 'org-babel-load-languages - '((python . t) - (lua . t))) -#+end_src - -** Org Tempo -This provides shorthands for Org functions. -#+begin_src emacs-lisp - (require 'org-tempo) -#+end_src - -** Styling -Hide markers for bold, italic and other types of text styling. -#+begin_src emacs-lisp - (setq org-hide-emphasis-markers t) -#+end_src - -* Programming -** Projects -Manage Project folders from within Emacs. -*** Project.el -Use project.el and set shortcuts with prefix "C-c p". -#+begin_src emacs-lisp - (require 'project) - - (keymap-global-set "C-c p b" 'project-list-buffers) - (keymap-global-set "C-c p c" 'project-compile) - (keymap-global-set "C-c p e" 'project-dired) - (keymap-global-set "C-c p f" 'project-find-file) - (keymap-global-set "C-c f p" 'project-find-file) - (keymap-global-set "C-c p g" 'project-find-regexp) - (keymap-global-set "C-c p o" 'project-find-dir) - (keymap-global-set "C-c p p" 'project-switch-project) -#+end_src -*** Disproject -Magit like interface ontop of project.el. -#+begin_src emacs-lisp - (use-package disproject - ;; Replace `project-prefix-map' with `disproject-dispatch'. - :bind ( :map ctl-x-map - ("p" . disproject-dispatch))) -#+end_src -*** Run Project -Run the current project. -#+begin_src emacs-lisp - (require 'project) - - (defvar-local project-binary-name nil) - (defvar-local project-binary-args nil) - (defvar-local project-debugger "gf2") - - (defun get-project-binary-info () - (let* ((project (project-current t)) - (project-root (project-root project)) - (binary-name (or project-binary-name - (downcase - (file-name-nondirectory (directory-file-name project-root))))) - (binary-path (expand-file-name binary-name project-root)) - (args (or project-binary-args ""))) - (list binary-path args))) - - (defun run-project-binary () - (interactive) - (let* ((binary-info (get-project-binary-info)) - (binary-path (nth 0 binary-info)) - (args (nth 1 binary-info)) - (original-compile-command compile-command)) - (if (file-executable-p binary-path) - (progn - (setq compile-command (concat binary-path " " args)) - (unwind-protect - (compile compile-command) - (setq compile-command original-compile-command))) - (error "Binary '%s' not found or not executable in project root" binary-path)))) - - (defun debug-project-binary () - (interactive) - (let* ((binary-info (get-project-binary-info)) - (binary-path (nth 0 binary-info)) - (args (nth 1 binary-info)) - (debugger (or project-debugger "gdb")) - (debug-command (concat debugger " --args " binary-path " " args)) - (original-compile-command compile-command)) - (if (file-executable-p binary-path) - (progn - (setq compile-command debug-command) - (unwind-protect - (compile compile-command) - (setq compile-command original-compile-command))) - (error "Binary '%s' not found or not executable in project root" binary-path)))) - - ;; Mark 'project-binary-name' and 'project-binary-args' as safe for dir-locals. - (put 'project-binary-name 'safe-local-variable #'stringp) - (put 'project-binary-args 'safe-local-variable #'stringp) - - (keymap-global-set "C-c p r" 'run-project-binary) - (keymap-global-set "C-c p d" 'debug-project-binary) -#+end_src - -** LSP -*** LSP Mode -Use language servers to provide info and completion. -#+begin_src emacs-lisp - (use-package lsp-mode - :init - (setq lsp-completion-provider :none - lsp-keymap-prefix "C-c l" - lsp-headerline-breadcrumb-enable nil - lsp-modeline-code-actions-enable nil) - :commands lsp lsp-deferred - :config - (lsp-enable-snippet t)) - - (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 - (use-package yasnippet - :config - (setq yas-snippet-dirs '("~/Documents/snippets")) - (yas-global-mode 1) - (keymap-global-set "M-" 'yas-next-field-or-maybe-expand) - (keymap-global-set "C-'" 'yas-expand)) - - (straight-use-package - '(yasnippet-capf :type git :host github :repo "elken/yasnippet-capf")) - - (use-package yasnippet-treesitter-shim - :straight (:host github :repo "fbrosda/yasnippet-treesitter-shim" - :files ("snippets/*")) - :no-require t - :config - (add-to-list 'yas-snippet-dirs - (straight--build-dir "yasnippet-treesitter-shim"))) -#+end_src - -*** DevDocs -Search documentation from within Emacs. -#+begin_src emacs-lisp - (use-package devdocs - :config - (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 - (require 'treesit) - (use-package treesit-auto - :config - (global-treesit-auto-mode)) - (setq major-mode-remap-alist (treesit-auto--build-major-mode-remap-alist)) -#+end_src - -** Languages -*** C -The Classic. -#+begin_src emacs-lisp - (add-hook 'c-mode-hook #'lsp) - (add-hook 'c-ts-mode-hook #'lsp) - - ;; Use GNU Style in LSP-Mode for C - (with-eval-after-load 'lsp-clangd - (setq lsp-clients-clangd-args '("--header-insertion-decorators=0" "--fallback-style=GNU"))) - - ;; Automatically write header guards - (defun insert-header-guards () - (when (and (buffer-file-name) - (string-match "\\.h\\'" (buffer-file-name))) - (let* ((filename (file-name-nondirectory (buffer-file-name))) - (guard (upcase (replace-regexp-in-string "[^a-zA-Z0-9]" "_" filename)))) - (when (zerop (buffer-size)) ; Only insert if the file is empty - (insert (format "#ifndef %s\n#define %s\n\n\n$0\n\n#endif // %s\n" - guard guard guard)) - (goto-char (point-min)) - (search-forward "$0") - (delete-char -3))))) - - (add-hook 'find-file-hook 'insert-header-guards) -#+end_src -*** Go -A simple C-like language with a GC. -#+begin_src emacs-lisp - (use-package go-mode - :config - (setenv "PATH" (concat (concat - (concat (expand-file-name "/usr/local/go/bin") ":") - (getenv "PATH")))) - (setenv "PATH" (concat (concat - (concat (expand-file-name "~/.go/bin") ":") - (getenv "PATH")))) - - (setq exec-path (append exec-path (list (expand-file-name "/usr/local/go/bin")))) - (setq exec-path (append exec-path (list (expand-file-name "~/.go/bin")))) - (add-hook 'go-mode-hook - (lambda () - (setq tab-width 4))) - :hook - (go-mode . lsp)) -#+end_src -*** Haskell -Functionally Scottish. -#+begin_src emacs-lisp - (use-package haskell-mode - :config - (setenv "PATH" (concat (concat - (concat (expand-file-name "~/.ghcup/bin") ":") - (getenv "PATH")))) - - (setq exec-path (append exec-path (list (expand-file-name "~/.ghcup/bin"))))) - - (use-package lsp-haskell - :hook - (haskell-mode . lsp)) -#+end_src -*** LISP -Programming for Programmers. -#+begin_src emacs-lisp - (use-package sly - :config - (setq inferior-lisp-program "ros -Q run" - browse-url-browser-function '(("hyperspec" . eww-browse-url) ("." . browse-url-default-browser))) - (add-hook 'sly-mrepl-mode-hook 'smartparens-mode) - (add-hook 'sly-mrepl-mode-hook 'company-mode) - (add-hook 'lisp-mode-hook - (lambda () - (define-key lisp-mode-map (kbd "C-c d") 'sly-documentation)))) -#+end_src -*** Lua -A simple Python-like language with many implementations. -#+begin_src emacs-lisp - (straight-use-package - '(lua-mode :type git :host github :repo "immerrr/lua-mode")) - (add-hook 'lua-mode-hook #'lsp) - - (setq lua-indent-nested-block-content-align nil) - (setq lua-indent-close-paren-align nil) - - (defun lua-at-most-one-indent (old-function &rest arguments) - (let ((old-res (apply old-function arguments))) - (if (> old-res lua-indent-level) lua-indent-level old-res))) - - (advice-add #'lua-calculate-indentation-block-modifier - :around #'lua-at-most-one-indent) - - (setq lua-indent-level 2) - (setq lua-electric-flag nil) - (defun lua-abbrev-mode-off () (abbrev-mode 0)) - (add-hook 'lua-mode-hook 'lua-abbrev-mode-off) - (setq save-abbrevs nil) ;; is this still needed? -#+end_src -*** OCaml -Installed with OPAM -#+begin_src emacs-lisp - (setenv "PATH" (concat (concat - (concat (expand-file-name "~/.opam/default/bin") ":") - (getenv "PATH")))) - - (setq exec-path (append exec-path (list (expand-file-name "~/.opam/default/bin")))) - - (use-package tuareg - :hook - (tuareg-mode . lsp)) - - (add-to-list 'load-path "/home/venomade/.opam/default/share/emacs/site-lisp") - (require 'ocp-indent) - (require 'dune) - (require 'utop) -#+end_src -*** Typescript -#+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 zig-mode - :hook (zig-mode . lsp)) -#+end_src - -** Company -A powerful auto-completion utility. -#+begin_src emacs-lisp - (use-package company - :config - (define-key company-active-map (kbd "RET") nil) - (define-key company-active-map (kbd "") nil) - (define-key company-active-map (kbd "C-m") nil) - - ;; TAB indents or selects a completion - (define-key company-active-map (kbd "TAB") #'company-complete-selection) - (define-key company-active-map (kbd "") #'company-complete-selection) - - ;; Use C-p and C-n to navigate the completion list - (define-key company-active-map (kbd "C-p") #'company-select-previous) - (define-key company-active-map (kbd "C-n") #'company-select-next) - - ;; Restore normal tab behavior outside company-mode completions - (define-key company-mode-map (kbd "TAB") #'indent-for-tab-command) - (define-key company-mode-map (kbd "") #'indent-for-tab-command) - - ;; Disable Autocomplete - (setq company-idle-delay 0) - - ;; Disable Case Sensitivity - (setq completion-ignore-case t) - - ;; Bind M-/ to company-complete - (define-key global-map (kbd "M-/") 'company-complete) - (define-key global-map (kbd "M-?") 'dabbrev-expand) - :hook - (prog-mode . company-mode)) - - (use-package company-quickhelp - :config - (company-quickhelp-mode 1) - (setq company-quickhelp-delay 0.5) - (setq company-quickhelp-color-background (face-attribute 'company-tooltip :background)) - (add-hook 'enable-theme-functions - (lambda (_) - (setq company-quickhelp-color-background (face-attribute 'company-tooltip :background))))) - -#+end_src - -** Cape -Add non-lsp completions to the capf. -#+begin_src emacs-lisp - (use-package cape - :ensure t - :config - (keymap-global-set "C-c c" 'cape-prefix-map) - (setq dabbrev-case-fold-search t) - ;;(add-hook 'completion-at-point-functions #'cape-dabbrev) ;; TODO: Check if this is slowing down comments? - (add-hook 'completion-at-point-functions #'cape-file) - (add-hook 'completion-at-point-functions #'cape-elisp-block) - (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. -#+begin_src emacs-lisp - (use-package flycheck - :defer t - :init (global-flycheck-mode 1) - :config - (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc)) - (setq-default flycheck-cppcheck-args "--enable=all") - (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 -Use Icons from Nerd Font to add a little modern spice to Emacs. -#+begin_src emacs-lisp - (use-package nerd-icons - :if (display-graphic-p)) - - (use-package nerd-icons-dired - :hook - (dired-mode . nerd-icons-dired-mode)) - - (use-package nerd-icons-ivy-rich - :init (nerd-icons-ivy-rich-mode 1)) - - (setq welcome-dashboard-use-nerd-icons t) -#+end_src - -** Fonts -*** Set Font -Set font for both Monospace and Proportional text. -#+begin_src emacs-lisp - (defvar fontconf - '((font . "Aporetic Sans Mono") - (size . 11))) - - (set-face-attribute 'variable-pitch nil - :font (cdr (assoc 'font fontconf)) - :height (* (cdr (assoc 'size fontconf)) 10) - :weight 'regular) - - (set-face-attribute 'fixed-pitch nil - :font (cdr (assoc 'font fontconf)) - :height (* (cdr (assoc 'size fontconf)) 10) - :weight 'regular) - - (set-face-attribute 'default nil - :font (cdr (assoc 'font fontconf)) - :height (* (cdr (assoc 'size fontconf)) 10) - :weight 'regular) - - - (add-to-list 'default-frame-alist - `(font . ,(concat (cdr (assoc 'font fontconf)) "-" (number-to-string (cdr (assoc 'size fontconf)))))) - - (set-face-attribute 'font-lock-comment-face nil - :slant 'italic) - - (set-face-attribute 'font-lock-keyword-face nil - :slant 'italic) - - ;;(set-frame-font "-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1" t t) -#+end_src -*** Ligatures -Make ligature symbols out of common function symbols. -#+begin_src emacs-lisp - (dolist (char/ligature-re - `((?- . ,(rx (or (or "-->" "-<<" "->>" "-|" "-~" "-<" "->") (+ "-")))) - (?/ . ,(rx (or (or "/==" "/=" "/>" "/**" "/*") (+ "/")))) - (?* . ,(rx (or (or "*>" "*/") (+ "*")))) - (?< . ,(rx (or (or "<<=" "<<-" "<|||" "<==>" "