top | item 44485649

Show HN: A Language Server Implementation for SystemD Unit Files

78 points| arandomhuman | 7 months ago |github.com

A Language Server Protocol (LSP) implementation for systemd unit files, providing editing support with syntax highlighting, diagnostics, autocompletion, and documentation made with rust.

23 comments

order

Splizard|7 months ago

This is great! There's way too many arcane text file formats (configs, Dockerfiles, workflow definitions etc) without any sort of fast feedback loop on type-safety, documentation etc.

We need more projects like this and if a system is running SystemD, this needs to be enabled and integrated with any LSP-supported editors.

arandomhuman|7 months ago

Thanks for the positive feedback! The documentation needs a bit of revision, but I agree there's a lot of configuration file formats that should be supported with language servers that might not necessarily have rich AST parsing as part of their contents.

rendaw|7 months ago

I made a Systemd competitor/aternative https://github.com/andrewbaxter/puteron that uses JSON for everything. The advantage to JSON is you can use a `$schema` key at the top and vscode will do autocompletion, error checking, and (I think) documentation from the jsonschema automatically without needing a custom language server. The power of standards at work!

I was trying to figure out why Systemd decided on their ini-like syntax instead of something like xml or json or whatever. I thought maybe it was some standard that existed at the time, but it does seem to be a custom format unique to systemd...

self_awareness|7 months ago

INI format a "custom format"? It dates back to the 80's, maybe before that. It was the configuration file format.

OTOH, JSON is not a configuration file format. XML might be, but when I see what some people do with XML (ant, maven builds are abysmal, although msbuild xml files are managable), then I want to click unsubscribe.

I'm happy they've chosen INI.

hamandcheese|7 months ago

I was not involved in the decision, but my guess is:

- xml is too verbose

- yaml is too complex + suffers some notable ambiguity issues

- json isn't very human friendly (no comments)

- a lot of other linux software uses ini-style configs

arandomhuman|7 months ago

That’s very interesting, but systemd is pretty pervasive I really don’t think it’s going anywhere anytime soon for better or for worse. Language servers aren't just adopted in vscode, other editors use them in fact. I am not a VS Code user myself, but I appreciate their implementation of the language server protocol, they did a fantastic job with that.

dijit|7 months ago

the ini-like format was used a lot on DOS and Windows internals.

Which was a part of the argumentation that systemd is very “windows” in its design (hidden errors, monolithic design).

Definitely an established standard (though not as much on UNIX-likes) before TOML was popularised though.

mgartin|7 months ago

This is great, I will definitely try it out in emacs. We use systemd unit files for quite a few things. During holidays I'm planning to uprade my setup to use more lsp and llm! Thanks!

andy_nguyen|7 months ago

[deleted]

arandomhuman|7 months ago

I think a user of _not_ neovim they'd have to implement their own js client. I honestly can't say much but with INI style formatting it's been mostly based on contstants rather than abstract syntax tree parsing which is unique and a bit of a problem in its own right. I haven't implemented a language server before so this was a learning experience, but I was very pleasantly surprised how adding it to my neovim configuration was. I am hoping at some point it's added to "mason" so it's even easier.

I would create a vscode client, but I am not really very familiar with that ecosystem. Welcoming anyone to implement this in any other editors. This is just the language server implementation with no assumption regarding clients.