{"id":24216621,"url":"https://github.com/creativecodecat/base-arch-install","last_synced_at":"2026-03-19T14:59:53.488Z","repository":{"id":255932626,"uuid":"853917825","full_name":"CreativeCodeCat/Base-Arch-Install","owner":"CreativeCodeCat","description":"My basic arch install.","archived":false,"fork":false,"pushed_at":"2024-09-08T18:18:36.000Z","size":9,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T05:06:59.489Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CreativeCodeCat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-07T22:34:21.000Z","updated_at":"2024-10-31T14:32:21.000Z","dependencies_parsed_at":"2024-11-14T11:25:36.497Z","dependency_job_id":"71b765bc-7a8c-4f76-969f-9dd8d4716926","html_url":"https://github.com/CreativeCodeCat/Base-Arch-Install","commit_stats":null,"previous_names":["hecodes2much/base-arch-install","creativecodecat/base-arch-install"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreativeCodeCat%2FBase-Arch-Install","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreativeCodeCat%2FBase-Arch-Install/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreativeCodeCat%2FBase-Arch-Install/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CreativeCodeCat%2FBase-Arch-Install/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CreativeCodeCat","download_url":"https://codeload.github.com/CreativeCodeCat/Base-Arch-Install/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241721596,"owners_count":20009205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-14T04:21:45.623Z","updated_at":"2026-03-06T07:02:10.882Z","avatar_url":"https://github.com/CreativeCodeCat.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Setup Guide\n\n## WiFi\n\nEnter iwctl\n\n```\n$ iwctl\n```\n\nWhen inside, check for the name of your wireless devices.\n\n```\ndevice list\n```\n\nIf your device name is wlan0, connect using the following command\n\n```\nstation wlan0 connect \u003cSSID\u003e\n```\n\nMake sure to enter in your password\n\nexit when complete\n\n```\nexit\n```\n\n## SSH\n\nEnable sshd (should be done by default)\n\n```\n$ systemctl enable sshd\n```\n\nset a password for the current user\n\n```\n$ passwd\n```\n\n## Write random data\n\nList blocks. In my case, my drives are nvme0n1 and nvme1n1. Your's might be the\nsame, or the might be an sdx drive, such as sda or sdb.\n\n```\n$ lsblk\n```\n\nWrite random data into your drive.\n\n```\n$ dd if=/dev/urandom of=/dev/nvme0n1 status=progress bs=4096\n```\n\n## Partitioning Data\n\nGet the names of the blocks\n\n```\n$ lsblk\n```\n\nFor both partition setups, you'll want to setup a table on your primary drive.\n\n```\n$ gdisk /dev/nvme0n1\n```\n\nInside of gdisk, you can print the table using the `p` command.\n\nTo create a new partition use the `n` command. The below table shows \nthe disk setup I have for my primary drive\n\n| partition | first sector | last sector | code |\n|-----------|--------------|-------------|------|\n| 1         | default      | +512M       | ef00 |\n| 2         | default      | +4G         | ef02 |\n| 3         | default      | default     | 8309 |\n\nIf you have a second drive for your home disk, then your table would be as \nfollows.\n\n| partition | first sector | last sector | code |\n|-----------|--------------|-------------|------|\n| 1         | default      | default     | 8302 |\n\n## Encryption\n\nLoad the encryption modules to be safe.\n\n```\n$ modprobe dm-crypt\n$ modprobe dm-mod\n```\n\nSetting up encryption on our luks lvm partiton\n\n```\n$ cryptsetup luksFormat -v -s 512 -h sha512 /dev/nvme0n1p3\n```\n\nEnter in your password and **Keep it safe**. There is no \"forgot password\" here.\n\n\nIf you have a home partition, then initialize this as well\n\n```\n$ cryptsetup luksFormat -v -s 512 -h sha512 /dev/nvme0n1p4\n```\n\nMount the drives:\n\n```\n$ cryptsetup open /dev/nvme0n1p3 luks_lvm\n```\n\nIf you have a home parition:\n\n```\n$ cryptsetup open /dev/nvme0n1p4 arch-home\n```\n\n## Volume setup\n\nCreate the volume and volume group\n\n```\n$ pvcreate /dev/mapper/luks_lvm\n\n$ vgcreate arch /dev/mapper/luks_lvm\n```\n\nCreate a volume for your swap space. A good size for this is your RAM size + 2GB.\nIn my case, 64GB of RAM + 2GB = 66G.\n\n```\n$ lvcreate -n swap -L 66G arch\n```\n\nNext you have a few options depending on your setup\n\n### Single Disk\nIf you have a single disk, you can either have a single volume for your root \nand home, or two separate volumes.\n\n#### Single volume \n\nSingle volume is the most straightforward. To do this, just use the entire\ndisk space for your root volume\n\n```\n$ lvcreate -n root -l +100%FREE arch\n```\n\n#### Two volumes\n\nFor two volumes, you'll need to estimate the max size you want for either your\nroot or home volumes. With a root volume of 200G, this looks like:\n\n```\n$ lvcreate -n root -L 200G arch\n```\n\nThen use remaining disk space for home\n\n```\n$ lvcreate -n home -l +100%FREE arch\n```\n\n### Dual Disk\n\nIf you have two disks, then create a single volume on your LVM disk.\n\n```\n$ lvcreate -n root -l +100%FREE arch\n```\n\n\n## Filesystems\n\nFAT32 on EFI partition\n\n```\n$ mkfs.fat -F32 /dev/nvme0n1p1 \n```\n\nEXT4 on Boot partition\n\n```\n$ mkfs.ext4 /dev/nvme0n1p2\n```\n\nBTRFS on root\n\n```\n$ mkfs.btrfs -L root /dev/mapper/arch-root\n```\n\nBTRFS on home if exists\n\n```\n$ mkfs.btrfs -L home /dev/mapper/arch-home\n```\n\nSetup swap device\n\n```\n$ mkswap /dev/mapper/arch-swap\n```\n\n## Mounting\n\nMount swap\n\n```\n$ swapon /dev/mapper/arch-swap\n$ swapon -a\n```\n\nMount root \n\n```\n$ mount /dev/mapper/arch-root /mnt\n```\n\nCreate home and boot\n\n```\n$ mkdir -p /mnt/{home,boot}\n```\n\nMount the boot partition\n\n```\n$ mount /dev/nvme0n1p2 /mnt/boot\n```\n\nMount the home partition if you have one, otherwise skip this\n\n```\n$ mount /dev/mapper/arch-home /mnt/home\n```\n\nCreate the efi directory\n\n```\n$ mkdir /mnt/boot/efi\n```\n\nMount the EFI directory\n\n```\n$ mount /dev/nvme0n1p1 /mnt/boot/efi\n```\n\n## Install arch\n\n```\n$ pacstrap -K /mnt base linux linux-firmware dracut\n```\n\nWith base-devel\n\n```\n$ pacstrap -K /mnt base base-devel linux linux-firmware dracut\n```\n\nLoad the file table\n\n```\n$ genfstab -U -p /mnt \u003e /mnt/etc/fstab\n```\n\nchroot into your installation\n\n```\n$ arch-chroot /mnt /bin/bash\n```\n\n## Configuring\n\n### Text Editor\n\nInstall a text editor\n\n```\n$ pacman -S neovim\n```\n\n```\n$ pacman -S nano\n```\n\n### Dracut configuration\n\nOpen the dracut configuration file\n\n```\n$ nvim /etc/dracut.conf\n```\n\nEnsure it's configured for encryption and LVM (for root and home partitions)\n\n```\nadd_dracutmodules+=\" lvm crypt \"\n```\n\n### Bootloader\n\nInstall grub and efibootmgr\n\n```\n$ pacman -S grub efibootmgr\n```\n\nSetup grub on efi partition\n\n```\n$ grub-install --efi-directory=/boot/efi\n```\n\nObtain your LVM partition device UUID\n\n```\nblkid /dev/nvme0n1p3\n```\n\nCopy this to your clipboard\n\n```\n$ nvim /etc/default/grub\n```\n\nAdd in the following kernel parameters\n\n```\nroot=/dev/mapper/arch-root cryptdevice=UUID=\u003cuuid\u003e:luks_lvm\n```\n\n### Keyfile\n\n```\n$ mkdir /secure\n```\n\nRoot keyfile\n\n```\n$ dd if=/dev/random of=/secure/root_keyfile.bin bs=512 count=8\n```\n\nHome keyfile if home partition exists\n\n```\n$ dd if=/dev/random of=/secure/home_keyfile.bin bs=512 count=8\n```\n\nChange permissions on these\n\n```\n$ chmod 000 /secure/*\n```\n\nAdd to partitions\n\n```\n$ cryptsetup luksAddKey /dev/nvme0n1p3 /secure/root_keyfile.bin\n# skip below if using single disk\n$ cryptsetup luksAddKey /dev/nvme0n1p4 /secure/home_keyfile.bin\n```\n\n```\n$ nvim /etc/dracut.conf\n```\n\nAdd the keyfile paths:\n\n```\nFILES+=\"/secure/root_keyfile.bin\"\n```\n\n### Home Partition Crypttab (Skip if single disk)\n\nGet UUID of home partition\n\n```\n$ blkid /dev/nvme0n1p4\n```\n\nOpen up the crypt table.\n\n```\n$ nvim /etc/crypttab\n```\n\nAdd in the following line at the bottom of the table\n\n```\narch-home UUID=\u003cuuid\u003e /secure/home_keyfile.bin\n```\n\nReload dracut configuration\n\n```\n$ dracut -f\n```\n\n## Grub\n\nCreate grub config\n\n```\n$ grub-mkconfig -o /boot/grub/grub.cfg\n$ grub-mkconfig -o /boot/efi/EFI/arch/grub.cfg\n```\n\n## System Configuration\n\n### Timezone\n\n```\nln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime\n```\n\n### NTP\n\n```\n$ nvim /etc/systemd/timesyncd.conf\n```\n\nAdd in the NTP servers\n\n```\n[Time]\nNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org \nFallbackNTP=0.pool.ntp.org 1.pool.ntp.org\n```\n\nEnable timesyncd\n\n```\n# systemctl enable systemd-timesyncd.service\n```\n\n### Locale\n\n```\n$ nvim /etc/locale.gen\n```\n\nUncomment the UTF8 lang you want\n\n```\nen_US.UTF-8 UTF-8\n```\n\n```\n$ locale-gen\n```\n\n```\n$ nvim /etc/locale.conf\n```\n\n```\nLANG=en_US.UTF-8\n```\n\n### Hostname\n\nEnter it into your `/etc/hostname` file\n\n```\n$ nvim /etc/hostname\n```\n\nOr \n\n```\n$ echo \"mymachine\" \u003e /etc/hostname\n```\n\n### Users\n\nFirst secure the root user by setting a password\n\n```\n$ passwd\n```\n\nThen install the shell you want (fish)\n\n```\n$ pacman -S fish\n```\n\nAdd a new user as follows\n\n```\n$ useradd -m -G wheel -s /usr/bin/fish user\n```\n\nSet the password on the user\n\n```\n$ passwd user\n```\n\nAdd the wheel group to sudoers\n\n```\n$ EDITOR=nvim visudo\n```\n\n```\n%wheel ALL=(ALL:ALL) ALL\n```\n\n### Network Connectivity\n\n```\n$ pacman -S networkmanager\n$ systemctl enable NetworkManager\n```\n\n### Display Manager\n\nInstall KDE Plasma\n\n```\n$ pacman -S plasma kde-applications\n```\n\nInstall SDDM\n\n```\n$ pacman -S sddm\n```\n\nEnable SDDM\n\n```\n$ systemctl enable sddm\n```\n\n### Microcode\n\nFor AMD\n\n```\n$ pacman -S amd-ucode\n```\n\nFor intel\n\n```\n$ pacman -S intel-ucode\n```\n\n```\n$ grub-mkconfig -o /boot/grub/grub.cfg\n$ grub-mkconfig -o /boot/efi/EFI/arch/grub.cfg\n```\n\n## Reboot\n\n```\n$ exit\n$ umount -R /mnt\n$ reboot now\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreativecodecat%2Fbase-arch-install","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreativecodecat%2Fbase-arch-install","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreativecodecat%2Fbase-arch-install/lists"}