function! vimrc#feat#format#execute(cmd) abort
  let shell = &shell
  setglobal shell=sh
  let view = winsaveview()
  try
    let result = systemlist(a:cmd, getline(1, '$'))
    if v:shell_error != 0
      for l in result
        echoerr l
      endfor
      return
    endif
    call deletebufline('%', 1, '$')
    call setline(1, result)
  finally
    call winrestview(view)
    let &shell = shell
  endtry
endfunction

let s:ft = {}
let s:ft['lua'] = 'stylua -'
let s:ft['nix'] = 'nixfmt'

function vimrc#feat#format#execute_filetype() abort
  call vimrc#feat#format#execute(s:ft[&filetype])
endfunction