Archinstall

Latest version: v2.8.0

Safety actively analyzes 638388 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 6 of 12

2.2.0

Not secure
**Known Issues:**
* Partitioning still has issues with certain layouts. **Workaround:** Manually creating partitions and selecting *"use /mnt as is"* or *"Re-use partitions"* *(after a valid file system was created on the manually created partitions)* will solve most issues. Wiping the desired drive before running archinstall is also a workaround for now but remember to backup your data! Work is already underway to correct this, but will not make it in time for this release, follow the progress here: 426
* Dual-Boot with Windows works, but there's an issue with Windows creating a very small `/boot` partition which causes issues, please track the progress here: 527
* 536: The output from `pacman` *(via `pacstrap` also)* looks broken/corrupt/garbage - This is a cosmetic issue only, and installs work fine. Will be fixed!

Top New Features
==============

* Archinstall now supports `GRUB` as a secondary boot loader. It's **still experimental**, so any issues would be appreciated if they got reported.
* Moved the IRC channel from FreeNode to LiberaChat
* `archinstall.Installer()` *(and subsequently the guided installer)* now supports selecting kernels
* `archinstall.Installer()` now supports modifying kernel parameters and other `mkinitcpio` related stuff
* `archinstall.Installer().pacstrap()` now shows a "progress bar" of what's going on
* Archinstall now features a multi-selection mode thanks to `archinstall.generic_multi_select()` - which will help users select multiple options. We've begun by allowing for selecting multiple kernels, but in the future more options that support multiple choices, such as multiple mirror selection will be introduced.
* Archinstall supports loading configuration from a JSON file, if you wish to re-use a setup. We also ship a [example](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/examples/config-sample.json) JSON file, *(**warning**: It does use `/dev/sda` in the example)*. The JSON structure that is shown on screen during installation and in `/var/log/archinstall/install.log` is valid configuration and can be re-used. There's also an example with [additional custom commands](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/examples/custom-command-sample.json) that we support in the `--config` structure, which isn't produced by the guided installer log output.
* The guided installer now allows you to optionally activate `NTP` if a time-zone was specified
* A very rudimentary `runas` has been added to `archinstall.Installer().arch_chroot()`, beware that a any quotations might break this function call as it's *experimental* for now. There is also no error checks if the user you try to run exists or not, so make sure to create the user first. Future improvements will be made here.
* `archinstall.Installer().mkinitcpio()` has been added, which can be called after modifications to `Installer().MODULES` or `.HOOKS` have been made.
* `archinstall.Installer().minimal_installation()` now intalls Intel and AMD `ucode` binaries by default.
* Archinstall's guided installer now has a `--advanced` flag, which will allow you to unlock certain additional configuration questions, such as system language. *(because how the `/etc/locale.conf` and `localectl list-locales` work, there's no way to get the full list of supports locales, so you will have to know which locale to write in order for this to work, hence the `--advanced` flag requirement)*
* Keyboard map selection now translates in to `X11`-desktops as well. This thanks to https://github.com/archlinux/archinstall/issues/147#issuecomment-812945222 *(We've moved to `localectl` for setting locales, which vastly improves reliability but also locks us into systemd more than ever)*
* Archinstall will now identify as `ArchInstall` for most of it's web requests, such as getting the mirror-list and similar activities.
* `archinstall.check_mirror_reachable()` has been added to detect if we have a reliable connection to the configured mirrors (locally or remote)
* `archinstall.Boot(<Installer() instance>)` [has been added](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/archinstall/lib/systemd.py#L49-L121), which can temporally boot up the new installation without having to re-boot from the ISO installation medium. A use case can be where you would need to communicate with systemd to set certain configuration parameters, or communicate via dbus to services etc. As an example, this is how it could be used:
python
with Boot(archinstall.Installer("/mnt")) as session:
session.SysCommand(["localectl", "set-keymap", '""'])


General Guided installation changes
============================
* Archinstall's guided installer will only execute if run as root
* `--help` was added, which simply points to `man archinstall`
* Can now be run in EFI and BIOS mode.
* The `--advanced` flag was added, to unlock certain options that require more experienced users
* Currently only `--sys-language` and `--sys-encoding` is unlocked/hidden from the general view
* `--filesystem` flag now works properly to skip the file system question
* It now asks for a default boot-loader if EFI was detected, in BIOS mode it defaults to GRUB
* Multiple kernel selection has been added *(mentioned above as well)*
* `NTP` option has been added after time-zone selection
* Keyboard layout selection has been stabilized
* `--services` flag/option has been added
* `--custom-commands` flag/option have been added
* `--silent` flag has been added, which mutes the `"Would you like to chroot into" question at the end as well as other user inputs. This requires a `--config` to be given in the place of asking the user for questions.

New Profiles
==========
* server *(lets you select multiple server-category application profiles)*
* deepin
* enlightenment
* sway

Profile changes
---------------------
* i3 has an updated package list, which now includes `lightdm-gtk-greeter`, `lightdm` and `dmenu`
* *(Breaking Change)* Most desktop applications which has little to no additional configuration other than installing packages, have now had it's `profiles/application/<profile>.py` removed, and the contents have moved in to the `profiles/<profile>.py` instead. Since it was just one additional call for "no reason".

New Application Profiles
===================
*Keep in mind that these are only accessibly if you script your own installations or to some extent select the server profile above, they are outside of the scope of the guided installer in general*

* Cockpit
* docker
* httpd *(apache)*
* lighttpd *(v1.0)*
* mariadb
* nginx
* postgresql
* sshd
* tomcat

General API Changes
=================

* With the previous change, we also introduce loading configuration from a JSON file with `--config <config_path.json>`, this configuration equals the same structure you see before the installation begins, which means you can re-use a configuration and inject it with `--config`.
* *(Breaking Change)* The magic global variable `installation` has been removed effect of immediately, instead, `archinstall.storage["installation_session"]` is created whenever `archinstall.Installer()` is instantiated. This is to make it less mysterious and keeping it simple - as well as satisfy the linters which produced over 400 errors because of this alone.
* *(Breaking Change)* Just like `installation` moved, so has `gfx_driver_packages` which is now `archinstall.storage["gfx_driver_packages"]`
* *(Breaking Change)* A lot of function names have been re-named in order to facilitate some stricter PEP-8 syntaxes, this in order to make linters happier and produce less errors.
* `archinstall.sys_command()` -> `archinstall.SysCommand()` *(This function has also been re-worked from the ground up as well, but should be backwards compatible, any issues of incompatibility should be reported)*
* `JSON_Encoder` -> `JsonEncoder`
* `hasUEFI` -> `has_uefi`
* `hasWifi` -> `has_wifi`
* `graphicsDevices` -> `graphics_devices`
* `hasNvidiaGraphics` -> `has_nvidia_graphics`
* `hasAmdGraphics` -> `has_amd_graphics`
* `hasIntelGraphics` -> `has_intel_graphics`
* `archinstall.Installer().copy_ISO_network_config` -> `archinstall.Installer().copy_iso_network_config`
* `archinstall.getHwAddr` -> `archinstall.get_hw_addr`
* `archinstall.enrichIfaceTypes` -> `archinstall.enrich_iface_types`
* `archinstall.wirelessScan` -> `archinstall.wireless_scan`
* `archinstall.GetWirelessNetworks` -> `archinstall.get_wireless_networks`
* `archinstall.` -> `archinstall.`
* `archinstall.` -> `archinstall.`
* *(Deprecated)* `archinstall.LOG_LEVELS` have been deprecated, instead, normal `logging.<level>` can be used. Next version will remove these old level definitions permanently.
* `archinstall.Partition().mount()` now supports passing down mount options when called via `options=<string with mount flags>`
* `archinstall.Filesystem(mode=<archinstall.GPT|archinstall.MBR>)` now supports `MBR`, allowing for older hardware to be used. This is still some what experimental, and `archinstall.Filesystem().use_entire_disk()` will honor `GPT` if UEFI is detected but fall back on `MBR` if EFI vars isn't present. Use manual formatting if you want to override and use `MBR` on EFI compliant hardware.
* `archinstall.disk_layouts()` have been added as a helper function to get an overview of the partition layout at any given moment. This function is called before and after an installation and added to the logs for easier support. If you wish to hide any disk information from the logs, make sure to remove this if you do not wish to expose your total disk setup. Only the disk SIZE and TYPE are added to the logs other than the identifiers themselves.
* `locate_binary()` now raises a `RequirementError` when the binary can not be found.
* *(Breaking Change)* `SysCommand()` Has been re-worked a lot, the following logic has been split into a new class called `SysCommandWorker()`
* It no longer has the ability to emulate a command, this might be brought back later if the need for it is great.
* `.raw_cmd` no longer exists, it's just `cmd`
* `.callback` and `.start_callback` has been merged into `.callbacks` which now is a dictionary with two keys currently: `on_start` and `on_end` *(currently not in use, but that's the future)*
* `.peak_output` is a boolean to control if we should trail the command output *(we don't strip `\n`, but we do stay on the same line as long as no new line was given)*
* `.status` has been removed, instead you can rely on `.is_alive()` and `.exit_code`.
* `.is_alive()` is a new function that does what it sounds like
* It now supports the `in` operator, `if b"/home" in SysCommand("pwd")` for instance.
* `for line in SysCommand()` as previously mentioned now only iterates the latest output since the last iteration.
* `.write()` has been added to communicate with a process
* `.tell()` will give you the current position in the trace log.
* `.seek()` will move to a position in the trace log
* `.peak()` is the internal function called on bytes to print it, something you wouldn't normally use, but you can override it.
* `.poll()` will perform emptying of buffers and perform work on the process, it also updates if the process is alive or not.
* `.execute()` will initate execution of the command and setup all the registers and stuff
* `.decode(encoding='utf-8')` will return the trace log decoded in the given encoding
* `SysCommand()` has been reworked - but should work the same way as before, but while utilizing `SysCommandWorker()`:
* `.trace_log` is now a property that fetches the `SysCommandWorker()`'s instance variable `._trace_log`
* If `SysCommand()` is put in a `with` context, it will return the inner `SysCommandWorker()` for raw processing, rather than returning itself.
* `SysCommand()` will not raise exceptions, instead it will log errors, instead `handle.exit_code` should be used. This was done to weed out bad behavior, since some commands use exit codes as status messages rather than actual errors.
* Using `SysCommand()` in a string, for instance like `f"This path is cool: {SysCommand('pwd')}"` will automatically decode into a `UTF-8` string of the output from the command.
* `SysCommand()` can also be JSON-dumped with the `JsonEncoder`, without the trace log.
* Also has the `.decode()` function
* `archinstall.pid_exists()` has been added to find out if a pid exists or not
* `archinstall.run_custom_user_commands()` have been added as a helper function to execute custom commands in the `--config` file.
* Most modules have now gotten a `__packages__` definition, for instance in `hardware.py` a `__packages__` has been created with the different drivers that it offers. This will allow us to do package inventory externally. Which will help with giving feedback of what we support. It can also be used in projects like [archoffline](https://github.com/Torxed/archoffline) to source packages during build time.
* hardware now also maintains a list of graphics drivers, called `archinstall.lib.hardware.AVAILABLE_GFX_DRIVERS`
* `archinstall.has_amd_cpu()` has been added
* `archinstall.has_intel_cpu()` has been added
* `archinstall.is_vm()` has been added
* A lot of docstring and typing has been done to help IDE users navigate the code.
* Listing keyboard mappings now uses `localectl list-keymaps`
* `archinstall.set_keyboard_language` now uses `localectl` instead of `loadkeys`
* *(Breaking Change)* `archinstall.Profile()` will now reset the namespace on every `with` context opening. This to ensure that it's started with the correct name-space, make sure to override `.original_namespace` if you want to take back control, otherwise whatever the namespace was on creation will be reverted on each instance.
* *(Breaking Change)* `archinstall.Profile().is_top_level_profile` has been re-worked to make sure not just a comment saying ` top_level_profile = True` exists, but it has to be an actual declared variable now.
* An error in Profile lookups have been fixed, where the search paths *(`PROFILE_PATH`)* was some what broken due to a previous re-work.
* `archinstall.generic_multi_select()` has been added which allows for selecting multiple options.
* `archinstall.MiniCurses` has been added, to emulate `ncurses` some what, without having to pull in all that it entails.
* `archinstall.ask_for_bootloader()` has been added.
* `archinstall.select_profile()` will now only show top level profiles, but entering any valid profile should also be supported.
* `archinstall.select_driver()` has been added, to select available graphics drivers
* `archinstall.select_kernel()` has been added, to select given kernels, uses `generic_multi_select` for this
* A lot of changes to the documentation, mainly surrounding `--config` has been re-worked or added.
* Introduced linting and automated ISO builds on commits and pull requests for easier contributions.
* Preprations to Introduced `__description__` in profiles have been introduced, this will later show a short description in the selection process

2.2.0.rc1

**Known Issues:**
* Partitioning still has issues with some layouts, manually creating partitions and selecting *"use /mnt as is"* or wiping the desired drive before running archinstall is two workarounds for now *(Remember to backup your data)*. Work is already underway to correct this, but will not make it in time for this release.

Top New Features
==============

* Archinstall now supports `GRUB` as a secondary boot loader. It's **still experimental**, so any issues would be appreciated if they got reported.
* `archinstall.Installer()` *(and subsequently the guided installer)* now supports selecting kernels
* `archinstall.Installer()` now supports modifying kernel parameters and other `mkinitcpio` related stuff
* `archinstall.Installer().pacstrap()` now shows a "progress bar" of what's going on
* Archinstall now features a multi-selection mode thanks to `archinstall.generic_multi_select()` - which will help users select multiple options. We've begun by allowing for selecting multiple kernels, but in the future more options that support multiple choices, such as multiple mirror selection will be introduced.
* Archinstall supports loading configuration from a JSON file, if you wish to re-use a setup. We also ship a [example](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/examples/config-sample.json) JSON file, *(**warning**: It does use `/dev/sda` in the example)*. The JSON structure that is shown on screen during installation and in `/var/log/archinstall/install.log` is valid configuration and can be re-used. There's also an example with [additional custom commands](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/examples/custom-command-sample.json) that we support in the `--config` structure, which isn't produced by the guided installer log output.
* The guided installer now allows you to optionally activate `NTP` if a time-zone was specified
* A very rudimentary `runas` has been added to `archinstall.Installer().arch_chroot()`, beware that a any quotations might break this function call as it's *experimental* for now. There is also no error checks if the user you try to run exists or not, so make sure to create the user first. Future improvements will be made here.
* `archinstall.Installer().mkinitcpio()` has been added, which can be called after modifications to `Installer().MODULES` or `.HOOKS` have been made.
* `archinstall.Installer().minimal_installation()` now intalls Intel and AMD `ucode` binaries by default.
* Archinstall's guided installer now has a `--advanced` flag, which will allow you to unlock certain additional configuration questions, such as system language. *(because how the `/etc/locale.conf` and `localectl list-locales` work, there's no way to get the full list of supports locales, so you will have to know which locale to write in order for this to work, hence the `--advanced` flag requirement)*
* Keyboard map selection now translates in to `X11`-desktops as well. This thanks to https://github.com/archlinux/archinstall/issues/147#issuecomment-812945222 *(We've moved to `localectl` for setting locales, which vastly improves reliability but also locks us into systemd more than ever)*
* Archinstall will now identify as `ArchInstall` for most of it's web requests, such as getting the mirror-list and similar activities.
* `archinstall.check_mirror_reachable()` has been added to detect if we have a reliable connection to the configured mirrors (locally or remote)
* `archinstall.Boot(<Installer() instance>)` [has been added](https://github.com/archlinux/archinstall/blob/1c9adbbedfcbd821fc4f4a74f1e63699ac33d6f5/archinstall/lib/systemd.py#L49-L121), which can temporally boot up the new installation without having to re-boot from the ISO installation medium. A use case can be where you would need to communicate with systemd to set certain configuration parameters, or communicate via dbus to services etc. As an example, this is how it could be used:
python
with Boot(archinstall.Installer("/mnt")) as session:
session.SysCommand(["localectl", "set-keymap", '""'])


General Guided installation changes
============================
* Archinstall's guided installer will only execute if run as root
* `--help` was added, which simply points to `man archinstall`
* Can now be run in EFI and BIOS mode.
* The `--advanced` flag was added, to unlock certain options that require more experienced users
* Currently only `--sys-language` and `--sys-encoding` is unlocked/hidden from the general view
* `--filesystem` flag now works properly to skip the file system question
* It now asks for a default boot-loader if EFI was detected, in BIOS mode it defaults to GRUB
* Multiple kernel selection has been added *(mentioned above as well)*
* `NTP` option has been added after time-zone selection
* Keyboard layout selection has been stabilized
* `--services` flag/option has been added
* `--custom-commands` flag/option have been added
* `--silent` flag has been added, which mutes the `"Would you like to chroot into" question at the end as well as other user inputs. This requires a `--config` to be given in the place of asking the user for questions.

New Profiles
==========
* server *(lets you select multiple server-category application profiles)*
* deepin
* enlightenment
* sway

Profile changes
---------------------
* i3 has an updated package list, which now includes `lightdm-gtk-greeter`, `lightdm` and `dmenu`
* *(Breaking Change)* Most desktop applications which has little to no additional configuration other than installing packages, have now had it's `profiles/application/<profile>.py` removed, and the contents have moved in to the `profiles/<profile>.py` instead. Since it was just one additional call for "no reason".

New Application Profiles
===================
*Keep in mind that these are only accessibly if you script your own installations or to some extent select the server profile above, they are outside of the scope of the guided installer in general*

* Cockpit
* docker
* httpd *(apache)*
* lighttpd *(v1.0)*
* mariadb
* nginx
* postgresql
* sshd
* tomcat

General API Changes
=================

* With the previous change, we also introduce loading configuration from a JSON file with `--config <config_path.json>`, this configuration equals the same structure you see before the installation begins, which means you can re-use a configuration and inject it with `--config`.
* *(Breaking Change)* The magic global variable `installation` has been removed effect of immediately, instead, `archinstall.storage["installation_session"]` is created whenever `archinstall.Installer()` is instantiated. This is to make it less mysterious and keeping it simple - as well as satisfy the linters which produced over 400 errors because of this alone.
* *(Breaking Change)* A lot of function names have been re-named in order to facilitate some stricter PEP-8 syntaxes, this in order to make linters happier and produce less errors.
* `archinstall.sys_command()` -> `archinstall.SysCommand()` *(This function has also been re-worked from the ground up as well, but should be backwards compatible, any issues of incompatibility should be reported)*
* `JSON_Encoder` -> `JsonEncoder`
* `hasUEFI` -> `has_uefi`
* `hasWifi` -> `has_wifi`
* `graphicsDevices` -> `graphics_devices`
* `hasNvidiaGraphics` -> `has_nvidia_graphics`
* `hasAmdGraphics` -> `has_amd_graphics`
* `hasIntelGraphics` -> `has_intel_graphics`
* `archinstall.Installer().copy_ISO_network_config` -> `archinstall.Installer().copy_iso_network_config`
* `archinstall.getHwAddr` -> `archinstall.get_hw_addr`
* `archinstall.enrichIfaceTypes` -> `archinstall.enrich_iface_types`
* `archinstall.wirelessScan` -> `archinstall.wireless_scan`
* `archinstall.GetWirelessNetworks` -> `archinstall.get_wireless_networks`
* `archinstall.` -> `archinstall.`
* `archinstall.` -> `archinstall.`
* *(Deprecated)* `archinstall.LOG_LEVELS` have been deprecated, instead, normal `logging.<level>` can be used. Next version will remove these old level definitions permanently.
* `archinstall.Partition().mount()` now supports passing down mount options when called via `options=<string with mount flags>`
* `archinstall.Filesystem(mode=<archinstall.GPT|archinstall.MBR>)` now supports `MBR`, allowing for older hardware to be used. This is still some what experimental, and `archinstall.Filesystem().use_entire_disk()` will honor `GPT` if UEFI is detected but fall back on `MBR` if EFI vars isn't present. Use manual formatting if you want to override and use `MBR` on EFI compliant hardware.
* `archinstall.disk_layouts()` have been added as a helper function to get an overview of the partition layout at any given moment. This function is called before and after an installation and added to the logs for easier support. If you wish to hide any disk information from the logs, make sure to remove this if you do not wish to expose your total disk setup. Only the disk SIZE and TYPE are added to the logs other than the identifiers themselves.
* `locate_binary()` now raises a `RequirementError` when the binary can not be found.
* *(Breaking Change)* `SysCommand()` Has been re-worked a lot, the following logic has been split into a new class called `SysCommandWorker()`
* It no longer has the ability to emulate a command, this might be brought back later if the need for it is great.
* `.raw_cmd` no longer exists, it's just `cmd`
* `.callback` and `.start_callback` has been merged into `.callbacks` which now is a dictionary with two keys currently: `on_start` and `on_end` *(currently not in use, but that's the future)*
* `.peak_output` is a boolean to control if we should trail the command output *(we don't strip `\n`, but we do stay on the same line as long as no new line was given)*
* `.status` has been removed, instead you can rely on `.is_alive()` and `.exit_code`.
* `.is_alive()` is a new function that does what it sounds like
* It now supports the `in` operator, `if b"/home" in SysCommand("pwd")` for instance.
* `for line in SysCommand()` as previously mentioned now only iterates the latest output since the last iteration.
* `.write()` has been added to communicate with a process
* `.tell()` will give you the current position in the trace log.
* `.seek()` will move to a position in the trace log
* `.peak()` is the internal function called on bytes to print it, something you wouldn't normally use, but you can override it.
* `.poll()` will perform emptying of buffers and perform work on the process, it also updates if the process is alive or not.
* `.execute()` will initate execution of the command and setup all the registers and stuff
* `.decode(encoding='utf-8')` will return the trace log decoded in the given encoding
* `SysCommand()` has been reworked - but should work the same way as before, but while utilizing `SysCommandWorker()`:
* `.trace_log` is now a property that fetches the `SysCommandWorker()`'s instance variable `._trace_log`
* If `SysCommand()` is put in a `with` context, it will return the inner `SysCommandWorker()` for raw processing, rather than returning itself.
* `SysCommand()` will not raise exceptions, instead it will log errors, instead `handle.exit_code` should be used. This was done to weed out bad behavior, since some commands use exit codes as status messages rather than actual errors.
* Using `SysCommand()` in a string, for instance like `f"This path is cool: {SysCommand('pwd')}"` will automatically decode into a `UTF-8` string of the output from the command.
* `SysCommand()` can also be JSON-dumped with the `JsonEncoder`, without the trace log.
* Also has the `.decode()` function
* `archinstall.pid_exists()` has been added to find out if a pid exists or not
* `archinstall.run_custom_user_commands()` have been added as a helper function to execute custom commands in the `--config` file.
* Most modules have now gotten a `__packages__` definition, for instance in `hardware.py` a `__packages__` has been created with the different drivers that it offers. This will allow us to do package inventory externally. Which will help with giving feedback of what we support. It can also be used in projects like [archoffline](https://github.com/Torxed/archoffline) to source packages during build time.
* hardware now also maintains a list of graphics drivers, called `archinstall.lib.hardware.AVAILABLE_GFX_DRIVERS`
* `archinstall.has_amd_cpu()` has been added
* `archinstall.has_intel_cpu()` has been added
* `archinstall.is_vm()` has been added
* A lot of docstring and typing has been done to help IDE users navigate the code.
* Listing keyboard mappings now uses `localectl list-keymaps`
* `archinstall.set_keyboard_language` now uses `localectl` instead of `loadkeys`
* *(Breaking Change)* `archinstall.Profile()` will now reset the namespace on every `with` context opening. This to ensure that it's started with the correct name-space, make sure to override `.original_namespace` if you want to take back control, otherwise whatever the namespace was on creation will be reverted on each instance.
* *(Breaking Change)* `archinstall.Profile().is_top_level_profile` has been re-worked to make sure not just a comment saying ` top_level_profile = True` exists, but it has to be an actual declared variable now.
* An error in Profile lookups have been fixed, where the search paths *(`PROFILE_PATH`)* was some what broken due to a previous re-work.
* `archinstall.generic_multi_select()` has been added which allows for selecting multiple options.
* `archinstall.MiniCurses` has been added, to emulate `ncurses` some what, without having to pull in all that it entails.
* `archinstall.ask_for_bootloader()` has been added.
* `archinstall.select_profile()` will now only show top level profiles, but entering any valid profile should also be supported.
* `archinstall.select_driver()` has been added, to select available graphics drivers
* `archinstall.select_kernel()` has been added, to select given kernels, uses `generic_multi_select` for this
* A lot of changes to the documentation, mainly surrounding `--config` has been re-worked or added.
* Introduced linting and automated ISO builds on commits and pull requests for easier contributions.

2.1.4

Not secure
================================

**Known issues**:
* Installing **to** a USB device is still a bit iffy at times and some partition layouts might still confuse the installer and these will be fixed in v2.2.0 due to it requiring some re-work of the partition logic - which is to big of a change for this version.
* MBR and GRUB support will be coming in v2.2.0 (next release)

For more issues, see the [issues](https://github.com/archlinux/archinstall/issues) tab. And thank you for your patience and constructive feedback, it's very much appreciated!

Experimental features:
* *"Use `/mnt` as is"* 124 has been added as a new option in the formatting process. This function is tested, but internet is filled with people who use exotic partitioning layouts and such. So this feature is bound to break at some points. Feedback is very welcome especially around this new feature. `lsblk` output has been added to the logs, so submitting that log should be sufficient for us to replicate certain layouts and file formats.

This release contains the following:
* *(breaking change)* [Installer()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) has been re-worked quite a bit to accomodate 124. This meant that `partition` and `boot_partition` are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer *"cares"* what partitions are being used. As long as it can run `pacstrap` in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead `.set_hostname()` should be called on the installation. *(see the minimal example for information on how the new workflow should look like)*.
* `argon2id` is being used by default instead of `argon2i` after some discussions here on GitHub, with a future plan of making this configurable through `--PBKDF=<implementation name>`.
* 124 has been implemented and allows for more complex partition layouts. See note above surrounding this feature.
* Added more verification to time zone selection
* Added a warning for one experimental feature
* The install log now contains `lsblk` output to better help diagnose potential partitioning issues.
* Added information regarding unattended installations in the readme
* IP addresses are now verified when entering them
* Time zone input will now loop instead of default to UTC when a **invalid** time zone is given *(leaving blank will however default to UTC still as mentioned below)*
* `generic_select` have been improved quite a bit. It now supports `allow_empty_input=False` which will loop over the choices until a valid is given as well as a `sort=True` which sorts the listing. Lastly `options_output=False` have been added to hide any output of the list, enabling the programmer to print their own list prior to selecting the options *(options still has to be given to `generic_select`, but these can be different from the output printed, enabling for more programatically understandable options returned from `generic_select` while allowing for presenting user friendly options)*
* "Keep partitions" now forces the user to select at least `/` and `/boot`
* A `.editorconfig` to help contributors use and follow some guidelines when contributing
* Added a mission statement to the project
* Simplified and consolidated the build process.
* [minimal.py](https://github.com/archlinux/archinstall/blob/master/examples/minimal.py) and the [script your own installation](https://github.com/archlinux/archinstall#scripting-your-own-installation) examples have been updated properly.
* The [test instructions](https://github.com/archlinux/archinstall#testing) and [build ISO instructions](https://github.com/archlinux/archinstall/wiki/Building-and-Testing) have been added and modified.
* The entry-point for the module have moved in to [__init__.py](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/archinstall/__init__.py)
* Partial support for hardware raids [have been added](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R82-R84) *(still very much an experimental feature)*
* `Partition()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R206-R215) property for easy access to the PARTUUID of `lsblk`
* `BlockDevice()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R129-R140) property for easy access to the UUID of `lsblk` for the device.
* `Partition()`[.real_device](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R234-R237) now always returns the parent device, not only when it's encrypted. This means that `/dev/mapper/luksloop` will return `/dev/sda2` for instance, and `/dev/sda2` will return `/dev/sda`. For a more consistent behavior.
* Relaxed the `Partition()`[.safe_to_format()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R273-R281) a bit to allow for formatting "odd" boot partitions that doesn't make sense.
* `Partition()`[.mount()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R383) will now create the destination by default.
* `archinstall` has a new function called [.get_partitions_in_use(mountpoint)](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R590-R607) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the `Installer()` to understand which partitions is mounted and what packages to source.
* `archinstall.sys_command()` now take [environment_vars](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R79) as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of [any open filehandles](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R266-R270) once done executing.
* Some general code clean up such as [this](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-d39c5771ecacdcd8a8216c41e300b2c0df140c7a871e99f2b29994a85b78cc86L6-R6)
* `Installer()` [no longer installs nano](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) by default as a base package. That is now an optional package in profiles instead.
* `Installer()`[.partitions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR51) have been added to facilitate easy access to the current partitions in play during this installation.
* `Installer().enable_service()` now takes [an arbitrary number of services](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR182-R186) instead of just one
* `Installer()`[.drop_to_shell()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR194-R196) has been added to the API for easy access into the new installation.
* `Installer()`[.detect_encryption()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR263-R269) has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
* `Installer().minimal_installation()` now [patches mkinitcpio](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR276-R300) instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as `on_mkinitcpio` that will pipe these variables to external functions for patching.
* `archinstall.list_keyboard_languages()` should [no longer be limited to QWERTY](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-349e0306916a31b2d10e2e2c6be53ee68427130fe66150a64f26a70575ae0f7bR7) layouts. This should enable layouts like `be-latin1` to be discoverable which was mentioned in 149.
* Some [NVMe sleeps](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77fb925cf17751bd67029d4b5d84614fc2e01b1a78be872405a2fb2426db4f66R130-R131) have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
* `list_mirrors()` now support [offline mode](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-3a34aa93b1dbcbf57a9ecf6a0dc5737b8bee9a2bfaf6032e1c50efd799a0f6c1R79-R83) is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is [archoffline](https://github.com/Torxed/archoffline) that utilize this as a test.
* [profiles/](https://github.com/archlinux/archinstall/tree/master/profiles) now has the ability to masquerade as [top_level_profile](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R198-R203) enabling it to show up in profile listing. And subsequently hide themselves from the top level menu in [guided](https://github.com/archlinux/archinstall/blob/master/examples/guided.py). This helps a lot with maintaining a clean list of profiles at the first presentation. All desktop profiles have now been moved under the [desktop](https://github.com/archlinux/archinstall/blob/master/profiles/desktop.py) option.
* `Profiles()`[.packages](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R205-R223) is a new property in the API to access potential package definitions. *(experimental feature and will not take full effect until `v2.2.0`)*
* [service_state()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-8b88989818da3b8e89018b3bff85119ab8bf6f20a95c86f4594151e1966a9da9R10) has been patched and now properly returns a string representing the state, without any ANSI escape codes.
* Usernames are now [properly verified](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R22-R30) before continuing in the guided installer.
* The formatting countdown has been moved into [archinstall.lib.user_interactions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R32-R65) *(and exposed as `archinstall.do_countdown()`)*
* Most function logs no longer outputs a [black background](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R71).
* Timezones will now [default to UTC](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R133-R135) when skipped.
* [Audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R145-R151) will be added to all desktop profiles supporting both Pulse Audio and Pipewire.
* [NetworkManager](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R161-R162) has been added as a network configuration step. *(Note that the [gnome (arch package group)](https://archlinux.org/groups/x86_64/gnome/) still contains `NetworkManager` as a dependency and will be installed, but not activated unless this new option is chosen)*
* Some general fixes for `out of range` issues [have been fixed](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R234-R237) in various ways.
* Searching for a keyboard layout that doesn't exist, [no longer crashes but will ask you until a valid result is found](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R343-R351).
* Until the next release when MBR/BIOS/GRUB support is fixed and added, guided will now [issue a warning about EFI not being used](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR6-R8) to avoid confusion.
* [keyboard layout](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR17-R22), [mirror selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR31-R36) and [package selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR191-R208) now longer causes hard crashes when faulty configuration is entered, instead it will loop back and ask for input again until valid input is given. These crashes were a design choice when releasing this project to avoid potential issues slipping through. This reduced complexity of the code and logic and ensured that no issues fell through the cracks, but it came at the cost of user experience so this is being changed one function at a time to allow for proper testing before being "made pretty".
* [audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR323-R332) will only be performed if a desktop profile was chosen, or if the `--audio` flag was given to guided.
* Guided [will now ask if you want to drop into a shell](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR352-R358) for post configuration upon a successful installation.
* Gnome and KDE have been polished a bit to enable a more minimal installation, which should make the footprint on the disk much smaller.
* A lot of profiles have been added: [alacritty](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/alacritty.py), [budgie](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/budgie.py), [cinnamon](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/cinnamon.py), [i3](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/i3.py), (https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/i3-wm.py), [lxqt](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/lxqt.py), [mate](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/mate.py), [sway](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/sway.py) and [xfce4](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/xfce4.py)
* [awesome](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-78ecad89c47a929ee91dfd09bea208fadee359b5dfb07954cd68ec6cd6c30ac7R9) no longer installs a browser and things by default.
* [desktop](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77e411262e1038a5da0dd3815b55c2ebc5747dbe29c8929635efba3af5c33cd3R9) will install some helper packages to make life easier.
* [A new build method](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-fa602a8a75dc9dcc92261bac5f533c2a85e34fcceaff63b3a3a81d9acde2fc52R1-R39) to make building the python library a bit more future compliant
* Updated references to the old project URL to the new Arch Linux official GitHub account
* A lot of spelling errors have been corrected

2.1.4rc2

Patch release v2.1.4 (Release Candidate)
================================

Attached below is an **unofficial** Arch Linux ISO that ships this specific release candidate.
Since this is an unsupported ISO, please help the support out by not asking questions about it anywhere but here or in the archinstall channels.

**Known issues**: Installing **to** a USB device is still a bit iffy at times.

Experimental features:
* *"Use `/mnt` as is"* 124 has been added as a new option in the formatting process. This function is tested, but internet is filled with people who use exotic partitioning layouts and such. So this feature is bound to break at some points. Feedback is very welcome especially around this new feature. `lsblk` output has been added to the logs, so submitting that log should be sufficient for us to replicate certain layouts and file formats.

This release contains the following:
* *(breaking change)* [Installer()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) has been re-worked quite a bit to accomodate 124. This meant that `partition` and `boot_partition` are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer *"cares"* what partitions are being used. As long as it can run `pacstrap` in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead `.set_hostname()` should be called on the installation. *(see the minimal example for information on how the new workflow should look like)*.
* `argon2id` is being used by default instead of `argon2i` after some discussions here on GitHub, with a future plan of making this configurable through `--PBKDF=<implementation name>`.
* 124 has been implemented and allows for more complex partition layouts. See note above surrounding this feature.
* The install log now contains `lsblk` output to better help diagnose potential partitioning issues.
* Added information regarding unattended installations in the readme
* IP addresses are now verified when entering them
* Time zone input will now loop instead of default to UTC when a **invalid** time zone is given *(leaving blank will however default to UTC still as mentioned below)*
* `generic_select` have been improved quite a bit. It now supports `allow_empty_input=False` which will loop over the choices until a valid is given as well as a `sort=True` which sorts the listing. Lastly `options_output=False` have been added to hide any output of the list, enabling the programmer to print their own list prior to selecting the options *(options still has to be given to `generic_select`, but these can be different from the output printed, enabling for more programatically understandable options returned from `generic_select` while allowing for presenting user friendly options)*
* "Keep partitions" now forces the user to select at least `/` and `/boot`
* A `.editorconfig` to help contributors use and follow some guidelines when contributing
* Added a mission statement to the project
* Simplified and consolidated the build process.
* [minimal.py](https://github.com/archlinux/archinstall/blob/master/examples/minimal.py) and the [script your own installation](https://github.com/archlinux/archinstall#scripting-your-own-installation) examples have been updated properly.
* The [test instructions](https://github.com/archlinux/archinstall#testing) and [build ISO instructions](https://github.com/archlinux/archinstall/wiki/Building-and-Testing) have been added and modified.
* The entry-point for the module have moved in to [__init__.py](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/archinstall/__init__.py)
* Partial support for hardware raids [have been added](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R82-R84) *(still very much an experimental feature)*
* `Partition()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R206-R215) property for easy access to the PARTUUID of `lsblk`
* `BlockDevice()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R129-R140) property for easy access to the UUID of `lsblk` for the device.
* `Partition()`[.real_device](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R234-R237) now always returns the parent device, not only when it's encrypted. This means that `/dev/mapper/luksloop` will return `/dev/sda2` for instance, and `/dev/sda2` will return `/dev/sda`. For a more consistent behavior.
* Relaxed the `Partition()`[.safe_to_format()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R273-R281) a bit to allow for formatting "odd" boot partitions that doesn't make sense.
* `Partition()`[.mount()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R383) will now create the destination by default.
* `archinstall` has a new function called [.get_partitions_in_use(mountpoint)](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R590-R607) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the `Installer()` to understand which partitions is mounted and what packages to source.
* `archinstall.sys_command()` now take [environment_vars](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R79) as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of [any open filehandles](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R266-R270) once done executing.
* Some general code clean up such as [this](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-d39c5771ecacdcd8a8216c41e300b2c0df140c7a871e99f2b29994a85b78cc86L6-R6)
* `Installer()` [no longer installs nano](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) by default as a base package. That is now an optional package in profiles instead.
* `Installer()`[.partitions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR51) have been added to facilitate easy access to the current partitions in play during this installation.
* `Installer().enable_service()` now takes [an arbitrary number of services](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR182-R186) instead of just one
* `Installer()`[.drop_to_shell()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR194-R196) has been added to the API for easy access into the new installation.
* `Installer()`[.detect_encryption()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR263-R269) has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
* `Installer().minimal_installation()` now [patches mkinitcpio](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR276-R300) instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as `on_mkinitcpio` that will pipe these variables to external functions for patching.
* `archinstall.list_keyboard_languages()` should [no longer be limited to QWERTY](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-349e0306916a31b2d10e2e2c6be53ee68427130fe66150a64f26a70575ae0f7bR7) layouts. This should enable layouts like `be-latin1` to be discoverable which was mentioned in 149.
* Some [NVMe sleeps](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77fb925cf17751bd67029d4b5d84614fc2e01b1a78be872405a2fb2426db4f66R130-R131) have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
* `list_mirrors()` now support [offline mode](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-3a34aa93b1dbcbf57a9ecf6a0dc5737b8bee9a2bfaf6032e1c50efd799a0f6c1R79-R83) is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is [archoffline](https://github.com/Torxed/archoffline) that utilize this as a test.
* [profiles/](https://github.com/archlinux/archinstall/tree/master/profiles) now has the ability to masquerade as [top_level_profile](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R198-R203) enabling it to show up in profile listing. And subsequently hide themselves from the top level menu in [guided](https://github.com/archlinux/archinstall/blob/master/examples/guided.py). This helps a lot with maintaining a clean list of profiles at the first presentation. All desktop profiles have now been moved under the [desktop](https://github.com/archlinux/archinstall/blob/master/profiles/desktop.py) option.
* `Profiles()`[.packages](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R205-R223) is a new property in the API to access potential package definitions. *(experimental feature and will not take full effect until `v2.2.0`)*
* [service_state()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-8b88989818da3b8e89018b3bff85119ab8bf6f20a95c86f4594151e1966a9da9R10) has been patched and now properly returns a string representing the state, without any ANSI escape codes.
* Usernames are now [properly verified](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R22-R30) before continuing in the guided installer.
* The formatting countdown has been moved into [archinstall.lib.user_interactions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R32-R65) *(and exposed as `archinstall.do_countdown()`)*
* Most function logs no longer outputs a [black background](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R71).
* Timezones will now [default to UTC](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R133-R135) when skipped.
* [Audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R145-R151) will be added to all desktop profiles supporting both Pulse Audio and Pipewire.
* [NetworkManager](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R161-R162) has been added as a network configuration step. *(Note that the [gnome (arch package group)](https://archlinux.org/groups/x86_64/gnome/) still contains `NetworkManager` as a dependency and will be installed, but not activated unless this new option is chosen)*
* Some general fixes for `out of range` issues [have been fixed](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R234-R237) in various ways.
* Searching for a keyboard layout that doesn't exist, [no longer crashes but will ask you until a valid result is found](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R343-R351).
* Until the next release when MBR/BIOS/GRUB support is fixed and added, guided will now [issue a warning about EFI not being used](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR6-R8) to avoid confusion.
* [keyboard layout](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR17-R22), [mirror selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR31-R36) and [package selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR191-R208) now longer causes hard crashes when faulty configuration is entered, instead it will loop back and ask for input again until valid input is given. These crashes were a design choice when releasing this project to avoid potential issues slipping through. This reduced complexity of the code and logic and ensured that no issues fell through the cracks, but it came at the cost of user experience so this is being changed one function at a time to allow for proper testing before being "made pretty".
* [audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR323-R332) will only be performed if a desktop profile was chosen, or if the `--audio` flag was given to guided.
* Guided [will now ask if you want to drop into a shell](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR352-R358) for post configuration upon a successful installation.
* Gnome and KDE have been polished a bit to enable a more minimal installation, which should make the footprint on the disk much smaller.
* A lot of profiles have been added: [alacritty](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/alacritty.py), [budgie](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/budgie.py), [cinnamon](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/cinnamon.py), [i3](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/i3.py), (https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/i3-wm.py), [lxqt](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/lxqt.py), [mate](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/mate.py), [sway](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/sway.py) and [xfce4](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/xfce4.py)
* [awesome](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-78ecad89c47a929ee91dfd09bea208fadee359b5dfb07954cd68ec6cd6c30ac7R9) no longer installs a browser and things by default.
* [desktop](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77e411262e1038a5da0dd3815b55c2ebc5747dbe29c8929635efba3af5c33cd3R9) will install some helper packages to make life easier.
* [A new build method](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-fa602a8a75dc9dcc92261bac5f533c2a85e34fcceaff63b3a3a81d9acde2fc52R1-R39) to make building the python library a bit more future compliant
* Updated references to the old project URL to the new Arch Linux official GitHub account
* A lot of spelling errors have been corrected

2.1.4rc1

Patch release v2.1.4 (Release Candidate)
================================

Attached below is an **unofficial** Arch Linux ISO that ships this specific release candidate.
Since this is an unsupported ISO, please help the support out by not asking questions about it anywhere but here or in the archinstall channels.

**Known issues:**
* entering keyboard layouts directly by *name* in the first prompt is partially broken. Entering `us` for instance is broken, but entering by number works or after a search you can enter `us`. It just needs that first search to populate the list properly internally by name.

This release contains the following:
* *(breaking change)* [Installer()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) has been re-worked quite a bit to accomodate 124. This meant that `partition` and `boot_partition` are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer *"cares"* what partitions are being used. As long as it can run `pacstrap` in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead `.set_hostname()` should be called on the installation. *(see the minimal example for information on how the new workflow should look like)*.
* A `.editorconfig` to help contributors use and follow some guidelines when contributing
* Added a mission statement to the project
* Simplified and consolidated the build process.
* [minimal.py](https://github.com/archlinux/archinstall/blob/master/examples/minimal.py) and the [script your own installation](https://github.com/archlinux/archinstall#scripting-your-own-installation) examples have been updated properly.
* The [test instructions](https://github.com/archlinux/archinstall#testing) and [build ISO instructions](https://github.com/archlinux/archinstall/wiki/Building-and-Testing) have been added and modified.
* The entry-point for the module have moved in to [__init__.py](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/archinstall/__init__.py)
* Partial support for hardware raids [have been added](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R82-R84) *(still very much an experimental feature)*
* `Partition()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R206-R215) property for easy access to the PARTUUID of `lsblk`
* `BlockDevice()` now has a [.uuid](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R129-R140) property for easy access to the UUID of `lsblk` for the device.
* `Partition()`[.real_device](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R234-R237) now always returns the parent device, not only when it's encrypted. This means that `/dev/mapper/luksloop` will return `/dev/sda2` for instance, and `/dev/sda2` will return `/dev/sda`. For a more consistent behavior.
* Relaxed the `Partition()`[.safe_to_format()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R273-R281) a bit to allow for formatting "odd" boot partitions that doesn't make sense.
* `Partition()`[.mount()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R383) will now create the destination by default.
* `archinstall` has a new function called [.get_partitions_in_use(mountpoint)](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-de72788d774e24383a05298142e3cb72b53329e0cef82eb19fd9716bfc667c58R590-R607) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the `Installer()` to understand which partitions is mounted and what packages to source.
* `archinstall.sys_command()` now take [environment_vars](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R79) as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of [any open filehandles](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-4b1ae0a69adb92795bf24c05708559d253512bd3b6fe994b2f9f7a88309d2696R266-R270) once done executing.
* Some general code clean up such as [this](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-d39c5771ecacdcd8a8216c41e300b2c0df140c7a871e99f2b29994a85b78cc86L6-R6)
* `Installer()` [no longer installs nano](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eL37-R37) by default as a base package. That is now an optional package in profiles instead.
* `Installer()`[.partitions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR51) have been added to facilitate easy access to the current partitions in play during this installation.
* `Installer().enable_service()` now takes [an arbitrary number of services](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR182-R186) instead of just one
* `Installer()`[.drop_to_shell()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR194-R196) has been added to the API for easy access into the new installation.
* `Installer()`[.detect_encryption()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR263-R269) has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
* `Installer().minimal_installation()` now [patches mkinitcpio](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-283d51110d004467e254215ad93e4dfcf0188beb22d9f878bb7088c12076dd2eR276-R300) instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as `on_mkinitcpio` that will pipe these variables to external functions for patching.
* `archinstall.list_keyboard_languages()` should [no longer be limited to QWERTY](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-349e0306916a31b2d10e2e2c6be53ee68427130fe66150a64f26a70575ae0f7bR7) layouts. This should enable layouts like `be-latin1` to be discoverable which was mentioned in 149.
* Some [NVMe sleeps](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77fb925cf17751bd67029d4b5d84614fc2e01b1a78be872405a2fb2426db4f66R130-R131) have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
* `list_mirrors()` now support [offline mode](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-3a34aa93b1dbcbf57a9ecf6a0dc5737b8bee9a2bfaf6032e1c50efd799a0f6c1R79-R83) is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is [archoffline](https://github.com/Torxed/archoffline) that utilize this as a test.
* [profiles/](https://github.com/archlinux/archinstall/tree/master/profiles) now has the ability to masquerade as [top_level_profile](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R198-R203) enabling it to show up in profile listing. And subsequently hide themselves from the top level menu in [guided](https://github.com/archlinux/archinstall/blob/master/examples/guided.py). This helps a lot with maintaining a clean list of profiles at the first presentation. All desktop profiles have now been moved under the [desktop](https://github.com/archlinux/archinstall/blob/master/profiles/desktop.py) option.
* `Profiles()`[.packages](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-c020f06bfd45245769ec3b87d62176bb0e3ad7e54751caa91099f28f2611aeb5R205-R223) is a new property in the API to access potential package definitions. *(experimental feature and will not take full effect until `v2.2.0`)*
* [service_state()](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-8b88989818da3b8e89018b3bff85119ab8bf6f20a95c86f4594151e1966a9da9R10) has been patched and now properly returns a string representing the state, without any ANSI escape codes.
* Usernames are now [properly verified](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R22-R30) before continuing in the guided installer.
* The formatting countdown has been moved into [archinstall.lib.user_interactions](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R32-R65) *(and exposed as `archinstall.do_countdown()`)*
* Most function logs no longer outputs a [black background](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R71).
* Timezones will now [default to UTC](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R133-R135) when skipped.
* [Audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R145-R151) will be added to all desktop profiles supporting both Pulse Audio and Pipewire.
* [NetworkManager](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R161-R162) has been added as a network configuration step. *(Note that the [gnome (arch package group)](https://archlinux.org/groups/x86_64/gnome/) still contains `NetworkManager` as a dependency and will be installed, but not activated unless this new option is chosen)*
* Some general fixes for `out of range` issues [have been fixed](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R234-R237) in various ways.
* Searching for a keyboard layout that doesn't exist, [no longer crashes but will ask you until a valid result is found](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43R343-R351).
* Until the next release when MBR/BIOS/GRUB support is fixed and added, guided will now [issue a warning about EFI not being used](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR6-R8) to avoid confusion.
* [keyboard layout](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR17-R22), [mirror selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR31-R36) and [package selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR191-R208) now longer causes hard crashes when faulty configuration is entered, instead it will loop back and ask for input again until valid input is given. These crashes were a design choice when releasing this project to avoid potential issues slipping through. This reduced complexity of the code and logic and ensured that no issues fell through the cracks, but it came at the cost of user experience so this is being changed one function at a time to allow for proper testing before being "made pretty".
* [audio selection](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR323-R332) will only be performed if a desktop profile was chosen, or if the `--audio` flag was given to guided.
* Guided [will now ask if you want to drop into a shell](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-98d75a109b5337cd7d7c948d2cfc2379bcc51be22dfa3ca6491765f0e0bcaaabR352-R358) for post configuration upon a successful installation.
* Gnome and KDE have been polished a bit to enable a more minimal installation, which should make the footprint on the disk much smaller.
* A lot of profiles have been added: [alacritty](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/alacritty.py), [budgie](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/budgie.py), [cinnamon](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/cinnamon.py), [i3](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/i3.py), (https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/i3-wm.py), [lxqt](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/lxqt.py), [mate](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/mate.py), [sway](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/sway.py) and [xfce4](https://github.com/archlinux/archinstall/blob/c9e1d4a8c3435401220c1108ac938971ad517a37/profiles/applications/xfce4.py)
* [awesome](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-78ecad89c47a929ee91dfd09bea208fadee359b5dfb07954cd68ec6cd6c30ac7R9) no longer installs a browser and things by default.
* [desktop](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-77e411262e1038a5da0dd3815b55c2ebc5747dbe29c8929635efba3af5c33cd3R9) will install some helper packages to make life easier.
* [A new build method](https://github.com/archlinux/archinstall/compare/v2.1.3...v2.1.4-RC1#diff-fa602a8a75dc9dcc92261bac5f533c2a85e34fcceaff63b3a3a81d9acde2fc52R1-R39) to make building the python library a bit more future compliant
* Updated references to the old project URL to the new Arch Linux official GitHub account
* A lot of spelling errors have been corrected

2.1.3

Not secure
This is a minor release and addresses some smaller bugs that were creeping around.

* A inconsistency was detected when trying to format a disk/partition that previously had encryption enabled and going to a setup where encryption was not used. This was identified by Didr and the issue was that the `Partition().encrypted` flag was carried over from the internal cache *(created initially when building the cache to present to the user during initialization)*.
- The `.encrypted` flag is now more accurately set by correctly identifying file system as reported by the kernel rather than our own internal cache after `.format` is called. It also checks the parent device if there is one to not falsely check on unlocked encrypted devices.
* 116 has partially been corrected, in that the log will fall back to `./` if archinstall couldn't put the log in `/var/log/archinstall`
* `sys_command` now has a better working `workdir` flag to put logs and execute from.
* Removed `vfat` as a root-partition option
* Fixed an issue where completely empty drives would cause a glitch due to `.has_content()`'s `mount` command would crash due to *"wrong fs type"*.

No new features were added.

Page 6 of 12

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.