Skip to content

Commit 8098a70

Browse files
shokinnkradalby
authored andcommitted
Feature tvos documentation (juanfont#2226)
* Add usage documentation for tvOS * lint and format * Change admonition to mkdocs flavoured style * fix typos * Update hscontrol/templates/apple.go Co-authored-by: Kristoffer Dalby <[email protected]> * change outer quoting for where quoting in-text is used --------- Co-authored-by: Kristoffer Dalby <[email protected]>
1 parent 723380a commit 8098a70

File tree

3 files changed

+169
-35
lines changed

3 files changed

+169
-35
lines changed

docs/about/clients.md

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ headscale.
1313
| Android | Yes (see [docs](../usage/connect/android.md)) |
1414
| macOS | Yes (see [docs](../usage/connect/apple.md#macos) and `/apple` on your headscale for more information) |
1515
| iOS | Yes (see [docs](../usage/connect/apple.md#ios) and `/apple` on your headscale for more information) |
16+
| tvOS | Yes (see [docs](../usage/connect/apple.md#tvos) and `/apple` on your headscale for more information) |

docs/usage/connect/apple.md

+20
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,23 @@ tailscale login --login-server <YOUR_HEADSCALE_URL>
4747
- Under `Custom Login Server`, select `Add Account...`
4848
- Enter the URL of your headscale instance (e.g `https://headscale.example.com`) and press `Add Account`
4949
- Follow the login procedure in the browser
50+
51+
## tvOS
52+
53+
### Installation
54+
55+
Install the official Tailscale tvOS client from the [App Store](https://apps.apple.com/app/tailscale/id1470499037).
56+
57+
!!! danger
58+
59+
**Don't** open the Tailscale App after installation!
60+
61+
### Configuring the headscale URL
62+
63+
- Go Settings (the apple tvOS settings) > Apps > Tailscale
64+
- Under `ALTERNATE COORDINATION SERVER URL`, select `URL`
65+
- Enter the URL of your headscale instance (e.g `https://headscale.example.com`) and press `OK`
66+
- Return to the tvOS Home screen
67+
- Open Tailscale
68+
- Click the button `Install VPN configuration` and confirm the appearing popup by clicking the `Allow` button
69+
- Scan the QR code and follow the login procedure

hscontrol/templates/apple.go

+148-35
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ func Apple(url string) *elem.Element {
1717
headerOne("headscale: iOS configuration"),
1818
headerTwo("GUI"),
1919
elem.Ol(nil,
20-
elem.Li(nil,
20+
elem.Li(
21+
nil,
2122
elem.Text("Install the official Tailscale iOS client from the "),
22-
elem.A(attrs.Props{attrs.Href: "https://apps.apple.com/app/tailscale/id1470499037"},
23+
elem.A(
24+
attrs.Props{
25+
attrs.Href: "https://apps.apple.com/app/tailscale/id1470499037",
26+
},
2327
elem.Text("App store"),
2428
),
2529
),
@@ -31,27 +35,47 @@ func Apple(url string) *elem.Element {
3135
elem.Li(nil,
3236
elem.Text("Open Settings on the iOS device"),
3337
),
34-
elem.Li(nil,
35-
elem.Text(`Scroll down to the "third party apps" section, under "Game Center" or "TV Provider"`),
38+
elem.Li(
39+
nil,
40+
elem.Text(
41+
`Scroll down to the "third party apps" section, under "Game Center" or "TV Provider"`,
42+
),
3643
),
3744
elem.Li(nil,
3845
elem.Text("Find Tailscale and select it"),
3946
elem.Ul(nil,
40-
elem.Li(nil,
41-
elem.Text(`If the iOS device was previously logged into Tailscale, switch the "Reset Keychain" toggle to "on"`),
47+
elem.Li(
48+
nil,
49+
elem.Text(
50+
`If the iOS device was previously logged into Tailscale, switch the "Reset Keychain" toggle to "on"`,
51+
),
4252
),
4353
),
4454
),
45-
elem.Li(nil,
46-
elem.Text(fmt.Sprintf(`Enter "%s" under "Alternate Coordination Server URL"`,url)),
55+
elem.Li(
56+
nil,
57+
elem.Text(
58+
fmt.Sprintf(
59+
`Enter "%s" under "Alternate Coordination Server URL"`,
60+
url,
61+
),
62+
),
4763
),
48-
elem.Li(nil,
49-
elem.Text("Restart the app by closing it from the iOS app switcher, open the app and select the regular sign in option "),
64+
elem.Li(
65+
nil,
66+
elem.Text(
67+
"Restart the app by closing it from the iOS app switcher, open the app and select the regular sign in option ",
68+
),
5069
elem.I(nil, elem.Text("(non-SSO)")),
51-
elem.Text(". It should open up to the headscale authentication page."),
70+
elem.Text(
71+
". It should open up to the headscale authentication page.",
72+
),
5273
),
53-
elem.Li(nil,
54-
elem.Text("Enter your credentials and log in. Headscale should now be working on your iOS device"),
74+
elem.Li(
75+
nil,
76+
elem.Text(
77+
"Enter your credentials and log in. Headscale should now be working on your iOS device",
78+
),
5579
),
5680
),
5781
headerOne("headscale: macOS configuration"),
@@ -61,39 +85,63 @@ func Apple(url string) *elem.Element {
6185
),
6286
elem.Pre(nil,
6387
elem.Code(nil,
64-
elem.Text(fmt.Sprintf("tailscale login --login-server %s",url)),
88+
elem.Text(fmt.Sprintf("tailscale login --login-server %s", url)),
6589
),
6690
),
6791
headerTwo("GUI"),
6892
elem.Ol(nil,
69-
elem.Li(nil,
70-
elem.Text("ALT + Click the Tailscale icon in the menu and hover over the Debug menu"),
93+
elem.Li(
94+
nil,
95+
elem.Text(
96+
"ALT + Click the Tailscale icon in the menu and hover over the Debug menu",
97+
),
7198
),
7299
elem.Li(nil,
73100
elem.Text(`Under "Custom Login Server", select "Add Account..."`),
74101
),
75-
elem.Li(nil,
76-
elem.Text(fmt.Sprintf(`Enter "%s" of the headscale instance and press "Add Account"`,url)),
102+
elem.Li(
103+
nil,
104+
elem.Text(
105+
fmt.Sprintf(
106+
`Enter "%s" of the headscale instance and press "Add Account"`,
107+
url,
108+
),
109+
),
77110
),
78111
elem.Li(nil,
79112
elem.Text(`Follow the login procedure in the browser`),
80113
),
81114
),
82115
headerTwo("Profiles"),
83-
elem.P(nil,
84-
elem.Text("Headscale can be set to the default server by installing a Headscale configuration profile:"),
116+
elem.P(
117+
nil,
118+
elem.Text(
119+
"Headscale can be set to the default server by installing a Headscale configuration profile:",
120+
),
85121
),
86-
elem.P(nil,
87-
elem.A(attrs.Props{attrs.Href: "/apple/macos-app-store", attrs.Download: "headscale_macos.mobileconfig"},
122+
elem.P(
123+
nil,
124+
elem.A(
125+
attrs.Props{
126+
attrs.Href: "/apple/macos-app-store",
127+
attrs.Download: "headscale_macos.mobileconfig",
128+
},
88129
elem.Text("macOS AppStore profile "),
89130
),
90-
elem.A(attrs.Props{attrs.Href: "/apple/macos-standalone", attrs.Download: "headscale_macos.mobileconfig"},
131+
elem.A(
132+
attrs.Props{
133+
attrs.Href: "/apple/macos-standalone",
134+
attrs.Download: "headscale_macos.mobileconfig",
135+
},
91136
elem.Text("macOS Standalone profile"),
92137
),
93138
),
94139
elem.Ol(nil,
95-
elem.Li(nil,
96-
elem.Text("Download the profile, then open it. When it has been opened, there should be a notification that a profile can be installed"),
140+
elem.Li(
141+
nil,
142+
elem.Text(
143+
"Download the profile, then open it. When it has been opened, there should be a notification that a profile can be installed",
144+
),
97145
),
98146
elem.Li(nil,
99147
elem.Text(`Open System Preferences and go to "Profiles"`),
@@ -106,43 +154,108 @@ func Apple(url string) *elem.Element {
106154
),
107155
),
108156
elem.P(nil, elem.Text("Or")),
109-
elem.P(nil,
110-
elem.Text("Use your terminal to configure the default setting for Tailscale by issuing:"),
157+
elem.P(
158+
nil,
159+
elem.Text(
160+
"Use your terminal to configure the default setting for Tailscale by issuing:",
161+
),
111162
),
112163
elem.Ul(nil,
113164
elem.Li(nil,
114165
elem.Text(`for app store client:`),
115-
elem.Code(nil,
116-
elem.Text(fmt.Sprintf(`defaults write io.tailscale.ipn.macos ControlURL %s`,url)),
166+
elem.Code(
167+
nil,
168+
elem.Text(
169+
fmt.Sprintf(
170+
`defaults write io.tailscale.ipn.macos ControlURL %s`,
171+
url,
172+
),
173+
),
117174
),
118175
),
119176
elem.Li(nil,
120177
elem.Text(`for standalone client:`),
121-
elem.Code(nil,
122-
elem.Text(fmt.Sprintf(`defaults write io.tailscale.ipn.macsys ControlURL %s`,url)),
178+
elem.Code(
179+
nil,
180+
elem.Text(
181+
fmt.Sprintf(
182+
`defaults write io.tailscale.ipn.macsys ControlURL %s`,
183+
url,
184+
),
185+
),
123186
),
124187
),
125188
),
126189
elem.P(nil,
127190
elem.Text("Restart Tailscale.app and log in."),
128191
),
129192
headerThree("Caution"),
130-
elem.P(nil,
131-
elem.Text("You should always download and inspect the profile before installing it:"),
193+
elem.P(
194+
nil,
195+
elem.Text(
196+
"You should always download and inspect the profile before installing it:",
197+
),
132198
),
133199
elem.Ul(nil,
134200
elem.Li(nil,
135201
elem.Text(`for app store client: `),
136202
elem.Code(nil,
137-
elem.Text(fmt.Sprintf(`curl %s/apple/macos-app-store`,url)),
203+
elem.Text(fmt.Sprintf(`curl %s/apple/macos-app-store`, url)),
138204
),
139205
),
140206
elem.Li(nil,
141207
elem.Text(`for standalone client: `),
142208
elem.Code(nil,
143-
elem.Text(fmt.Sprintf(`curl %s/apple/macos-standalone`,url)),
209+
elem.Text(fmt.Sprintf(`curl %s/apple/macos-standalone`, url)),
210+
),
211+
),
212+
),
213+
headerOne("headscale: tvOS configuration"),
214+
headerTwo("GUI"),
215+
elem.Ol(nil,
216+
elem.Li(
217+
nil,
218+
elem.Text("Install the official Tailscale tvOS client from the "),
219+
elem.A(
220+
attrs.Props{
221+
attrs.Href: "https://apps.apple.com/app/tailscale/id1470499037",
222+
},
223+
elem.Text("App store"),
224+
),
225+
),
226+
elem.Li(
227+
nil,
228+
elem.Text(
229+
"Open Settings (the Apple tvOS settings) > Apps > Tailscale",
230+
),
231+
),
232+
elem.Li(
233+
nil,
234+
elem.Text(
235+
fmt.Sprintf(
236+
`Enter "%s" under "ALTERNATE COORDINATION SERVER URL"`,
237+
url,
238+
),
144239
),
145240
),
241+
elem.Li(nil,
242+
elem.Text("Return to the tvOS Home screen"),
243+
),
244+
elem.Li(nil,
245+
elem.Text("Open Tailscale"),
246+
),
247+
elem.Li(nil,
248+
elem.Text(`Select "Install VPN configuration"`),
249+
),
250+
elem.Li(nil,
251+
elem.Text(`Select "Allow"`),
252+
),
253+
elem.Li(nil,
254+
elem.Text("Scan the QR code and follow the login procedure"),
255+
),
256+
elem.Li(nil,
257+
elem.Text("Headscale should now be working on your tvOS device"),
258+
),
146259
),
147260
),
148261
)

0 commit comments

Comments
 (0)