Basic features:
- installable as package, even on non-nixos
- is named
nixos - is written in C++ and binds to Nix C++ library (or maybe Haskell? Nodejs? What you think?)
- autocomplete, ncurses, Nix 2.0
- commit to Git by default on each rebuild
First I'll describe existing nixos-rebuild switches, that should go into new command:
nixos-rebuild switch->nixos rebuild,nixos rebuild --boot --activatenixos-rebuild boot->nixos rebuild --no-activatenixos-rebuild test->nixos rebuild --no-bootnixos-rebuild build->nixos buildnixos-rebuild dry-x->nixos x --dry,nixos x --testnixos-rebuild --build-host->nixos --build-onnixos-rebuild --target-host->nixos --deploy-tonixos-rebuild switch --rollback->nixos rollbackopens a curses screen so you can select what to rollback to
Then, existing commands should be intergrated. All of those should work on non-NixOS:
nixos-option X->nixos option X- show all options ->
nixos options, the output should be compatible with FZF and fast nixos-generate-config->nixos config --default, outputs to stdoutnixos-install->nixos installnixos-container XXX->nixos container XXXnixos-version->nixos -v,nixos --version.nixos -vvshould be same asnix-info- lustrate thing ->
nixos lustrate --confirm-lustrate
And finally, some external projects should be merged in:
nixos-infect->nixos infect --confirm-infect, alsonixos infect --confirm-infect --deploy-to
Anything missed?
Shouldn's
nixos buildrather benixos rebuild --no-activate --no-boot? Or should the subcommand just bebuildfor every action? Due tu the declarative nature of nix it should not matter if something is built or rebuilt, right?Can you give a reasoning why
--build-onis better than--build-host? Same for--target-hostand--deploy-to.I don't think the rollback command should require an interactive dialog. I think good shell completion should suffice.
(A nice feature for this subcommand would be if you could give dates, git commitmessages or other fuzzy stuff to find the version you want to rollback to, this could then be interactive if ambigious, but there should be a flag to suppress interactive stuff for scripting.)
I'm also not sure if your proposed git workflow will work for everyone. My config has a lot of submodules for example, so the nixos command would also have to recurse these. A less intrusive way would be to warn if the config is in a git repository and has uncommited changes, but again, only parts of the configuration could be inside a git repository...
If it should eventually replace the current interface you would also need to check if all functionality that tools like nixops currently use the nixos-... is possible with the new nixos command.
The
nixos-versioncommand should becomenixos versionor even betternixos infoas withnixos --versionI would expect to get the version of the nixos tool and not the currently used channels.I'm looking forward to only using Nix 2.0 tools, so i would be happy to test this 👍