
# [arch-desktop](https://git.caseydelorme.com/cdelorme/arch-desktop)

This repository contains automation to establish a highly functional and lightweight desktop environment.

It was originally written to parity [debian-stretch-desktop](https://git.caseydelorme.com/cdelorme/debian-stretch-desktop).

As there are no "releases" to match, this repository will instead be updated over time as is needed.


## why

I have been a debian proponent for years, and will continue to be for servers.

**However, the 6 months prior to a new debian release are horrible for desktop users.**

Additionally, if attempting to upgrade hardware the lack of up to date drivers due to locked kernel are a serious pain.

_Finally, having now used Arch as my main system for nearly 6 months I am shocked at how stable it is._


## builds

You can build locally using [`packer`](https://www.vagrantup.com/), and [`vagrant`](https://www.packer.io/).

_The image produced will take up over 5GB, and any time you rebuild you may need to run `vagrant box remove arch-desktop` to ensure it updates the image._

The first supported VM system is [`virtualbox`](virtualbox/), and can be built like this:

	cd virtualbox
	packer build packer.json
	vagrant up

The second supported system is [`libvirt`](libvirt/), and can be built like this:

	cd libvirt
	packer build packer.json
	vagrant plugin install vagrant-libvirt
	vagrant up

_This assumes you have `libvirt`, `kvm`, `qemu`, `virt-install`, and `edk2-ovmf` packages installed and running on your host._

_If you encounter issues with temporary directory space during post-processing you may need to set `TMPDIR` to a path on your main disk._

When using `libvirt` with vagrant, you will want to launch `virt-manager` to open the graphical interface (_no combination of `graphics_type` or `video_type` seemed to launch a GUI and instead just crashed with errors_).

Additionally, when testing a fresh build you may need to use `virt-manager` to delete the former `arch-desktop` image from the storage pool in addition to removing it from vagrant (eg. `vagrant box remove arch-desktop libvirt`), since `vagrant box` does not appear to be connected.


## usage

If you are installing on real hardware you can run these commands from the arch installation terminal:

	pacman -S git
	git clone https://git.caseydelorme.com/cdelorme/arch-desktop.git
	cd arch-desktop
	./setup/install.sh

_This may ask for input, and will reboot when finished._


## notes

I ran into quite a few interesting caveats during the creation of this project, and wanted to comment on them.

The pinned comments on the AUR are offensive to beginners and do not answer any questions, RTFM does not explain how to actually fix GPG signature errors.  The wiki is useful, but it is hard to pin down what you are looking for.  So good job being useless by threatening a ban hammer on comments with questions related to the lack of clear instructions on packages.

The `makepkg` restriction that prevents execution as root is dumb as hell.  I get the security constraints, but the instructions to run as nobody are hella flawed; test suites basically can't run as nobody due to directory permissions (so many with loads of undocumented ENV variables), and creating a faux user from a script just to install some relatively common and popular packages seems like a ridiculous work-around.  So great job making automation harder and solving nothing.

Finally, while I am not a fan of how `systemd` forced proliferation into all linux distributions, nor do I care for binary logs (_that seems like a major step backwards_), I am incredibly thankful for how simple `bootctl` made EFI bootloader setup, and also user-space unit files.  However, this also means traditional DOS/BIOS boot loaders such as grub are not supported by these scripts.  _I only wish there was a more clear way to deal with setting up user-space files from scripts during arch installation._


# references

- [Arch Installation Guide](https://wiki.archlinux.org/index.php/installation_guide)
- [old arch docs in system-setup](https://github.com/cdelorme/system-setup/blob/6c0661c5556fae6126e2eb9e7525aafd143b7518/docs/linux/arch/gui.md)
- [arch efi installation guide by GloriousEggroll](https://www.gloriouseggroll.tv/arch-linux-efi-install-guide/)
- [Arch Wiki NVidia Documentation](https://wiki.archlinux.org/index.php/NVIDIA)
- [Arch Wiki makepkg](https://wiki.archlinux.org/index.php/Makepkg)
- [Arch Wiki AUR](https://wiki.archlinux.org/index.php/Arch_User_Repository)
- [ip command cheatsheat](https://access.redhat.com/sites/default/files/attachments/rh_ip_command_cheatsheet_1214_jcs_print.pdf)
- [packer-arch by elasticdog](https://github.com/elasticdog/packer-arch)
- [touchpad configuration](http://add4jhf.blogspot.com/2013/09/touch-pad-deactivation-while-typing-and.html)
- [yay AUR Package Manager](https://github.com/Jguer/yay)
- [Wayland](https://www.fosskers.ca/en/blog/wayland)
- [swaybg over swaymsg for wallpaper without flicker](https://sylvaindurand.org/dynamic-wallpapers-with-sway/)
