From 1bb66e70e7927fe0afeb94bfb9dcb2efca8fd875 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sat, 25 Jun 2022 22:38:49 -0400 Subject: [PATCH] Initial file upload commit (not yet usable) --- README.md | 25 +++++ chrootInstall.sh | 128 +++++++++++++++++++++++ config-files/grub | 57 ++++++++++ config-files/grub-nvidia | 57 ++++++++++ config-files/makepkg.conf | 158 ++++++++++++++++++++++++++++ config-files/nvidia-hook | 15 +++ config-files/nvidia-hook-lts | 15 +++ config-files/paccache-clean-hook | 11 ++ config-files/pacman.conf | 100 ++++++++++++++++++ config-files/pacman.conf-g14 | 104 ++++++++++++++++++ config-files/paru.conf | 38 +++++++ install.sh | 174 +++++++++++++++++++++++++++++++ 12 files changed, 882 insertions(+) create mode 100644 README.md create mode 100755 chrootInstall.sh create mode 100755 config-files/grub create mode 100755 config-files/grub-nvidia create mode 100755 config-files/makepkg.conf create mode 100755 config-files/nvidia-hook create mode 100755 config-files/nvidia-hook-lts create mode 100644 config-files/paccache-clean-hook create mode 100755 config-files/pacman.conf create mode 100755 config-files/pacman.conf-g14 create mode 100755 config-files/paru.conf create mode 100755 install.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..b863641 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# Overview +An Artix Linux installation script that can be used to install and configure Artix Linux with my preferred setup. + +Some major/noteworthy differences from common configurations: + +- opendoas is used in place of sudo +- pipewire is used in place of pulseaudio +- EXT4 fast_commit mode is enabled by default +- makepkg is configured with better compression algorithms than the defaults and is forced to use all cores + +# Usage +Upon loading up the official Artic base ISO, logging in, switching to the root user, and connecting to the internet, run: + +``` +curl https://raw.githubusercontent.com/rwinkhart/artix-install-script/main/install.sh -o install.sh +chmod +x install.sh +./install.sh +``` + +After running the script, it will ask you some questions about your desired configuration. Answer them and then the installation will complete automatically. + +# Supported Devices +Generic: + +- Most x86_64 desktops, laptops, and servers diff --git a/chrootInstall.sh b/chrootInstall.sh new file mode 100755 index 0000000..04766b1 --- /dev/null +++ b/chrootInstall.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +# Importing Variables +formfactor="$(cat /tempfiles/formfactor)" +cpu="$(cat /tempfiles/cpu)" +gpu="$(cat /tempfiles/gpu)" +intel_vaapi_driver="$(cat /tempfiles/intel_vaapi_driver)" +boot="$(cat /tempfiles/boot)" +disk="$(cat /tempfiles/disk)" +username="$(cat /tempfiles/username)" +userpassword="$(cat /tempfiles/userpassword)" +rootpassword="$(cat /tempfiles/rootpassword)" + +# configuring locale and clock Settings +echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen +echo 'LANG=en_US.UTF-8' > /etc/locale.conf +ln -s /usr/share/zoneinfo/America/"$timezone" /etc/localtime +locale-gen +hwclock --systohc --utc + +# networkmanager configuration +pacman -S networkmanager-openrc +rc-update add NetworkManager + +# makepkg configuration +curl https://raw.githubusercontent.com/rwinkhart/universal-arch-install-script/main/config-files/x86_64/makepkg.conf -o /etc/makepkg.conf + +# bootloader installation and configuration +pacman -S grub efibootmgr os-prober mtools dosfstools --noconfirm +if [ "$boot" == 1 ]; then + grub-install --target=x86_64-efi --bootloader-id=GRUB-rwinkhart --recheck +fi +if [ "$boot" == 2 ]; then + grub-install --target=i386-pc "$disk" +fi +cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo +if [ "$gpu" != 'NVIDIA' ]; then + curl https://raw.githubusercontent.com/rwinkhart/universal-arch-install-script/main/config-files/x86_64/grub -o /etc/default/grub +else + curl https://raw.githubusercontent.com/rwinkhart/universal-arch-install-script/main/config-files/x86_64/grub-nvidia -o /etc/default/grub +fi +grub-mkconfig -o /boot/grub/grub.cfg + +# account setup +groupadd classmod +echo "$rootpassword +$rootpassword +" | passwd +useradd -m -g users -G classmod "$username" +echo "$userpassword +$userpassword +" | passwd "$username" + +# opendoas configuration +echo "permit persist keepenv $username as root" > /etc/doas.conf +ln -s /usr/bin/doas /usr/bin/sudo + +# pacman configuration +curl https://raw.githubusercontent.com/rwinkhart/arch-install-script/main/config-files/universal/paccache-clean-hook -o /etc/pacman.d/hooks/paccache-clean.hook +if [ "$gpu" == 'NVIDIA' ]; then + curl https://raw.githubusercontent.com/rwinkhart/universal-arch-install-script/main/config-files/x86_64/nvidia-hook -o /etc/pacman.d/hooks/nvidia.hook +fi + +# installing hardware-specific packages +if [ "$cpu" == 'AuthenticAMD' ]; then + pacman -S amd-ucode --noconfirm +else + pacman -S intel-ucode --noconfirm +fi +if [ "$gpu" == 'AMD' ]; then + pacman -S mesa vulkan-icd-loader vulkan-radeon libva-mesa-driver libva-utils --needed --noconfirm +elif [ "$gpu" == 'Intel' ]; then + pacman -S mesa vulkan-icd-loader vulkan-intel --needed --noconfirm + if [ "$intel_vaapi_driver" == 1 ]; then + pacman -S libva-intel-driver libva-utils --needed --noconfirm + fi + if [ "$intel_vaapi_driver" == 2 ]; then + pacman -S intel-media-driver libva-utils --needed --noconfirm + fi +elif [ "$gpu" == 'NVIDIA' ]; then + pacman -S nvidia nvidia-utils nvidia-settings vulkan-icd-loader --needed --noconfirm + echo 'options nvidia "NVreg_DynamicPowerManagement=0x02"' > /etc/modprobe.d/nvidia.conf + echo 'options nvidia-drm modeset=1' > /etc/modprobe.d/zz-nvidia-modeset.conf +fi + +# disable kernel watchdog +echo 'blacklist iTCO_wdt' > /etc/modprobe.d/blacklist.conf + +if [ "$formfactor" == 1 ]; then + pacman -R xorg-xbacklight --noconfirm + pacman -S powertop acpid-openrc acpilight --needed --noconfirm + rc-update add acpid + echo 'SUBSYSTEM=="backlight", ACTION=="add", \ + RUN+="/bin/chgrp classmod /sys/class/backlight/%k/brightness", \ + RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness" + ' > /etc/udev/rules.d/screenbacklight.rules +fi + +# setting home directory permissions +chmod -R 700 /home + +# installing desktop environment and addons + utilities +if [ "$formfactor" -lt 3 ] || [ "$formfactor" == 4 ]; then + pacman -S pipewire pipewire-pulse pipewire-jack pipewire-alsa plasma-desktop sddm-openrc sddm-kcm kscreen kdeplasma-addons spectacle gwenview plasma-nm plasma-pa breeze-gtk kde-gtk-config kio-extras khotkeys kwalletmanager pcmanfm-qt yakuake ark kate bluedevil bluez --needed --noconfirm + rc-update add sddm +fi + +# installing and configuring basic software packages +if [ "$formfactor" == 3 ]; then + pacman -S openssh --needed --noconfirm + mkdir /home/"$username"/.ssh + touch /home/"$username"/.ssh/authorized_keys + chmod 700 /home/"$username"/.ssh + chmod 600 /home/"$username"/.ssh/authorized_keys + chown -R "$username" /home/"$username"/.ssh +fi +echo -e '* hard memlock 64\n* soft memlock 2097152\n# End of file' > /etc/security/limits.conf # increases hard memlock limit to 2 GiB (useful for some apps, such as rpcs3) +mkdir -p /home/"$username"/.gnupg +echo 'pinentry-program /usr/bin/pinentry-tty' > /home/"$username"/.gnupg/gpg-agent.conf # forces gpg prompts to use terminal input +pacman -S neofetch htop cpupower --needed --noconfirm + +# finishing up + cleaning +rm -rf /chrootInstall.sh /tempfiles +echo -e "\n---------------------------------------------------------" +echo installation completed! +echo please poweroff and remove the installation media before powering back on. +echo -e "---------------------------------------------------------\n" +exit diff --git a/config-files/grub b/config-files/grub new file mode 100755 index 0000000..a22d412 --- /dev/null +++ b/config-files/grub @@ -0,0 +1,57 @@ +# GRUB boot loader configuration - Universal-ish Arch Installer 05/07/2022 + +GRUB_DEFAULT="Advanced options for Arch Linux>Arch Linux, with Linux linux" +GRUB_TIMEOUT=0 +GRUB_DISTRIBUTOR="Arch" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet nowatchdog mem_sleep_default=deep" +GRUB_CMDLINE_LINUX="" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `vbeinfo' +GRUB_GFXMODE=auto + +# Uncomment to allow the kernel use the same resolution used by grub +GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" +#GRUB_THEME="/path/to/gfxtheme" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires +# setting 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT=true + +# Uncomment to disable submenus in boot menu +#GRUB_DISABLE_SUBMENU=y diff --git a/config-files/grub-nvidia b/config-files/grub-nvidia new file mode 100755 index 0000000..c98dd01 --- /dev/null +++ b/config-files/grub-nvidia @@ -0,0 +1,57 @@ +# GRUB boot loader configuration - Universal-ish Arch Installer 05/07/2022 + +GRUB_DEFAULT="Advanced options for Arch Linux>Arch Linux, with Linux linux" +GRUB_TIMEOUT=0 +GRUB_DISTRIBUTOR="Arch" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet nowatchdog mem_sleep_default=deep nvidia-drm.modeset=1" +GRUB_CMDLINE_LINUX="" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `vbeinfo' +GRUB_GFXMODE=auto + +# Uncomment to allow the kernel use the same resolution used by grub +GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" +#GRUB_THEME="/path/to/gfxtheme" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires +# setting 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT=true + +# Uncomment to disable submenus in boot menu +#GRUB_DISABLE_SUBMENU=y diff --git a/config-files/makepkg.conf b/config-files/makepkg.conf new file mode 100755 index 0000000..77af408 --- /dev/null +++ b/config-files/makepkg.conf @@ -0,0 +1,158 @@ +#!/hint/bash +# +# /etc/makepkg.conf - Universal-ish Arch Installer 12/14/2021 +# + +######################################################################### +# SOURCE ACQUISITION +######################################################################### +# +#-- The download utilities that makepkg should use to acquire sources +# Format: 'protocol::agent' +DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u' + 'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u' + 'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' + 'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' + 'rsync::/usr/bin/rsync --no-motd -z %u %o' + 'scp::/usr/bin/scp -C %u %o') + +# Other common tools: +# /usr/bin/snarf +# /usr/bin/lftpget -c +# /usr/bin/wget + +#-- The package required by makepkg to download VCS sources +# Format: 'protocol::package' +VCSCLIENTS=('bzr::bzr' + 'fossil::fossil' + 'git::git' + 'hg::mercurial' + 'svn::subversion') + +######################################################################### +# ARCHITECTURE, COMPILE FLAGS +######################################################################### +# +CARCH="x86_64" +CHOST="x86_64-pc-linux-gnu" + +#-- Compiler and Linker Flags +#CPPFLAGS="" +CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection" +CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" +LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" +#RUSTFLAGS="-C opt-level=2" +#-- Make Flags: change this for DistCC/SMP systems +MAKEFLAGS="-j$(nproc)" +#-- Debugging flags +DEBUG_CFLAGS="-g -fvar-tracking-assignments" +DEBUG_CXXFLAGS="-g -fvar-tracking-assignments" +#DEBUG_RUSTFLAGS="-C debuginfo=2" + +######################################################################### +# BUILD ENVIRONMENT +######################################################################### +# +# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign) +# A negated environment option will do the opposite of the comments below. +# +#-- distcc: Use the Distributed C/C++/ObjC compiler +#-- color: Colorize output messages +#-- ccache: Use ccache to cache compilation +#-- check: Run the check() function if present in the PKGBUILD +#-- sign: Generate PGP signature file +# +BUILDENV=(!distcc color !ccache check !sign) +# +#-- If using DistCC, your MAKEFLAGS will also need modification. In addition, +#-- specify a space-delimited list of hosts running in the DistCC cluster. +#DISTCC_HOSTS="" +# +#-- Specify a directory for package building. +#BUILDDIR=/tmp/makepkg + +######################################################################### +# GLOBAL PACKAGE OPTIONS +# These are default values for the options=() settings +######################################################################### +# +# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto) +# A negated option will do the opposite of the comments below. +# +#-- strip: Strip symbols from binaries/libraries +#-- docs: Save doc directories specified by DOC_DIRS +#-- libtool: Leave libtool (.la) files in packages +#-- staticlibs: Leave static library (.a) files in packages +#-- emptydirs: Leave empty directories in packages +#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip +#-- purge: Remove files specified by PURGE_TARGETS +#-- debug: Add debugging flags as specified in DEBUG_* variables +#-- lto: Add compile flags for building with link time optimization +# +OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug !lto) + +#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2 +INTEGRITY_CHECK=(sha256) +#-- Options to be used when stripping binaries. See `man strip' for details. +STRIP_BINARIES="--strip-all" +#-- Options to be used when stripping shared libraries. See `man strip' for details. +STRIP_SHARED="--strip-unneeded" +#-- Options to be used when stripping static libraries. See `man strip' for details. +STRIP_STATIC="--strip-debug" +#-- Manual (man and info) directories to compress (if zipman is specified) +MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info}) +#-- Doc directories to remove (if !docs is specified) +DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) +#-- Files to be removed from all packages (if purge is specified) +PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) +#-- Directory to store source code in for debug packages +DBGSRCDIR="/usr/src/debug" + +######################################################################### +# PACKAGE OUTPUT +######################################################################### +# +# Default: put built package and cached source in build directory +# +#-- Destination: specify a fixed directory where all packages will be placed +#PKGDEST=/home/packages +#-- Source cache: specify a fixed directory where source files will be cached +#SRCDEST=/home/sources +#-- Source packages: specify a fixed directory where all src packages will be placed +#SRCPKGDEST=/home/srcpackages +#-- Log files: specify a fixed directory where all log files will be placed +#LOGDEST=/home/makepkglogs +#-- Packager: name/email of the person or organization building packages +#PACKAGER="John Doe " +#-- Specify a key to use for package signing +#GPGKEY="" + +######################################################################### +# COMPRESSION DEFAULTS +######################################################################### +# +COMPRESSGZ=(pigz -c -f -n) +COMPRESSBZ2=(pbzip2 -c -f) +COMPRESSXZ=(xz -c -z --threads=0 -) +COMPRESSZST=(zstd -c -z -q --threads=0 -) +COMPRESSLRZ=(lrzip -q) +COMPRESSLZO=(lzop -q) +COMPRESSZ=(compress -c -f) +COMPRESSLZ4=(lz4 -q) +COMPRESSLZ=(lzip -c -f) + +######################################################################### +# EXTENSION DEFAULTS +######################################################################### +# +PKGEXT='.pkg.tar.zst' +SRCEXT='.src.tar.gz' + +######################################################################### +# OTHER +######################################################################### +# +#-- Command used to run pacman as root, instead of trying sudo and su +#PACMAN_AUTH=() diff --git a/config-files/nvidia-hook b/config-files/nvidia-hook new file mode 100755 index 0000000..d7c1cc8 --- /dev/null +++ b/config-files/nvidia-hook @@ -0,0 +1,15 @@ +[Trigger] +Operation=Install +Operation=Upgrade +Operation=Remove +Type=Package +Target=nvidia +Target=linux +# Change the linux part above and in the Exec line if a different kernel is used + +[Action] +Description=Update Nvidia module in initcpio +Depends=mkinitcpio +When=PostTransaction +NeedsTargets +Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P' diff --git a/config-files/nvidia-hook-lts b/config-files/nvidia-hook-lts new file mode 100755 index 0000000..733c434 --- /dev/null +++ b/config-files/nvidia-hook-lts @@ -0,0 +1,15 @@ +[Trigger] +Operation=Install +Operation=Upgrade +Operation=Remove +Type=Package +Target=nvidia-lts +Target=linux-lts +# Change the linux part above and in the Exec line if a different kernel is used + +[Action] +Description=Update Nvidia module in initcpio +Depends=mkinitcpio +When=PostTransaction +NeedsTargets +Exec=/bin/sh -c 'while read -r trg; do case $trg in linux-lts) exit 0; esac; done; /usr/bin/mkinitcpio -P' diff --git a/config-files/paccache-clean-hook b/config-files/paccache-clean-hook new file mode 100644 index 0000000..bfd7b86 --- /dev/null +++ b/config-files/paccache-clean-hook @@ -0,0 +1,11 @@ +[Trigger] +Operation = Remove +Operation = Install +Operation = Upgrade +Type = Package +Target = * + +[Action] +Description = Keep the last cache and the currently installed. +When = PostTransaction +Exec = /usr/bin/paccache -rvk2 diff --git a/config-files/pacman.conf b/config-files/pacman.conf new file mode 100755 index 0000000..524d627 --- /dev/null +++ b/config-files/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf - Universal-ish Arch Installer 12/14/2021 +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +#ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/config-files/pacman.conf-g14 b/config-files/pacman.conf-g14 new file mode 100755 index 0000000..715411b --- /dev/null +++ b/config-files/pacman.conf-g14 @@ -0,0 +1,104 @@ +# +# /etc/pacman.conf - Universal-ish Arch Installer 12/14/2021 +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +#ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[g14] +SigLevel = DatabaseNever Optional TrustAll +Server = https://arch.asus-linux.org + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/config-files/paru.conf b/config-files/paru.conf new file mode 100755 index 0000000..e8eee8a --- /dev/null +++ b/config-files/paru.conf @@ -0,0 +1,38 @@ +# +# $PARU_CONF - Universal-ish Arch Installer 12/14/2021 +# /etc/paru.conf +# ~/.config/paru/paru.conf +# +# See the paru.conf(5) manpage for options + +# +# GENERAL OPTIONS +# +[options] +PgpFetch +Devel +Provides +DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg +#AurOnly +BottomUp +#RemoveMake +#SudoLoop +#UseAsk +#SaveChanges +#CombinedUpgrade +#CleanAfter +#UpgradeMenu +#NewsOnUpgrade + +#LocalRepo +#Chroot +#Sign +#SignDb + +# +# Binary OPTIONS +# +#[bin] +#FileManager = vifm +#MFlags = --skippgpcheck +#Sudo = doas diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..a3f2c53 --- /dev/null +++ b/install.sh @@ -0,0 +1,174 @@ +#!/bin/bash +loadkeys us +echo ---------------------------------------------------------------------------------------------- +echo rwinkhart\'s artix installer +echo last updated june 25, 2022 +echo ---------------------------------------------------------------------------------------------- +echo You will be asked some questions before installation. +echo -e "----------------------------------------------------------------------------------------------\n" +read -n 1 -s -r -p 'Press any key to continue' + +# start questions +echo Special Devices: +echo -e '\nspecial devices:\n1. asus rog zephyrus g14 2020\ngeneric:\n2. laptop\n3. desktop\n4. server\n' +read -n 1 -r -p "formfactor: " formfactor + +fdisk -l +read -r -p "disk: " disk + +read -r -p "swap (in GB): " swap + +read -n 1 -r -p "clean install? (y/N) " wipe + +read -r -p "username: " username + +read -r -p "$username password: " userpassword + +read -r -p "root password: " rootpassword + +read -r -p "hostname: " hostname +# stop questions + +# start hardware detection +cpu=$(lscpu | grep 'Vendor ID:' | awk 'FNR == 1 {print $3;}') +gpu=$(lspci | grep 'VGA compatible controller:' | awk 'FNR == 1 {print $5;}') +# stop hardware detection + +# start conditional questions +if [ "$gpu" == 'Intel' ]; then + echo -e '1. libva-intel-driver (intel igpus up to coffee lake)\n2. intel-media-driver (intel igpus/dgpus newer than coffee lake)\n' + read -n 1 -r -p "va-api driver: " intel_vaapi_driver +fi +# stop conditional questions + +# start variable manipulation +wipe=$(echo "$wipe" | tr '[:upper:]' '[:lower:]') +username=$(echo "$username" | tr '[:upper:]' '[:lower:]') +hostname=$(echo "$hostname" | tr '[:upper:]' '[:lower:]') + +disk0=$disk +if [[ "$disk" == /dev/nvme0n* ]]; then + disk="$disk"'p' +fi +if [[ "$disk" == /dev/mmcblk* ]]; then + disk="$disk"'p' +fi +# stop variable manipulation + +# determine if running as UEFI or BIOS +if [ -d "/sys/firmware/efi" ]; then + boot=1 +else + boot=2 +fi + +# start partitioning +if [ "$boot" == 1 ]; then + # gpt/uefi partitioning + if [ "$wipe" == y ]; then + partitions=0 + echo "g + n + 1 + + +256M + t + 1 + n + + + + w + " | fdisk -w always -W always "$disk0" + else + partitions=$(lsblk "$disk0" -o NAME | grep -o '.$' | tail -1) + echo "n + + + +256M + t + + 1 + n + + + + w + " | fdisk -W always "$disk0" + fi + + # disk formatting + mkfs.fat -F32 "$disk""$((1 + "$partitions"))" + mkfs.ext4 -O fast_commit "$disk""$((2 + "$partitions"))" + + # mounting storage and efi partitions + mount "$disk""$((2 + "$partitions"))" /mnt + mkdir -p /mnt/{boot/EFI,etc} + mount "$disk""$((1 + "$partitions"))" /mnt/boot/EFI +else + # mbr/bios partitioning + if [ "$wipe" == y ]; then + partitions=0 + echo "o + n + p + + + + w + " | fdisk -w always -W always "$disk0" + else + partitions=$(lsblk "$disk0" -o NAME | grep -o '.$' | tail -1) + echo "n + p + + + + w + " | fdisk -W always "$disk0" + fi + + # disk formatting + mkfs.ext4 -O fast_commit "$disk""$((1 + "$partitions"))" + + # mounting storage (no efi partition, using dos label) + mount "$disk""$((1 + "$partitions"))" /mnt + mkdir /mnt/etc +fi + +# create and mount swap file +if [ "$swap" != 0 ]; then + dd if=/dev/zero of=/mnt/swapfile bs=1G count="$swap" status=progress + chmod 600 /mnt/swapfile + mkswap /mnt/swapfile + swapon /mnt/swapfile +fi + +fstabgen -U /mnt >> /mnt/etc/fstab +# stop partitioning + +# setting hostname +echo "$hostname" > /mnt/etc/hostname + +# installing base packages +base_devel='autoconf automake binutils bison fakeroot file findutils flex gawk gcc gettext grep groff pigz pbzip2 libtool m4 make pacman patch pkgconf sed opendoas texinfo which' +if [ "$formfactor" -lt 3 ]; then +basestrap /mnt base $base_devel openrc elogind-openrc linux linux-firmware +fi + +# exporting variables +mkdir /mnt/tempfiles +echo "$formfactor" > /mnt/tempfiles/formfactor +echo "$cpu" > /mnt/tempfiles/cpu +echo "$gpu" > /mnt/tempfiles/gpu +echo "$intel_vaapi_driver" > /mnt/tempfiles/intel_vaapi_driver +echo "$boot" > /mnt/tempfiles/boot +echo "$disk0" > /mnt/tempfiles/disk +echo "$username" > /mnt/tempfiles/username +echo "$userpassword" > /mnt/tempfiles/userpassword +echo "$rootpassword" > /mnt/tempfiles/rootpassword + +# download and initiate part 2 +curl https://raw.githubusercontent.com/rwinkhart/universal-arch-install-script/main/universal/secondInstall.sh -o /mnt/chrootInstall.sh +chmod +x /mnt/chrootInstall.sh +artix-chroot /mnt ./chrootInstall.sh