From 8c29509eb91364c63eeaf891c1f09ef25fc82742 Mon Sep 17 00:00:00 2001
From: rxhfcy <42669366+rxhfcy@users.noreply.github.com>
Date: Thu, 4 Apr 2024 20:32:13 +0300
Subject: [PATCH] Update todo, make README.md prettier
---
macOS version/Asahi Linux Helper/README.md | 497 +++++++++++----------
1 file changed, 268 insertions(+), 229 deletions(-)
diff --git a/macOS version/Asahi Linux Helper/README.md b/macOS version/Asahi Linux Helper/README.md
index 48146ee..1731335 100644
--- a/macOS version/Asahi Linux Helper/README.md
+++ b/macOS version/Asahi Linux Helper/README.md
@@ -1,60 +1,58 @@
-# not a proper README.md yet
+# Not a proper README yet
-## Initial test version:
+## Initial demo version:
-Download: [Asahi Linux Helper.app.zip](https://github.com/rxhfcy/Asahi-Linux-Helper/raw/main/Asahi%20Linux%20Helper/misc/Asahi%20Linux%20Helper.app.zip)
+Download:
+[Asahi Linux Helper.app.zip](./misc/Asahi%20Linux%20Helper.app.zip)
-- self-signed etc but worked for me
-- doesn't actually restart yet
-- doesn't actually do much of anything yet
+- Self-signed
+- Doesn't actually restart the computer yet (mock restart dialog)
+- Actually, doesn't do much of anything yet
+## Screenshots:
-## Random screenshots:
+
+1\. Click "Restart in Linux..." from the menu to restart in Linux next.
+(i.e. restart in Linux this time only without changing the default Startup Disk!)
-![Main menu screenshot](./misc/Menu_Screenshot.png)
-
-Main menu (click "Restart in Linux..." from the menu to load Linux next)
---
-![Restart dialog screenshot](./misc/Restart_Dialog_Screenshot.png)
-
-Restart dialog
-(dialogs use a popover "speech bubble" for technical reasons)
+
+2\. Then click "Restart now!" from the Restart dialog. The system will restart without asking any further questions (if the correct permissions etc are set).
---
-![Preferences dialog screenshot](./misc/Preferences_Screenshot.png)
-
-Preferences dialog (temporary placeholder UI)
+
+Preferences dialog (temporary placeholder UI)
(dialogs use a popover "speech bubble" for technical reasons)
---
-![Change default startup disk dialog](./misc/Change_Default_Screenshot.png)
-
-The app can also be used to change the default Startup Disk directly from the menu
+
+The app can also be used to change the default Startup Disk directly from the menu
(for parity with the future Linux version)
---
-## GitHub project description / "about blurb" (early draft):
-"Asahi Linux Helper": Restart to Asahi Linux this time only (macOS menubar app)"
-(or say something more general?)
+## GitHub project name & description / about blurb (early brainstorming):
+- "Asahi Restart Helper: Restart to Asahi Linux this time only (macOS menubar app)"
+- "Asahi Restart Helper makes it easy to choose which OS / disk will be used to restart
+ (it can also change the default Startup Disk setting)"
+- "Asahi Linux Helper: Restart to/from macOS/Linux (and other Asahi Linux tools)"
+(other options?)
-Asahi Linux Helper (macOS version) is a macOS toolbar app:
-- makes it easy to restart to Asahi Linux from macOS
+Asahi Restart Helper (macOS version) is a macOS toolbar app that:
+- makes it easy to restart in Asahi Linux from macOS
- for parity with Linux version of the app (todo), offers an option to select default Startup Disk from within the app
-- maybe later: make it easier to update m1n1 (?)
+- maybe later: updates m1n1 (by launching the Asahi installer via a special command line argument?)
- maybe later: add other Asahi installer related tasks (launch Asahi installer, etc?)
-- obviously will have to ask for permission before using the Asahi name but that's not relevant for a while
-
+- obviously will have to ask for permission before using the Asahi name but that won't be relevant for a while
-btw wording todo:
+btw:
- update m1n1 or just run the installer?
- something else?
-
## Requirements:
- For Apple silicon Macs only (Asahi Linux is ARM64-only)
- macOS 12.3 or newer
@@ -62,8 +60,6 @@ btw wording todo:
There is also a separate corresponding project for Linux (todo)
-
-
## Project goals:
- The actual point of this app: after using Asahi Linux installer, make it easy to reboot using the "other" OS,
instead of requiring the user to already know the holding-down-the-power-button trick
@@ -74,8 +70,8 @@ There is also a separate corresponding project for Linux (todo)
- Keep it simple
- Use non-technical language (give newbies a chance, experts will know how to use the app regardless of word choices)
- Hide implementation details, but if the user explicitly wants to know how and why, explain in a help dialog:
- - "this app uses Apple's official 'bless' tool with --nextonly to temporarily make eg. Linux load after restarting
- next time (ie. without having to change the default Startup Disk value)"
+ - "this app uses Apple's official 'bless' tool with --nextonly to temporarily make e.g. Linux load after restarting
+ next time (i.e. without having to change the default Startup Disk value)"
- bonus: teach the possibility of using "sudo bless --mount "/Volumes/Asahi Linux" --setBoot --nextonly" in
Terminal.app and then restarting normally -> change OS for next time only
- bonus: teach newbies the essential skill of holding down the power button to get to boot picker (show animation?)
@@ -101,51 +97,22 @@ There is also a separate corresponding project for Linux (todo)
- Don't implement anything that could be considered "scope creep"
- NOTE: is being "Asahi Linux Helper" scope creep: should this be strictly "Restart in Linux" (and "Restart in macOS")?
-```
-read these through, remove obsolete items etc.
-
-TODO:
-
-[x] initial proof-of-concept
- [ ] menu item for each disk, don't ask user for "Linux" disk if several other-than-current-macOS disks:
- [x] "Preferences...": show icon / use helper
- [ ] change default (in-app, implement same in go for Linux! (todo))
- - "Restart in macOS... (default)"
- - "Restart in 'Fedora Linux'..."
- - "Restart in 'Another Linux disk'..."
-
-
-
+----------------------------------------
-[ ] refactor: use helper function for "sudo bless --nextonly"
-[ ] refactor: move functions to separate files?
+# TODO LIST
+## TODO Rating System:
+- **1: Must have.** Critical, must not be omitted.
+- **2: Should have.** Important but not strictly necessary, can be delayed.
+- **3: Could have.** Desirable but not crucial, included if resources allow.
+- **4: Won't have.** Lowest priority, currently not planned.
+## TODO (try to keep list current):
-[ ] show/change current default Startup Disk (in Options)
- - combo box to change default Startup Disk
- - explain that this is what restarting normally uses?
- - reason why in-app: Linux needs this to be in-app anyway, so make experience on Linux vs macOS consistent
-
+- [ ] 2: Make popover close/hide after user clicks "Restart..." and modal password dialog appears
+ - must block all other UI interactions with the app while the dialog is active
-[ ] implement helper app for passwordless sudo bless
- - develop helper app
- - can i use somebody else's work?
- "When you install a helper tool that requires elevated privileges (like using `sudo bless`), it's common to
- install it in the `/Library/PrivilegedHelperTools/` directory."
-
- "Here's an example of how you might install a helper tool:
-
- ```bash
- sudo cp /path/to/your/helper /Library/PrivilegedHelperTools/
- sudo chown root:wheel /Library/PrivilegedHelperTools/helper
- sudo chmod 755 /Library/PrivilegedHelperTools/helper
- ```
- - call with volume name, validate input and don't do anything stupid
-[ ] add separate uninstaller to not leave ugly files and incorrect settings behind?
- - remove helper app
- - clear all prefs (e.g. obsolete "Linux" disk setting for a previous nonextant Asahi installation)?
-[ ] function to list all bootable disks
+- [ ] 1: Function to list every available Startup Disk
- like this or is there a better method?
1) list every /Volumes/ disk
2) this is ugly but maybe tolerable: discard " - Disk" duplicates i.e. out of "Fedora Linux" and
@@ -155,182 +122,254 @@ TODO:
4) because the exact diskXsY name can change, save the UUID and reverse engineer the volume name from there
when necessary, that way renaming the disk doesn't matter
5) disks: macOS (can be identified by macOS having mounted it to /) and whatever remains is "Linux"
-[ ] implement detecting that the user cancelled an ongoing restart
- - before bless command, store "NVRAM before" tmp pref
- - detect cancellation with e.g. a timer and/or checking for user interaction after having chosen to restart
+
+- [ ] 3: Refactor: use separate function for "sudo bless --nextonly" etc
+
+- [ ] 3: Refactor: move some of the functions to separate files?
+
+- [ ] 1: List all disks in main menu, allow booting to any of them
+ - if just macOS and Linux, show "macOS" and "Linux"
+ - if more than 2 disks, list others than "/" (macOS) as full disk names (e.g. "Restart in 'Fedora Linux'...")
+ - show the text "(default)" after current default Startup Disk
+
+- [ ] 1: Make it possible to add app to Login Items
+ - use some else's solution as reference?
+ - if super simple, DIY?
+
+- [ ] 2: Automatically add to / remove from Login Items if pref value disagrees with reality
+
+- [ ] 2: Change current default Startup Disk (submenu)
+ - maybe: in help dialog: explain that changing default startup disk is not needed when using this app?
+ - reason why in-app: Linux needs this to be in-app anyway, so make experience on Linux vs macOS consistent
+
+- [ ] 2: Proper Help dialog
+ - help icon in upper right corner of Preferences or something?
+ - explain what the app does and why
+ - link to Asahi web page (explain that we are not affiliated, at least not yet)?
+
+- [ ] 2: Quit confirmation dialog
+ - reason: user might click accidentally and not realize this removes the icon, explain that
+ - especially if autostart on login not enabled: show a different message and a checkbox to add to Login Items?
+
+- [ ] 2: Privileged helper app for password-free sudo bless
+ - can i use somebody else's work?
+ "When you install a helper tool that requires elevated privileges (like using `sudo bless`), it's common to
+ install it in the `/Library/PrivilegedHelperTools/` directory."
+ "Here's an example of how you might install a helper tool:
+ ```bash
+ sudo cp /path/to/your/helper /Library/PrivilegedHelperTools/
+ sudo chown root:wheel /Library/PrivilegedHelperTools/helper
+ sudo chmod 755 /Library/PrivilegedHelperTools/helper
+ ```
+ - call helper app with volume name, always validate input and don't allow anything stupid or dangerous
+
+- [ ] 2: Automatically install/uninstall privileged helper app if pref disagrees with reality
+
+- [ ] 2: Detect if user cancelled an ongoing restart (i.e. used sudo bless to change --nextonly but didn't restart)
+ - otherwise, next "normal" restart (can be weeks from now!) will be very surprising ("why did the wrong OS load")?
+ - before bless command, store "NVRAM before" variable?
+ - detect cancellation with e.g. a timer and/or checking for user interaction after having already "restarted"
- read previously stored "NVRAM before", compare to "NVRAM now" and undo
-[ ] handle user having manually disabled macOS permission after having already allowed it before
- - after "Restart..." is pressed, before actual bless, perform a dummy action that requires the same permissions
- - if dummy action failed (detect error code or variable), explain and offer link to correct place in
- System Settings (different in macOS 13/14/newer?)
-[ ] handle not having any viable "Linux" disks
- - explain that no "Linux" disk were detected
+
+- [ ] 1: App icon OK?
+ - provide all sizes?
+
+- [ ] 1: Menubar icon OK?
+ - use a "proper" (template?) icon instead that supports macOS dark/light theme?
+
+- [ ] 1: Name of project ok?
+ - "Asahi Restart Helper"?
+ - "Restart in Linux"?
+ - "Asahi Linux Helper"?
+
+- [ ] 2: CLI installer: external apps (e.g. Asahi installer) to silently sudo install the app in an already useful state
+ - require sudo
+ - make app show icon (add to macOS Login Items) --add-to-login-items or something?
+ - make app not ask password (install privileged helper app) --install-privileged-helper-app or something?
+ - make app not ask questions (permission prompt can't be avoided, right?)
+ - [ ] only ask for permission if not called by command line option is --consent-already-given-by-user or something
+ - would this satisfy both the letter and spirit of "the law" and allow automatically
+ - adding app to macOS startup? (yes/no)
+ - installing helper tool? (yes/no)
+
+- [ ] 2: Handle user having manually disabled macOS permission from System Settings (after having allowed it before)
+ - probably needs another pref for "User has given system permission"
+ - to test, always perform dummy action that requires same permissions (after pressing "Restart", before sudo bless)
+ - if the dummy action failed (detect error code or variable), explain and offer link to correct place in
+ System Settings (check if different in macOS 13/14/newer?)
+
+- [ ] 3: Handle not having any other viable disks ("Linux")
+ - why would anyone run the app with just the one OS?
+ - explain that no other disk were detected
- offer to run Asahi Linux installer?
-[ ] implement making the app automatically start at login
- - use some else's solution as reference?
- - if super simple, DYI?
- [ ] implement automatically installing / removing app from macOS startup if the pref value disagrees with reality
-[ ] add a confimation dialog for quitting
-[ ] implement proper Help dialog
-[ ] implement auto updater
+
+- [ ] 2: Test if the app actually works on Intel. There might be e.g. Boot Camp Windows users that might find it useful?
+
+- [ ] 3: Consider showing an error if using Intel ("Asahi" is pointless on Intel: Asahi Linux requires Apple Silicon)
+ - reason: if app is (accidentally?) built Universal, it will not show an error by default
+ - reason why not: corner case
+ - reason why not: maybe the app is accidentally useful for Intel Mac Linux/Windows users too? (test separately)
+
+- [ ] 3: Auto updater
- use someone else's solution as reference?
- - if super simple, DYI?
-[ ] handle other errors (what? where?)
-[ ] application icon OK?
- - provide all sizes
-[ ] menubar icon, is the current one OK?
- - use a "proper" (template?) icon instead that supports macOS dark/light theme properly?
-[ ] tiny technical detail, invisible to users: figure out a way to get rid of "Storyboard" without breaking everything
- - where is it used? something to do with showing the icon in menubar?
- - find and remove all references to Storyboard (leftovers from initially using "Storyboard", not yet "SwiftUI")
- - currently deleting the file destroys everything
-[ ] write documentation (proper README.md, is anything else necessary?)
-[ ] write tests
- - unit tests
- - UI tests
-[ ] is the name of the project ok?
-[ ] wording?
+ - if super simple, DIY?
+
+- [ ] 3: Handle other errors (what? where?)
+
+- [ ] 3: Trivial: Get rid of "Storyboard" in xcode without breaking everything (invisible to users, technical detail)
+ - currently deleting the Storyboard makes the app not work at all for some reason
+ - where is the Storyboard used? Something to do with showing the icon in menubar?
+ - find and remove all references to Storyboard (leftovers from initially using "Storyboard", not yet "SwiftUI")
+
+- [ ] 3: Uninstaller (don't leave privileged helper app and other cruft behind)?
+ - remove privileged helper app
+ - remove from Login Items
+ - clear all prefs
+
+- [ ] 3: Wording/strings ok?
- "Restart in macOS" is the wording Apple's x86_64 Boot Camp uses in the app it adds on Windows
- - I don't want to use "to" or "reboot" (be macOS user friendly, use familiar terminology)
+ - I don't want to use "to" or "reboot" (be macOS-user-friendly, use familiar terminology)
+ - what is the correct amount of detail in text and tooltips?
+ - suggestions for wording/spelling (titles, tooltips)?
-UX POLISH:
-[ ] quit, settings, help etc button placement?
-[ ] quit confirmation
- - if autostart on login not enabled: show a different message and a checkbox to enable autostart
-[ ] Help icon to upper right corner or something?
-[ ] mimic "real" Restart... dialog even more closely?
- - add icon?
- - justify differently
- - etc?
-[ ] wording: what is the correct amount of detail in text and tooltips?
+- [ ] 3: Write documentation
+ - proper README.md
+ - is anything else necessary?
+- [ ] 3: Write tests
+ - Unit tests
+ - might need to sometimes use weird custom mock tests because the app writes to NVRAM, GitHub won't test that
+ - UI tests
-MAYBE todo:
-[ ] is this necessary? ...when the popover is opened for the first time, after the user clicks "Restart in Linux"
- - warn user about the upcoming permission prompt
- - if the pref "user has used the app to restart at least once" is not set
- - btw Dialog text: "“name-of-app.app” wants access to control “System Events.app”. Allowing control will provide
- access to documents and data in “System Events.app”, and to perform actions within that app."
+----------------------------------------
+## 4: WON'T HAVE (not worth it / out of scope / feature creep, revisit this list periodically):
+- [ ] 4: Warn first-time users about the permission prompt (access to control system events, needed for sudo bless)
+ - when user clicks "Restart" the first time (if pref "user has used the app to restart at least once" is not set)
+ - btw Dialog text: "“name-of-app.app” wants access to control “System Events.app”. Allowing control will provide
+ access to documents and data in “System Events.app”, and to perform actions within that app."
-NOT WORTH IT / OUT OF SCOPE / FEATURE CREEP (please revisit this list periodically):
-[ ] DON'T IMPLEMENT: if user tries launching from Finder but the app was already running
- - open settings view
- - reason: maybe user wanted to change settings?
+- [ ] 4: Mimic "real" macOS system Restart... dialog even more closely?
+ - add icon from system dialog?
+ - justify text like in system dialog?
+ - reason why not: current dialog is simple and does the job (impossible to add the "official" checkbox etc)
+
+- [ ] 4: Show something (Open the menu? Open preferences?) if user launches from Finder while app was already running
+ - reason: maybe user is confused and doesn't notice the menubar icon?
- reason why not: corner case, adds code complexity
-[ ] DON'T IMPLEMENT: asking for "Linux" disk
- - show the actual name of the disk instead (eg. "Fedora Linux")
- - if there are several "Linux" disks, list them all separately instead (!)
-[ ] DON'T IMPLEMENT: don't beachball during and immediately after password dialog (i.e. async password dialog)
- - reason why not: would cause potential UI confusion (and add code complexity)?
-[ ] DON'T IMPLEMENT: some kind of first-use-wizard? Hopefully not necessary?
- - reason why not: UX should be good enough to not require wizard
- - reason why not: even an installer is better than a wizard?
-[ ] DON'T IMPLEMENT: if prefs not enabled, try to convince user to enable pref?
+
+- [ ] 4: If prefs not enabled, try to convince user to enable pref?
- show button/checkbox in the main "Restart dialog"?
- don't be deceptive or potentially destructive, users might thinks it's the "normal restart toggle"
(users don't read text on screen)
- - reason: most users would want both checkboxes to be enabled, i.e. passwordless + icon always there?
- - reason why not: annoying + adds complexity, use an installer instead?
-[ ] DON'T IMPLEMENT: show a more user-friendly error if not using Apple Silicon
- - reason why not: corner case
-[ ] DON'T IMPLEMENT: detect and indicate "real" Asahi Linux disks (e.g. detect step2)
+ - reason why not: annoying + adds complexity, use an installer or write to prefs from an external app instead?
+ - reason: most users would want both checkboxes to be enabled, i.e. password-free + show icon on macOS login?
+
+- [ ] 4: Detect and indicate "real" Asahi Linux disks (e.g. detect step2)
- reason why not: fickle and hacky, Asahi Linux installation implementation details may change in the future
-[ ] DON'T IMPLEMENT: different UX if default Startup Disk is already Linux (not macOS)
- - not-passwordless mode: add a "dummy" password dialog anyway so that behavior doesn't need to be altered?
- - reason why not: realistically, harm caused by always writing to NVRAM regardless is insignificant
- (even though theretically NVRAM is stored on
+ - reason why not: what would be the user benefit?
+
+- [ ] 4: Different UX if user chooses to restart to the current default Startup Disk (i.e. sudo bless not necessary)
+ - if privileged helper not installed: instead of sudo bless password dialog, show "dummy" password dialog
+ (instead of "randomly" skipping, to make the experience consistent regardless of Startup Disk setting?)
+ - reason why not: why not just sudo bless anyway, realistically no harm will be caused by always writing to NVRAM
+ (even though technically the flash chip NVRAM is using can wear down if written to infinitely many times)
- reason why not: not useful to annoy the user just to tell them information they already know?
- Completely reasonable to want to always Restart the same way, regardless of today's default Startup Disk option
-
-
-
-
-TODO: Support for retrieving data from external apps:
-- goal: make it possible for Asahi Linux installer to silently install this menubar app in a useful state
- (after asking for user's explicit consent)
-- goal: user experience after user installs the app:
- - macOS menubar icon already always there
- - restarting works without asking for user password (i.e. also install the helper tool)
-[ ] explicitly asks for and transfer user's explicit consent by a pref via "defaults write"
- - install helper app for passwordless operation
- - external apps can sudo start a CLI installer that automatically installs the helper app for passwordless restart
- - would this satisfy both the letter and spirit of "the law" and allow automatically
- - adding app to macOS startup? (yes/no)
- - installing helper tool? (yes/no)
-
-
-Note: Always use UUIDs under the hood if possible, because "human readable" disk names can change
-
-
-Seek external feedback:
-[ ] Is it possible to use the normal macOS "Restart..." dialog?
-[ ] Is it possible to use the system checkbox to reopen windows (from the normal macOS "Restart..." dialog)?
-[ ] Without using a helper app, is it possible to sudo bless without asking for root password?
-[ ] Is there something fundamentally wrong with my approach, or is using sudo bless --nextboot inevitable?
-[ ] Is it possible to add colorful buttons in SwiftUI popovers (e.g. blue, or whatever the macOS preference is)?
-[ ] Any other hints to make the buttons / other controls more "native-looking"?
-[ ] Code review: fix code / style / other things?
-[ ] What is the best compromise for the actual name of "Restart in Linux" (restart, reboot, in, to...)?
-[ ] Menubar icon? Can I use someone else's work?
- [ ] separate dark/light mode icons?
-[ ] App icon? Can I use someone else's work?
-[ ] is it allowed for an external application to explicitly ask for and "transfer" user's consent
- to add *another* app to macOS startup?
-[ ] UI text proofreading by a native speaker, preferably someone with the relevant technical knowledge
-[ ] UX testing by both beginners and experts? Suggestions?
-[ ] (this ship has already sailed and popovers are better?)
- Show dialogs / new windows instead of popovers without focus problems?
- Are there legitimate macOS / SwiftUI bugs?
-
-
-Manual tests (test when releasing a new version and after major macOS updates, or something):
-[ ] Build real releases with ARM64 / macOS 13.5+ only?
- (GitHub automation currently requires x86_64 and macOS 12.7.4 support)
-[ ] Does the app actually succesfully do what it promises
- - Restart in Linux or macOS
- - Able to change default Startup Disk
+ (completely reasonable to want to always Restart the same way, no matter what current default Startup Disk is)
+
+- [ ] 4: If not enough room for main menu to open normally, open menu to left side of icon
+ - reason why not: the popover already doesn't move to the left when it opens either, so UI "non-standard" anyway
+ - reason why not: already tried to "fix", fixing seems difficult and error-prone
+
+- [ ] 4: (I DON'T LIKE THIS) Ask user for "Linux" disk and only show that as "Restart in Linux..."
+ - better: if only one Linux disk (should be overwhelming majority): just show "Restart in Linux..."
+ - better: if several, list actual names of all disks in the main menu (e.g. "Restart in 'Fedora Linux'..., etc")
+
+- [ ] 4: (HOPEFULLY NOT NECESSARY) Some kind of first-use-wizard?
+ - reason why not: UX should be good enough to not require wizard
+ - reason why not: hopefully this can be achieved by settings prefs by external apps or preferences dialog
+ - reason why not: even an installer is better than a wizard?
+
+
+
+----------------------------------------
+
+# Seek external feedback:
+
+- [ ] Is it possible to utilize the normal macOS "Restart..." dialog?
+- [ ] Is it possible to use the system checkbox to reopen windows (from the normal macOS "Restart..." dialog)?
+- [ ] Without using a helper app, is it possible to sudo bless without asking for root password?
+- [ ] Is there something fundamentally wrong with my approach, or is using sudo bless --nextboot inevitable?
+- [ ] Is it possible to add colorful buttons in SwiftUI popovers (e.g. blue, or whatever the macOS preference is)?
+- [ ] Any other hints to make the buttons / other controls more "native-looking"?
+- [ ] Code review: fix code / style / other things?
+- [ ] What is the best compromise for the actual name of "Restart in Linux" (restart, reboot, in, to...)?
+- [ ] Menubar icon? Can I use someone else's work?
+ - [ ] separate dark/light mode icons?
+- [ ] App icon? Can I use someone else's work?
+- [ ] Is it allowed for an external application to explicitly ask for and "transfer" user's consent
+ - [ ] To add *this* app to Login Items?
+ - [ ] To make *this* app install a privileged helper tool?
+ - [ ] OK to "transfer" consent via prefs (defaults write) or command line options for installer?
+- [ ] UI text proofreading by a native speaker, preferably someone with the relevant technical knowledge
+- [ ] UX testing by both beginners and experts? Suggestions?
+- [ ] Are the macOS/SwiftUI bugs I saw when opening dialogs/windows from a menubar icon easily avoidable?
+ - Consider removing this item, the popovers are kind of nice and dialogs may no longer be necessary...
+
+
+----------------------------------------
+
+## Manual tests (test when releasing a new version and after major macOS updates, or something):
+
+- [ ] Can some of these somehow be tested with normal Unit Tests / UI Tests?
+- [ ] Build real releases with ARM64 / macOS 13.5+ only?
+ - GitHub automation currently requires x86_64 and macOS 12.7.4 support
+ - Maybe not worth the hassle to change these only for releases?
+- [ ] What does running on Intel do? Show an error message?
+ - Test if the app is accidentally useful for Intel Mac Linux / Windows users?
+- [ ] Does the app actually successfully do what it promises
+ - Able to restart to any OS (all Linux and macOS disks)
+ - Able to change the default Startup Disk
- Other "Asahi Linux" tasks?
-[ ] Is cancelling before restarting handled gracefully?
-[ ] What does a brand new user (never used the app before) see? Is everything as simple and as automatic as possible?
-[ ] How many OS level permissions does the app require? Can fewer permission be used somehow?
-[ ] What happens if the default Startup Disk is already Linux/macOS and user tries to use the app to restart to that?
+- [ ] Is cancelling before restarting handled gracefully?
+- [ ] What does a brand new user (never used the app before) see? Is everything as simple and as automatic as possible?
+- [ ] How many OS level permissions does the app require? Can fewer permission be used somehow?
+- [ ] What happens if the default Startup Disk is already Linux/macOS and user tries to use the app to restart to that?
Is the UX different? Should it be? (No? Just always have consistent UX?)
-[ ] What happens if there are no "Linux" disks available?
-[ ] What happens if the previously selected "Linux" disk can't be found?
-[ ] What happens if the user cancels an active restarting process? Is NVRAM now different than before?
-[ ] Does everything look fine with both macOS themes (Dark/Light)?
-[ ] Does "System Options / Accessibility / Keyboard settings / Keyboard navigation" behave like in other apps?
-[ ] Does making the app start at login work?
-[ ] Change all preferences in Options and restart the app, does reading/writing prefs work correctly?
-[ ] Does the app specifically ask user to make the app start at login if unset? Should it?
-[ ] Does the app automatically make reality agree with what value "auto start at login" pref has?
-[ ] Does the app automatically (password prompt needed though??) make reality agree with what the pref
+- [ ] What happens if there are no "Linux" disks available?
+- [ ] What happens if the previously selected "Linux" disk can't be found?
+- [ ] What happens if the user cancels an active restarting process? Is NVRAM now different than before?
+- [ ] Does everything look fine with both macOS themes (Dark/Light)?
+- [ ] Does "System Options / Accessibility / Keyboard settings / Keyboard navigation" behave like in other apps?
+- [ ] Does making the app start at login work?
+- [ ] Change all preferences in Options and restart the app, does reading/writing prefs work correctly?
+- [ ] Does the app specifically ask user to make the app start at login if unset? Should it?
+- [ ] Does the app automatically make reality agree with what value "auto start at login" pref has?
+- [ ] Does the app automatically (password prompt needed though??) make reality agree with what the pref
"install helper app" currently is?
-[ ] Does the app entry in both "Login Items" lists look OK (not a random mysterious name, use actual name of the app)
-[ ] Is behaviour acceptable compared to current macOS "Restart..." dialog / workflow?
-[ ] Has something changed in macOS? Does something need to be changed in this app to compensate?
-[ ] Has a relevant Asahi Linux related thing changed? Does something need to be changed in this app to compensate?
-[ ] The actual point of this project: Does using the Asahi Linux installer automatically add "Restart in Linux"
+- [ ] Does the app entry in both "Login Items" lists look OK (not a random mysterious name, use actual name of the app)
+- [ ] Is behavior acceptable compared to current macOS "Restart..." dialog / workflow?
+- [ ] Has something changed in macOS? Does something need to be changed in this app to compensate?
+- [ ] Has a relevant Asahi Linux related thing changed? Does something need to be changed in this app to compensate?
+- [ ] The actual point of this project: Does using the Asahi Linux installer automatically add "Restart in Linux"
menubar icon in a useful state (no password prompt or other stupid questions asked)?
-
--------------------------------------
+----------------------------------------
(move tasks here after completing them)
-DONE:
-[x] Make the app appear in the menubar (as an icon)
-[x] Don't show Dock icon (the app is strictly menubar-only)
-[x] Make clicking the menubar icon open a popover (because using "normal" dialogs and windows caused problems)
-[x] Placeholder app icon
-[x] Placeholder menubar icon
-[x] Settings popover (not a real "window")
-[x] Localization support (English is the only actual localization implemented for now)
-[x] Initial list of manual tests (perform before every app release, and after new major macOS releases)
-[x] "Quit" (in Options)
-[x] Remove weird extra "tooltip" behind real tooltips
-
-
-```
+## DONE:
+
+- [x] Make the app appear in the menubar (as an icon)
+- [x] Don't show Dock icon (the app is strictly menubar-only)
+- [x] Implement popover functionality (because using "normal" dialogs and windows caused problems)
+- [x] Placeholder app icon
+- [x] Placeholder menubar icon
+- [x] Basic localization support (English is the only actual localization implemented for now)
+- [x] Initial list of manual tests (perform before every app release, and after new major macOS releases)
+- [x] "Quit" (in Options)
+- [x] Remove weird extra "tooltip" behind real tooltips
+- [x] initial proof-of-concept for menu / popover hybrid UI
+- [x] "Preferences...": placeholder for "show icon" / "password-free"
+- [x] Placeholder testing support (dummy Unit Tests and UI Tests, currently only test if the app builds and launches)