From 541564775acc1860eddf15afab135f00a8fb0ac7 Mon Sep 17 00:00:00 2001 From: Rob Harbaugh Date: Wed, 22 Apr 2026 10:45:41 -0400 Subject: [PATCH] Split laptop/work into independent stow packages with shared/ base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove work/laptop detection logic from nvim and emacs configs; each package now has a self-contained init that requires no runtime checks - Create shared/ stow package containing nvim/init.lua, emacs/init.el, common-dev-settings.el, org-bindings.el, tmux, ghostty, and ranger - Rename laptop-languages.lua / work-languages.lua → languages.lua in each package; shared/init.lua uses require('languages') generically - Rename work-dev-settings.el → dev-settings.el to match laptop naming - Expand work/ to include the full set of dev tools (tmux, ghostty, ranger, emacs, neovim) without email/calendar tooling - Add Makefile with `make laptop` and `make work` targets (each runs a single `stow shared ` invocation) Co-Authored-By: Claude Sonnet 4.6 --- Makefile | 7 ++++ .../{laptop-languages.lua => languages.lua} | 8 +++-- .../.config/emacs/common-dev-settings.el | 0 {laptop => shared}/.config/emacs/init.el | 11 +------ .../.config/emacs/org-bindings.el | 0 {laptop => shared}/.config/ghostty/config | 0 {laptop => shared}/.config/nvim/init.lua | 33 +++---------------- .../.config/ranger/colorschemes/catppuccin.py | 0 {laptop => shared}/.config/ranger/rc.conf | 0 {laptop => shared}/.config/tmux/tmux.conf | 0 .../{work-dev-settings.el => dev-settings.el} | 6 ++-- .../lua/{work-languages.lua => languages.lua} | 6 ++-- 12 files changed, 24 insertions(+), 47 deletions(-) create mode 100644 Makefile rename laptop/.config/nvim/lua/{laptop-languages.lua => languages.lua} (65%) rename {laptop => shared}/.config/emacs/common-dev-settings.el (100%) rename {laptop => shared}/.config/emacs/init.el (92%) rename {laptop => shared}/.config/emacs/org-bindings.el (100%) rename {laptop => shared}/.config/ghostty/config (100%) rename {laptop => shared}/.config/nvim/init.lua (95%) rename {laptop => shared}/.config/ranger/colorschemes/catppuccin.py (100%) rename {laptop => shared}/.config/ranger/rc.conf (100%) rename {laptop => shared}/.config/tmux/tmux.conf (100%) rename work/.config/emacs/{work-dev-settings.el => dev-settings.el} (91%) rename work/.config/nvim/lua/{work-languages.lua => languages.lua} (77%) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fb36f8b --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +.PHONY: laptop work + +laptop: + stow shared laptop + +work: + stow shared work diff --git a/laptop/.config/nvim/lua/laptop-languages.lua b/laptop/.config/nvim/lua/languages.lua similarity index 65% rename from laptop/.config/nvim/lua/laptop-languages.lua rename to laptop/.config/nvim/lua/languages.lua index 16debd6..0820ddb 100644 --- a/laptop/.config/nvim/lua/laptop-languages.lua +++ b/laptop/.config/nvim/lua/languages.lua @@ -1,5 +1,7 @@ --- Loaded by init.lua when work-languages.lua is absent (laptop stow only). --- Mirrors dev-settings.el: C/C++, Go, Rust, DAP. +-- Laptop language pack: C/C++, Go, Rust, LaTeX, DAP. +-- Loaded by shared/init.lua via require('languages'). + + return { servers = { clangd = {}, @@ -13,5 +15,5 @@ return { c = { 'clang_format' }, cpp = { 'clang_format' }, }, - tools = { 'clang-format' }, + tools = { 'clang-format', 'codelldb' }, } diff --git a/laptop/.config/emacs/common-dev-settings.el b/shared/.config/emacs/common-dev-settings.el similarity index 100% rename from laptop/.config/emacs/common-dev-settings.el rename to shared/.config/emacs/common-dev-settings.el diff --git a/laptop/.config/emacs/init.el b/shared/.config/emacs/init.el similarity index 92% rename from laptop/.config/emacs/init.el rename to shared/.config/emacs/init.el index 2e06596..5f1a112 100644 --- a/laptop/.config/emacs/init.el +++ b/shared/.config/emacs/init.el @@ -152,17 +152,8 @@ (directory-files-recursively "~/org" "\\.org$") nil))) -(defun rh/wsl-p () - (and (eq system-type 'gnu/linux) - (file-exists-p "/proc/version") - (with-temp-buffer - (insert-file-contents "/proc/version") - (string-match-p "microsoft" (buffer-string))))) - (rh/load-user-file "org-bindings.el") (rh/load-user-file "common-dev-settings.el") -(if (rh/wsl-p) - (rh/load-user-file "work-dev-settings.el") - (rh/load-user-file "dev-settings.el")) +(rh/load-user-file "dev-settings.el") (rh/load-user-file "latex-settings.el") (rh/load-user-file "custom.el") diff --git a/laptop/.config/emacs/org-bindings.el b/shared/.config/emacs/org-bindings.el similarity index 100% rename from laptop/.config/emacs/org-bindings.el rename to shared/.config/emacs/org-bindings.el diff --git a/laptop/.config/ghostty/config b/shared/.config/ghostty/config similarity index 100% rename from laptop/.config/ghostty/config rename to shared/.config/ghostty/config diff --git a/laptop/.config/nvim/init.lua b/shared/.config/nvim/init.lua similarity index 95% rename from laptop/.config/nvim/init.lua rename to shared/.config/nvim/init.lua index 3b8ad39..9b90bec 100644 --- a/laptop/.config/nvim/init.lua +++ b/shared/.config/nvim/init.lua @@ -5,14 +5,7 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = '\\' -- vimtex uses \ll, \lv, etc. vim.g.have_nerd_font = true --- work-languages.lua (work stow) → work mode; laptop-languages.lua → laptop mode. --- The two are mutually exclusive: work mode suppresses laptop languages. -local _work = {} -pcall(function() _work = require('work-languages') end) -local _lang = {} -if not next(_work) then - pcall(function() _lang = require('laptop-languages') end) -end +local _lang = require('languages') ------------------------------------------------------------------------------- -- Options @@ -270,7 +263,6 @@ require('lazy').setup({ ensure_installed = (function() local t = { 'bash', 'json', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'vim', 'vimdoc', 'yaml' } vim.list_extend(t, _lang.parsers or {}) - vim.list_extend(t, _work.parsers or {}) return t end)(), auto_install = true, @@ -387,8 +379,7 @@ require('lazy').setup({ opts = { formatters_by_ft = vim.tbl_extend('force', { lua = { 'stylua' } }, - _lang.formatters or {}, - _work.formatters or {} + _lang.formatters or {} ), format_on_save = { timeout_ms = 500, lsp_fallback = true }, }, @@ -472,15 +463,11 @@ require('lazy').setup({ }, }, }, - _lang.servers or {}, - _work.servers or {} + _lang.servers or {} ) require('mason-tool-installer').setup({ - ensure_installed = vim.list_extend( - vim.list_extend({ 'stylua' }, _lang.tools or {}), - _work.tools or {} - ), + ensure_installed = vim.list_extend({ 'stylua' }, _lang.tools or {}), }) require('mason-lspconfig').setup({ @@ -501,7 +488,6 @@ require('lazy').setup({ -------------------------------------------------------------------------- { 'mfussenegger/nvim-dap', - cond = function() return not next(_work) end, dependencies = { { 'rcarriga/nvim-dap-ui', @@ -557,22 +543,11 @@ require('lazy').setup({ }, }, - -- install codelldb via mason (laptop only) - { - 'williamboman/mason.nvim', - cond = function() return not next(_work) end, - opts = function(_, opts) - opts.ensure_installed = opts.ensure_installed or {} - vim.list_extend(opts.ensure_installed, { 'codelldb' }) - end, - }, - -------------------------------------------------------------------------- -- LaTeX (AUCTeX + latexmk + zathura equivalent) -------------------------------------------------------------------------- { 'lervag/vimtex', - cond = function() return not next(_work) end, lazy = false, init = function() vim.g.vimtex_view_method = 'zathura' diff --git a/laptop/.config/ranger/colorschemes/catppuccin.py b/shared/.config/ranger/colorschemes/catppuccin.py similarity index 100% rename from laptop/.config/ranger/colorschemes/catppuccin.py rename to shared/.config/ranger/colorschemes/catppuccin.py diff --git a/laptop/.config/ranger/rc.conf b/shared/.config/ranger/rc.conf similarity index 100% rename from laptop/.config/ranger/rc.conf rename to shared/.config/ranger/rc.conf diff --git a/laptop/.config/tmux/tmux.conf b/shared/.config/tmux/tmux.conf similarity index 100% rename from laptop/.config/tmux/tmux.conf rename to shared/.config/tmux/tmux.conf diff --git a/work/.config/emacs/work-dev-settings.el b/work/.config/emacs/dev-settings.el similarity index 91% rename from work/.config/emacs/work-dev-settings.el rename to work/.config/emacs/dev-settings.el index d5b31bf..254043c 100644 --- a/work/.config/emacs/work-dev-settings.el +++ b/work/.config/emacs/dev-settings.el @@ -1,4 +1,4 @@ -;;; work-dev-settings.el --- Work/WSL development environment +;;; dev-settings.el --- Work development environment (C#, TypeScript, JavaScript, CSS, HTML) ;;; C# ;; LSP server: dotnet tool install -g csharp-ls @@ -58,5 +58,5 @@ (css-ts-mode . prettier-mode) (html-ts-mode . prettier-mode))) -(provide 'work-dev-settings) -;;; work-dev-settings.el ends here +(provide 'dev-settings) +;;; dev-settings.el ends here diff --git a/work/.config/nvim/lua/work-languages.lua b/work/.config/nvim/lua/languages.lua similarity index 77% rename from work/.config/nvim/lua/work-languages.lua rename to work/.config/nvim/lua/languages.lua index 9d111dc..f45a752 100644 --- a/work/.config/nvim/lua/work-languages.lua +++ b/work/.config/nvim/lua/languages.lua @@ -1,5 +1,7 @@ --- Loaded by init.lua when this file exists (work stow package active). --- Mirrors work-dev-settings.el: C#, TypeScript, JavaScript, CSS, HTML + Prettier. +-- Work language pack: C#, TypeScript, JavaScript, CSS, HTML, Prettier. +-- Loaded by shared/init.lua via require('languages'). + + return { servers = { ts_ls = {}, -- handles TypeScript, TSX, JavaScript, JSX