This commit is contained in:
Max Goedjen 2025-09-01 16:27:15 -07:00
parent 4d84621b3d
commit ea96dd88eb
No known key found for this signature in database
2 changed files with 135 additions and 106 deletions

View File

@ -3049,7 +3049,7 @@
"Getting Started" : { "Getting Started" : {
}, },
"If you don't known what shell you use and haven't changed it, you're probably using `zsh`." : { "If you don't known what shell you use and haven't changed it, you're probably using `%@`." : {
}, },
"If you're trying to authenticate with an SSH server or authenticating with a service like GitHub over SSH, configure your SSH client." : { "If you're trying to authenticate with an SSH server or authenticating with a service like GitHub over SSH, configure your SSH client." : {

View File

@ -5,13 +5,12 @@ struct IntegrationsView: View {
@Environment(\.dismiss) private var dismiss @Environment(\.dismiss) private var dismiss
@State private var selectedInstruction: ConfigurationFileInstructions? @State private var selectedInstruction: ConfigurationFileInstructions?
private let instructions = Instructions()
private let socketPath = (NSHomeDirectory().replacingOccurrences(of: Bundle.hostBundleID, with: Bundle.agentBundleID) as NSString).appendingPathComponent("socket.ssh") as String
var body: some View { var body: some View {
NavigationSplitView { NavigationSplitView {
List(selection: $selectedInstruction) { List(selection: $selectedInstruction) {
ForEach(instructions) { group in ForEach(instructions.instructions) { group in
Section(group.name) { Section(group.name) {
ForEach(group.instructions) { instruction in ForEach(group.instructions) { instruction in
Text(instruction.tool) Text(instruction.tool)
@ -22,6 +21,33 @@ struct IntegrationsView: View {
} }
} }
} detail: { } detail: {
IntegrationsDetailView(selectedInstruction: $selectedInstruction)
}
.onAppear {
selectedInstruction = instructions.gettingStarted
}
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Done") {
dismiss()
}
.styled
}
}
}
}
struct IntegrationsDetailView: View {
@Binding private var selectedInstruction: ConfigurationFileInstructions?
private let instructions = Instructions()
init(selectedInstruction: Binding<ConfigurationFileInstructions?>) {
_selectedInstruction = selectedInstruction
}
var body: some View {
if let selectedInstruction { if let selectedInstruction {
switch selectedInstruction.id { switch selectedInstruction.id {
case .gettingStarted: case .gettingStarted:
@ -30,20 +56,26 @@ struct IntegrationsView: View {
Text("Most tools will try and look for SSH keys on disk in `~/.ssh`. To use Secretive, we need to configure those tools to talk to Secretive instead.") Text("Most tools will try and look for SSH keys on disk in `~/.ssh`. To use Secretive, we need to configure those tools to talk to Secretive instead.")
} }
Section { Section {
NavigationLink(value: ssh) { Group {
Text("If you're trying to authenticate with an SSH server or authenticating with a service like GitHub over SSH, configure your SSH client.") Text("If you're trying to authenticate with an SSH server or authenticating with a service like GitHub over SSH, configure your SSH client.")
.onTapGesture {
self.selectedInstruction = instructions.ssh
} }
NavigationLink(value: zsh) { VStack(alignment: .leading, spacing: 5) {
VStack(alignment: .leading) {
Text("If you're trying to configure anything your command line runs to use Secretive, configure your shell.") Text("If you're trying to configure anything your command line runs to use Secretive, configure your shell.")
Text("If you don't known what shell you use and haven't changed it, you're probably using `zsh`.") Text("If you don't known what shell you use and haven't changed it, you're probably using `\(instructions.defaultShell.tool)`.")
.font(.caption2) .font(.caption2)
.foregroundStyle(.secondary)
} }
.onTapGesture {
self.selectedInstruction = instructions.defaultShell
} }
NavigationLink(value: git) {
Text("If you're trying to sign your git commits, set up Git Signing.") Text("If you're trying to sign your git commits, set up Git Signing.")
.onTapGesture {
self.selectedInstruction = instructions.git
} }
}
.foregroundStyle(.link)
} header: { } header: {
Text("What Should I Configure?") Text("What Should I Configure?")
} }
@ -117,25 +149,22 @@ struct IntegrationsView: View {
.formStyle(.grouped) .formStyle(.grouped)
} }
} }
}
.onAppear {
selectedInstruction = instructions.first?.instructions.first
}
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Done") {
dismiss()
}
.styled
}
} }
} }
private struct Instructions {
private let socketPath = (NSHomeDirectory().replacingOccurrences(of: Bundle.hostBundleID, with: Bundle.agentBundleID) as NSString).appendingPathComponent("socket.ssh") as String
var defaultShell: ConfigurationFileInstructions {
zsh
} }
extension IntegrationsView { var gettingStarted: ConfigurationFileInstructions = ConfigurationFileInstructions("Getting Started", id: .gettingStarted)
fileprivate var ssh: ConfigurationFileInstructions { var ssh: ConfigurationFileInstructions {
ConfigurationFileInstructions( ConfigurationFileInstructions(
tool: "SSH", tool: "SSH",
configPath: "~/.ssh/config", configPath: "~/.ssh/config",
@ -145,7 +174,7 @@ extension IntegrationsView {
) )
} }
fileprivate var git: ConfigurationFileInstructions { var git: ConfigurationFileInstructions {
ConfigurationFileInstructions( ConfigurationFileInstructions(
tool: "Git Signing", tool: "Git Signing",
steps: [ steps: [
@ -176,7 +205,7 @@ extension IntegrationsView {
) )
} }
fileprivate var zsh: ConfigurationFileInstructions { var zsh: ConfigurationFileInstructions {
ConfigurationFileInstructions( ConfigurationFileInstructions(
tool: "zsh", tool: "zsh",
configPath: "~/.zshrc", configPath: "~/.zshrc",
@ -184,10 +213,10 @@ extension IntegrationsView {
) )
} }
fileprivate var instructions: [ConfigurationGroup] { var instructions: [ConfigurationGroup] {
[ [
ConfigurationGroup(name:"Integrations", instructions: [ ConfigurationGroup(name:"Integrations", instructions: [
ConfigurationFileInstructions("Getting Started", id: .gettingStarted), gettingStarted
]), ]),
ConfigurationGroup( ConfigurationGroup(
name: "System", name: "System",