Setup nvim for elm-development

This commit is contained in:
2026-08-25 01:56:19 +02:00
parent 1e953f8611
commit ed9c890688
4 changed files with 284 additions and 0 deletions

View File

@@ -76,6 +76,8 @@ for_window [instance="^file_progress"] floating enable
for_window [instance="^arandr"] floating enable resize set width 900
for_window [class="jetbrains-idea" title="splash"] floating enable
for_window [class="^Microsoft Teams - Preview$"] floating enable
for_window [title="^Elm Debugger"] floating enable
for_window [class="^com-intellij-updater-Runner"] floating enable
# If I have opened the nm-openconnect-auth-dialog I set focus by myself,
# otherwise it appeared automatically and I don't want the focus!

View File

@@ -113,6 +113,7 @@ vim.api.nvim_create_autocmd("FileType", {
callback = function()
vim.opt_local.shiftwidth = 4
vim.opt_local.tabstop = 4
vim.opt_local.colorcolumn = "80"
end,
})
-- git

View File

@@ -48,6 +48,7 @@ return {
"terraformls",
"ts_ls",
"vue_ls",
"elmls",
},
})
local vue_language_server_path = vim.fn.expand '$MASON/packages' ..
@@ -122,7 +123,20 @@ return {
filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
})
vim.lsp.config('vue_ls', opts)
vim.lsp.config('elmls', {
capabilities = capabilities,
on_attach = function(client, bufnr)
on_attach(client, bufnr)
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
callback = function ()
vim.lsp.buf.format({ async = false })
end,
})
end,
})
vim.lsp.enable({
"elmls",
"cssls",
"eslint",
"html",

View File

@@ -0,0 +1,267 @@
snippet mod Module definition
module `substitute(substitute(expand('%:r'), '[/\\]','.','g'),'^\%(\l*\.\)\?','','')` exposing (${1})
${0}
snippet imp Import
import ${0:Http}
snippet impe Exposing import
import ${1:Html} exposing (${0:..})
snippet impae Exposing import alias
import ${1:Json.Encode} as ${2:Encode} exposing (${0:Value})
snippet fn Function
${1:fn} : ${2:a} -> ${3:a}
$1 ${4} =
${0}
snippet fnn Bi-Function
${1:fn} : ${2:a} -> ${3:a} -> ${4:a}
$1 ${5} =
${0}
snippet fnnn Tri-Function
${1:fn} : ${2:a} -> ${3:a} -> ${4:a} -> ${5:a}
$1 ${6} =
${0}
snippet var Null-Function
${1:fn} : ${2:a}
$1 =
${0}
snippet case Case
case ${1} of
${2} ->
${0}
snippet - ->
${1} ->
${0}
snippet let Let
let
${1} =
${2}
in
${0}
snippet if If-Else
if ${1} then
${2:${VISUAL}}
else
${0}
snippet ty Type
type ${1:Msg}
= ${0}
snippet tya Type alias
type alias ${1:Model} =
${0}
snippet test Test
test "${1}" <| \_ -> $0
snippet desc Description (Test)
describe "${1}" [ $0 ]
snippet doc Multiline comment
{-| ${0}
-}
snippet p Pipe
|> ${0}
snippet application Elm 0.19 application
module `substitute(substitute(expand('%:r'), '[/\\]','.','g'),'^\%(\l*\.\)\?','','')` exposing (main)
import Browser
import Browser.Navigation as Nav
import Html
import Url
import Url.Parser as Parser exposing ((</>), s)
-- MAIN
main : Program () Model Msg
main =
Browser.application
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
, onUrlRequest = onUrlRequest
, onUrlChange = onUrlChange
}
-- MODEL
type alias Model =
{ key : Nav.Key
, page : Page
}
type Page
= NotFound
| Root
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.none
-- VIEW
view : Model -> Browser.Document Msg
view model =
case model.page of
_ ->
{ title = "Not Found"
, body = [ Html.div [] [ Html.text "Not Found" ] ]
}
-- INIT
init : () -> Url.Url -> Nav.Key -> ( Model, Cmd Msg )
init _ url key =
pageUrl url
{ key = key
, page = NotFound
}
-- UPDATE
type Msg
= NoOp
| UrlRequest Browser.UrlRequest
| UrlChanged Url.Url
update : Msg -> Model -> ( Model, Cmd Msg )
update message model =
case message of
NoOp ->
( model, Cmd.none )
UrlRequest urlRequest ->
case urlRequest of
Browser.Internal url ->
( model, Cmd.none )
Browser.External url ->
( model, Cmd.none )
UrlChanged url ->
pageUrl url model
-- ROUTER
onUrlRequest : Browser.UrlRequest -> Msg
onUrlRequest =
UrlRequest
onUrlChange : Url.Url -> Msg
onUrlChange =
UrlChanged
pageUrl : Url.Url -> Model -> ( Model, Cmd Msg )
pageUrl url model =
let
routeParser =
Parser.oneOf
[ Parser.map Root Parser.top
]
in
case Parser.parse routeParser url of
Just page ->
( { model | page = page }
, Cmd.none
)
Nothing ->
( { model | page = NotFound }
, Cmd.none
)
snippet element Elm 0.18 element
module Main exposing (Model, Msg(..), init, main, subscriptions, update, view)
import Browser
import Html exposing (..)
import Json.Encode
main : Program Flags Model Msg
main =
Browser.element
{ init = init
, update = update
, subscriptions = subscriptions
, view = view
}
type alias Model =
{}
type alias Flags =
Json.Encode.Value
init : Flags -> ( Model, Cmd Msg )
init flags_ =
( {}
, Cmd.none
)
type Msg
= Noop
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Noop ->
( model
, Cmd.none
)
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
view : Model -> Html Msg
view model =
h1 [] [ text "Hello, world!" ]