diff --git a/nvim/dotfiles/lspconfigs/html.lua b/nvim/dotfiles/lspconfigs/html.lua
new file mode 100644
index 0000000..6b9fec4
--- /dev/null
+++ b/nvim/dotfiles/lspconfigs/html.lua
@@ -0,0 +1,34 @@
+local utils = require('kdotfiles.utils')
+local lspconfig = require('lspconfig')
+
+local file = '/etc/os-release'
+local lines = utils.lines_from(file)
+local os_name = utils.get_os(lines)
+
+local cmd = (os_name == 'arch') and {'vscode-html-languageserver'} or {'vscode-html-language-server'}
+vim.list_extend(cmd, {'--stdio'})
+
+lspconfig['html'].setup({
+ cmd = cmd;
+ filetypes = {'html', 'handlebars', 'htmldjango', 'blade'};
+ completion_menu_label = 'HTML';
+
+ settings_scopes = {'html', 'css', 'javascript'};
+ settings = {
+ html = {
+ format = {
+ enable = false;
+ };
+ };
+ javascript = {
+ format = {
+ enable = false;
+ };
+ };
+ css = {
+ format = {
+ enable = false;
+ };
+ };
+ };
+})
diff --git a/nvim/dotfiles/lspconfigs/php.lua b/nvim/dotfiles/lspconfigs/php.lua
new file mode 100644
index 0000000..fd01699
--- /dev/null
+++ b/nvim/dotfiles/lspconfigs/php.lua
@@ -0,0 +1,3 @@
+local lspconfig = require('lspconfig')
+
+lspconfig['phpactor'].setup({})
diff --git a/nvim/lua/kdotfiles/utils.lua b/nvim/lua/kdotfiles/utils.lua
new file mode 100644
index 0000000..17e4ef7
--- /dev/null
+++ b/nvim/lua/kdotfiles/utils.lua
@@ -0,0 +1,28 @@
+local M = require('dotfiles.autoload')('kdotfiles.utils')
+
+function M.file_exists(file)
+ local f = io.open(file, "rb")
+ if f then f:close() end
+ return f ~= nil
+end
+
+function M.lines_from(file)
+ if not M.file_exists(file) then return {} end
+ lines = {}
+ for line in io.lines(file) do
+ lines[#lines + 1] = line
+ end
+ return lines
+end
+
+function M.get_os(lines)
+ os_name = "Unknown"
+ for k,v in pairs(lines) do
+ if string.match(v, "^ID=") then
+ os_name = string.sub(v, 4)
+ end
+ end
+ return os_name
+end
+
+return M