Bug fixes
======
* 62 is now fixed. There might be some edge cases left with it (especially absolute paths etc). But the overall idea was to slim down `Profile()` and `Application()` to not use `Imported()`, since it caused additional (separated) logic to handle profiles and paths.
* In junction with the above, `list_profiles()` now supports remote profiles as well. With the limitation that there needs to be a "package" database over profiles. Parsing HTML pages for files isn't what we're here for. But this enables smoother finding of profiles in general. The drawback currently is that `guided` will show up.
* `list_profiles()` now cache found result to avoid being noisy against HTTP endpoints *(as well as being able to manipulate it in `__main__.py` pre and post listing profiles)*
* MAC addresses are now lowered before comparing on both profile level as well as listed MAC addresses.
* `find_installation_script()` has been merged into `Script()` for a more unified experience.
* `archinstall.output.log()` now checks if `logfile` is defined, otherwise no output is attempted to any log handles.
* Fixed 63 - Issues installing package groups
* Numerous edge cases in [examples/guided.py](examples/guided.py) where some default options caused `KeyError` at certain points if left empty.
* Empty locale *(very first question)* caused a hang because loadkeys will enter some form of interactive mode if no option is given.
* Tweaked the *module* mode by centralizing the *"find"* logic.
* Replaced `exec()` logic with the `importlib` logic again to preserve line numbers in subsequent files.
* Created a `Script` class that takes care of *some* of the import/execution logic, it takes content and not filenames.
* Fixed a bunch of issues in [examples/guided.py](examples/guided.py) that caused issues, namely 61 where lists were given where strings were supposed to be etc.
* Issue/Help documentation has been updated to contain the latest changes in terms of logs and submitting issues.
* 43 / 55 - Added a configuration overview before formatting *(the formatting can be paused with Ctrl-C to paus and view the config)*
* 57 - Fix minor issues like typos and code style violations.
* 59 - Relative paths causing issues, should be fixed with a `os.chdir()` in module mode.
* Added some more doc-strings
* Added error handling for invalid packages in `examples/guided.py`. Re-asks the user for correct packages rather than crashing half way through the installation
* Added a JSON serializer that can handle *some* of archinstalls objects.
New features
=========
* Added network configuration option via `Installer().configure_nic()` which helps to set up a interface inside a installation. *(in the long run, perhaps add a similar thing to the live medium?)*
* Supports **DHCP** and **static IP** configurations *(limited, but there are two options at least)*
* TODO: Show current IP-address to make it easier to evaluate which interface to configure
* `find_examples()` have been merged in/replaced by `list_profiles()` which handles multiple use cases and being a bit more flexible.
* `list_profiles()` now looks for profiles in `archinstall.storage['PROFILE_PATH']`, `archinstall.storage['UPSTREAM_URL']/archinstall.storage['PROFILE_DB']` for profiles. Which enables dynamic lookups some what.
* `Script.localize_path()` now converts remote paths into a temporary file under `/tmp/` *(We gotta keep an eye out here so /tmp/ isn't to small or locked in size or something)*.
* Added a `MAC` -> `iface` lookup as well, even tho that wasn't hard previously, having a function call is more easily readable.
* Added a `Systemd` and `Networkd` handlers *(based on `Ini()` class)*, which is a basic helper to create INI files for Systemd services and network configurations.
* Logging has been improved, and installation log files are now created under `~/.cache/archinstall`. This is also where individual worker-logs are stored in case more detailed information needs to be gathered for support cases. Logs contain a "snapshot" of the configuration chosen as well as the individual outputs by the client *(this will be improved over time, but should serve as a good starting point)*.
* Modified the Arch Linux package `archinstall` so that `python -m archinstall $` is being called instead of hardcoding it to `python -m archinstall guided`.
* Calling archinstall with argument `<profile>` which can be a remote URL or a full path *(not strictly hardcoded to look in ./examples)* is now supported.
* Added `archinstall.validate_package_list()` to validate a list of package names. This will help early-checks for finding any issue with the given package names from a user. So that we can throw errors early on, and not half way into the installation when the user most likely has stopped watching for output.
* Added `profiles/desktop.py` which acts as a desktop-selector, so users can *slightly* more easily find and install a desktop environment. Currently there's only three supported desktop environments: `[gnome', 'kde', 'awesome']`.
* Added a `archinstall.storage` for session storage. Profiles etc can store things in here, which will persist between executions *(since profiles have a pre-installation import and execution, and a during-installation import and execution to help with asking users questions. But in between, the session is lost on purpose)*.