I was looking to manage my server through Cockpit project.

I would like to also be able to use cockpit-machines to manage VMs on my server. However, that module is not present in nixpkgs.

I know how to deploy simple-ish packages, however, JS based projects seem a bit complicated.

https://github.com/cockpit-project/cockpit-machines

Could you suggest a starting point with this project? Any similar modules I can refer to?

  • Atemu@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    Step #1 is to package cockpit-machines. I haven’t dared to touch JS with even a 10ft pole, so I can’t help you with that but I can highly recommend to take a look at how similar packages work and copy what they do.

    Modules come later; they just wire up some packaged applications to the system. I’m not familiar with the project but it seems like cockpit-machines is a UI of sorts? If it doesn’t need any system configuration, you don’t need a module. Users would just install the package, run the binary and that’s that.
    Modules are for when you need e.g. a system service like a web server.

  • Matej@matejc.com
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    You need a Nix package first, so how I do this for NodeJS is, clone your NodeJS repo to your computer, then you will need node2nix to package it (https://github.com/svanderburg/node2nix). You can use this command inside the repo: node2nix -18 (you need to specify -18 since by default node 14 is being used). After nix files are generated, you can test it by running nix-build -A package. Now that you have this done, its time to make a PR to nixpkgs and add all the new generated files along with package.json and that is your cockpit-machines package.

    After all this its time to integrate into existing cockpit NixOS module. I would maybe add a new option called extraPackages, like so: services.cockpit.extraPackages = [ pkgs.cockpit-machines ];. On the other hand you could just add option to the cockpit package option, like so: services.cockpit.package = pkgs.cockpit.override { enableCockpitMachines = true; };. This might be easier.

    ps: I havent tested this so ask if you have any difficulties