1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "nex", about = "Package manager for nix-darwin + homebrew")]
#[command(version)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
/// Path to the nix-darwin repo (overrides auto-discovery)
#[arg(long, global = true, env = "NEX_REPO")]
pub repo: Option<PathBuf>,
/// Hostname for darwin-rebuild (overrides auto-detect)
#[arg(long, global = true, env = "NEX_HOSTNAME")]
pub hostname: Option<String>,
/// Show what would change without editing or switching
#[arg(long, global = true)]
pub dry_run: bool,
}
#[derive(Subcommand)]
pub enum Command {
/// Set up nix-darwin + homebrew on this Mac
Init {
/// Clone an existing nix-darwin repo instead of scaffolding
#[arg(long)]
from: Option<String>,
},
/// Capture all installed brew packages into the nex config
Adopt,
/// Install packages
Install {
/// Force install as a Nix package (skip auto-resolution)
#[arg(long)]
nix: bool,
/// Install as a Homebrew cask (GUI app)
#[arg(long)]
cask: bool,
/// Install as a Homebrew formula
#[arg(long)]
brew: bool,
/// Package names
packages: Vec<String>,
},
/// Remove packages
Remove {
/// Remove a Homebrew cask
#[arg(long)]
cask: bool,
/// Remove a Homebrew formula
#[arg(long)]
brew: bool,
/// Package names
packages: Vec<String>,
},
/// Search nixpkgs for a package
Search {
/// Search query
query: String,
},
/// List all declared packages
List,
/// Update flake inputs and switch
Update,
/// Rebuild and activate
Switch,
/// Rollback to previous generation
Rollback,
/// Try a package in an ephemeral nix shell
Try {
/// Package to try
package: String,
},
/// Identify brew packages that can migrate to nix
Migrate,
/// Check and fix common configuration issues
Doctor,
/// Update nex itself to the latest release
SelfUpdate,
/// Preview what would change
Diff,
/// Garbage collect nix store
Gc,
}