* add explicit _fetched_remote bool
* Attempt 2
* Adds about 15 seconds time-out to fetch_data_from_url with 3 retries (4, 5, 6)
Then fallsback to fully local list
* Feedbacks: 20 -> 30
Do not return early
Add debug
Remove new flag
60 second timeout for reflector
* Clean up install logs by hiding mirror scores behind --verbose
* Edit text menu
* Fix alignment
* Scroll functionality
* Fix flake8
* Migrate locales menu
* Fix language translation
* Fix interrupt
* Fix flake8
* Edit mode preset
* Convert print to tui prints
* Fix mypy
* Fix cycling through long menu
* Fix profile view
* Fix scrolling
* Fix scrolling
* Fix mypy
* Fix swiss script
* Display asterisk for passwords
* Corrected a variable usage in the local mirror parsing
* Made sure that curses menu selection on mirrors use url object from mirror.url instead of the class instance
* Fixed mypy type on mirror list
---------
Co-authored-by: Torxed <torxed@archlinux.org>
* Using JSON endpoint instead of ASCII endpoint for mirror listing, as the JSON endpoint is cached and easier to parse
* Added a TODO to handle unknown regional mirrors (which lacks info in the backend)
* Filtered out 'bad' mirrors. Also added a sorting mechanism that uses the mirrors 'score' rather than just the URL name. This will emulate the reflector.service/rankmirrors behavior and thus reducing the need to re-rank the mirrors.
* Added the ability to sort mirrors via latency or download speed using sorted(mirror_list, key=lambda mirror: (mirror.score, mirror.speed)) - but I have not implemented the sorting via the menu yet, and I have not integrated the new MirrorStatus model into the handling of URL's. I still need to figure out where the {region: [url, url]} is being used, so that i can convert to {region: [mirror.url, mirror.url]} logic.
* Converting MirrorStatus model to {mirror: [url, url]}
* Added debug information for /var/log/archinstall/install.log
* Fixing flake8
* Fixed issue where 'dead' mirrors have no score, and thus can't be round():ed
* Forgot to return model validation data after validation
* Improving debug/info output
* Reverting change in #2350 - Writing over instead of appending to mirrorlist
* Mirror URL's reported by the JSON endpoint does not contain the repo format, only the base location for the mirror. So we have to adjust for this.
* pydantic did not honor 'private' variables in 'before' model validator, had to change to 'after' instead.
* Sorted out mypy typing matching the new MirrorStatus model
* Added pydantic as a dependency, it's time!
* Updated workflow to include pydantic
* Added return values from model @property decorators.
* fix: refactor clear_vt100_escape_codes
* fix: check for structure being a dict after handling potential parsing errors
* refactor: use short circuit logic than if-elif-else chains
* fix: use or for nullish moutpoint attribute
* fix: better error handling for JSON from urls and paths
* chore: json_stream_to_structure documentation
* refactor: dry up relative and chroot path for custom command scripts
* refactor: use write_text for pathlib.Path object
* refactor: use sets to find intersection instead of filter and list
* refactor: replace loop with dictionary comprehension in preparing luks partition
* refactor: use walrus operator to check if luks_handler exists
* refactor: use read_text and splitlines for potential Path object
* fix: use keepends in splitlines for compatibility
* fix: use keepends in splitlines for compatibility
* feat: set pacman_conf Path as an attribute of installer
* fix: empty string is a part of any string, avoid tuples
* refactor: use iterator patterns to uncomment multilib and testing blocks
* fix: don't json.loads an already loaded structure
* fix: use fstab_path uniformly in genfstab
* fix: remove unused variable matched
* refactor: create separate class to modify pacman.conf in a single pass
* fix: remove unused attribute pacman_conf from installer
* fix: remove unused attribute pacman_conf from installer
* feat: add persist method for pacman.conf, rewrite only when needed
* fix: use path.write_text for locale.conf
* use `or` operator for nullish new_conf
* refactor: Installer.target is always a pathlib.Path object, do not check for string type
* fix: use Optional[str] in function type definition instead of sumtype of str and None
* fix: mypy type annotation
* fix: make flake8 happy
* chore: move pacman config and repo into pacman module
* refactor: use Pacman object instead of Installer's pacstrap method
* fix: break after first sync
* fix: keep old build script for now
* use nullish operator for base_packages and disk_encryption of Installer
* feat: use shutil.which instead of rolling our own implementation
* fix: check for binary only if list is not empty
* fix: import Enum and fix mypy errors
* refactor: use nullish operator for default values
* refactor: linear search for key in Installer._trace_log only once
* fix: use logs instead of the entirety of self._trace_log when searching for key
* refactor: do not copy slice of bytes for search
* refactor: use rfind only once to iterate over logs, do not raise ValueError in clear_vt100_escape_codes since TYPE_CHECKING will take care of it.
* refactor: try decoding trace log before falling back to strigification
* refactor: use an empty dict as default for callbacks in SysCommand.__init__
* refactor: use nullish or operator for slice start and end when not specified
* refactor: use nullish or operator for SysCommand session
* refactor: use pre-existing decode method in __repr__ for SysCommand
* fix: overindentation
* fix: use shallow copy of callbacks to prevent mutating the key-value relationships of the argument dict
* refactor: use truthy value of self.session is not None for json encoding SysCommand
* refactor: directly assign to SysCommand.session in create_session since it short circuits to True if already present
* refactor: use dict.items() instead of manually retrieving the value using the key
* refactor: user_config_to_json method sounds pretty self explanatory
* refactor: store path validity as boolean for return
* refactor: use pathlib.Path.write_text to write configs to destinations
* fix: cannot use assignment expressions with expression
* fix: use config_output.save for saving both config and creds
* refactor: switch dictionary keys and values for options to avoid redundancy
* refactor: use itertools.takewhile to collect locale.gen entries until the empty line
* refactor: use iterative approach for nvidia driver fix
* refactor: install packages if not nvidia
* refactor: return early if no profile is selected
* refactor: use strip to remove commented lines
* fix: install additional packages only when we have a driver
* fix: path with one command is matched as relative to '.'
* fix: remove translation for debug log
---------
Co-authored-by: Anton Hvornum <anton@hvornum.se>
* Check if pacman is available
* Update pacman call
* Added a graceful wait to `run_pacman`
* Fix flake8
Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com>
Co-authored-by: Anton Hvornum <anton.feeds+github@gmail.com>
* Added type annotations for 1/5 of the files.
There's bound to be some issues with type miss-match, will sort that out later.
* Added type hints for 4/5 of the code
* Added type hints for 4.7/5 of the code
* Added type hints for 5/5 of the code base
* Split the linters into individual files
This should help with more clearly show which runner is breaking since they don't share a single common name any longer. Also moved mypy settings into pyproject.toml
* Fixed some of the last flake8 issues
* Missing parameter
* Fixed invalid lookahead types
* __future__ had to be at the top
* Fixed last flake8 issues
This fix introduces changes so that development can be done (and tested) on other platforms than Linux. This is a convenience fix and shouldn't break anything (simply a few Linux-specific imports that have moved into the functions where they are used).
This commit also introduces sorting based on a list of priorities (where the default will be last if not matched).
* added support for ingesting config
* fixed condition to check key in dictionary
* Removed redundant code, profile and desktop keys are now optional
* Added base-config.json and support for pulling credentials from .env
* added base config file and env file for users credentials
* added silent install switch
* added python-dotenv as a dependency
* Updated Readme to include argparse changes as well as config ingestion
* Updated Readme to include argparse changes as well as config ingestion
* fixed typo in pyproject.toml
* Replaced the magic __builtin__ global variable. This should fix mypy complaints while still retaining the same functionality, kinda. It's less automatic but it's also less of dark magic, which makes sense for anyone but me.
* Fixes string index error.
* Quotation error.
* fixed initializing --script argument
* added python-dotenv as a dependency
* Installation can't be silent if config is not passed
* fixed silent install help
* fixed condition for ask_user_questions
* reverted to creating profile object properly
* Cleaned up and incorporated suggestions
* added Profile import
* added condition if Profile is null
* fixed condition
* updated parsing vars from argparse
* removed loading users from .env
* Reworking SysCommand & Moving to localectl for locale related activities (#4)
* Moving to `localectl` rather than local file manipulation *(both for listing locales and setting them)*.
* Swapped `loadkeys` for localectl.
* Renamed `main` to `maim` in awesome profile.
* Created `archinstall.Boot(<installation>)` which spawns a `systemd-nspawn` container against the installation target.
* Exposing systemd.py's internals to archinstall global scope.
* Re-worked `SysCommand` completely, it's now a wrapper for `SysCommandWorker` which supports interacting with the process in a different way. `SysCommand` should behave just like the old one, for backwards compatibility reasons. This fixes#68 and #69.
* `SysCommand()` now has a `.decode()` function that defaults to `UTF-8`.
* Adding back peak_output=True to pacstrap.
Co-authored-by: Anton Hvornum <anton.feeds@gmail.com>
Co-authored-by: Dylan Taylor <dylan@dylanmtaylor.com>
Co-authored-by: Anton Hvornum <anton@hvornum.se>
Co-authored-by: Anton Hvornum <anton.feeds@gmail.com>
* fixed indent
* removed redundant import
* removed duplicate import
* removed duplicate import
Co-authored-by: Anton Hvornum <anton.feeds@gmail.com>
Co-authored-by: Anton Hvornum <anton@hvornum.se>
Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
* Moving to `localectl` rather than local file manipulation *(both for listing locales and setting them)*.
* Swapped `loadkeys` for localectl.
* Renamed `main` to `maim` in awesome profile.
* Created `archinstall.Boot(<installation>)` which spawns a `systemd-nspawn` container against the installation target.
* Exposing systemd.py's internals to archinstall global scope.
* Re-worked `SysCommand` completely, it's now a wrapper for `SysCommandWorker` which supports interacting with the process in a different way. `SysCommand` should behave just like the old one, for backwards compatibility reasons. This fixes#68 and #69.
* `SysCommand()` now has a `.decode()` function that defaults to `UTF-8`.
* Adding back peak_output=True to pacstrap.
Co-authored-by: Anton Hvornum <anton.feeds@gmail.com>
Co-authored-by: Dylan Taylor <dylan@dylanmtaylor.com>