stow: manage symlinks in both MacOS and Ubuntuhomebrew-bundle: backup and restore brew packages (MacOS only)
/up.sh: entry point to setting up a new machine. This script just setup log output and delegates actual installation to install.sh/install.sh: main installation script/scripts: contains scripts used during setting up a new machine. Scripts in this folder follows convention of prepending platform in front of script names. E.g.macos-brew-bundle.shis only applicable to MacOS,ubuntu-fasd.shis only applicable to Ubuntu andcommon-stow.shis applicable to both MacOS and Ubuntu/link: contains settings to be stowed during stow step. These settings are also organized according to platforms./tests: contains tests written usingbats/libs: git submodules for bats and additional libraries used during testing/others: contains additional setup/tools that are not covered ininstall.shscript and need to be setup manually. E.g. iterm settings
Neovim configuration lives in /link/common/dot-config/.config/nvim/ (symlinked to ~/.config/nvim/).
It uses lazy.nvim for plugin management and supports multiple profiles via Neovim's NVIM_APPNAME feature.
nvimLoads the default config from ~/.config/nvim/. Contains general settings, keymaps, and language-agnostic plugins.
Profiles extend the base config with language-specific plugins (LSP, treesitter grammars, etc.). Each profile is a separate directory under ~/.config/ that prepends the base config to its runtime path.
Launch a profile with:
NVIM_APPNAME=nvim-<profile> nvimAvailable profiles:
| Profile | NVIM_APPNAME |
Config path | Includes |
|---|---|---|---|
| Elixir | nvim-elixir |
nvim-elixir/ |
Next LS (elixir-tools.nvim), treesitter for elixir/heex/eex |
| Go | nvim-go |
nvim-go/ |
gopls via go.nvim (ray-x), treesitter for go/gomod/gosum/gowork, auto goimports on save |
-
Create
~/.config/nvim-<name>/init.luathat prepends the base config and passes extra specs:vim.g.mapleader = " " local base = vim.fn.expand("~/.config/nvim") vim.opt.rtp:prepend(base) vim.opt.rtp:append(base .. "/after") require("init").setup({ lazy = { extra_specs = { { import = "profile-plugins" }, }, } }) vim.cmd("filetype plugin indent on") vim.cmd("syntax on") vim.cmd("colorscheme gruvbox")
-
Add language-specific plugin specs under
lua/profile-plugins/in the new config directory.
To setup a new machine using this dotfiles repo, follow instructions at Wiki