diff --git a/.config/i3/config b/.config/i3/config index f3d9a1c..44c2995 100644 --- a/.config/i3/config +++ b/.config/i3/config @@ -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! diff --git a/.config/nvim/lua/config/defaults.lua b/.config/nvim/lua/config/defaults.lua index bb82996..6d49e8b 100644 --- a/.config/nvim/lua/config/defaults.lua +++ b/.config/nvim/lua/config/defaults.lua @@ -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 diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua index 63a872b..86c0d16 100644 --- a/.config/nvim/lua/plugins/lsp.lua +++ b/.config/nvim/lua/plugins/lsp.lua @@ -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", diff --git a/.config/nvim/snippets/elm.snippets b/.config/nvim/snippets/elm.snippets new file mode 100644 index 0000000..0a42514 --- /dev/null +++ b/.config/nvim/snippets/elm.snippets @@ -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!" ]