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: +Main menu screenshot
+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) +Restart dialog screenshot
+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 screenshot
+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 +Change default startup disk dialog
+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)