MatthewCroughan / nixinate

Another NixOS Deployment Tool - Nixinate your systems 🕶️
MIT License
240 stars 32 forks source link

Add support for deploying to a Mac (nix-darwin) #34

Open srid opened 1 year ago

srid commented 1 year ago

I'd like the ability to deploy to a remote Mac machine (say, a Mac mini server) from another Mac machine (say, a Macbook). nixinate is currently hardcoded to deploy nixosConfigurations.foo using nixos-rebuild. To support macOS, we simply want to be able to deploy darwinConfigurations.foo using darwin-rebuild; everything else would more or less remain the same. Here's a demonstration of what this looks like without nixinate:

      apps.aarch64-darwin.deploy-macmini = {
        type = "app";
        program =
          let
            host = "user@192.52.31.40";
            machine = "myhost";
            pkgs = inputs.nixpkgs.legacyPackages.aarch64-darwin;
          in
          (pkgs.writeShellApplication {
            name = "deploy-to-mac";
            text = ''
              set -x
              nix copy ${self} --to ssh://${host}
              ssh -t ${host} "darwin-rebuild switch --flake ${self}#${machine}"
            '';
          }) + "/bin/deploy-to-mac";
      };
srid commented 1 year ago

Better,

''
nix copy ${self} --to ssh://${host}
nix copy ${self.darwinConfigurations.${machine}.system} --to ssh://${host}
ssh -t ${host} "${self.darwinConfigurations.${machine}.system}/sw/bin/darwin-rebuild switch --flake ${self}#${machine}"
'';
MatthewCroughan commented 1 year ago

Buy me a Mac, and I'll do it. I may remove macOS from the supported system until I own the hardware.

Avoid running nix copy multiple times. Anyone using password protected keys, such as a Yubikey, will have to type in their credentials once each time you perform a nix copy.

Fresheyeball commented 1 year ago

@MatthewCroughan feel free to use the Mac in our data center

MatthewCroughan commented 1 year ago

@Fresheyeball Sorry. I cannot test or develop on a remote Mac, since purity cannot be guaranteed. I also would not have control over the HCI agent that runs on it. If I'm going to develop this at all, I need a real Mac locally. I can probably do x86_64-darwin in a VM myself though. What if I want to change the Base OS version in order to test it? I can't do that with the data center Mac. It is not sufficient.

Fresheyeball commented 1 year ago

I think it's sufficient to get some support. Maybe not everything, but you are welcome to it regardless, and I do think it's enough for this one issue.

MatthewCroughan commented 1 year ago

I won't add features that I can't test into Nixinate. See the full integration test I have for Nixinate here, I wouldn't be able to replicate this on Darwin. https://github.com/MatthewCroughan/nixinate/tree/master/tests