Arch
sudo pacman -S yadmDebian
sudo apt -y install yadmyadm clone https://github.com/Lil-Strudel/.dotfiles.gityadm config local.class Strhuedelyadm decryptOver the course of my Linux journey, I have played around with various distros and desktop environments. This repo contains my configuration for pretty much everything that I use in Linux. I also have written sections describing things I wish I knew years ago when first getting into Linux.
I really like to keep things minimal. I have spend hundreds of hours doing things to avoid installing additional packages. As of late, I have been quite a bit more lenient with that sort of stuff, but you will notice a lot of effort has been put into keeping this lightweight.
Over the years, my configs and preferences have changed in various ways. A big example of this is my recent switch to Strhuedel, a theme I made, from Tokyo Night which has been my de-facto standard color scheme. Despite this, I still love my old configs and strive to keep them functional despite not being in use.
The primary way I manage to keep old config (even conflicting configs) function within the same repo is by using the tool yadm.
About yadm
yadm is pretty awesome. Essentially it is just a wrapper around a git bare repo, which is what I have used in the past, but with super powers.
You are able to create conditional files that are only applied when certain classes are active, or if your system meets certain specifications. This combined with yadms ability to template files and conditionally insert content into files based on the conditions, makes yadm extraordinarily flexible.
Whenever the conditions are met, symlinks are created and/or files are generated based on templates to create your perfect config.
yadm also lets you encrypt files to save in your dotfiles. So while I am not putting any sensitive information in source control (like ssh keys) I can still keep MonoLisa in my dotfiles without worring about infringing on any licensing.
Helpful yadm info
Conditional Files
You can create a conditionally applied file by adding ## to its file name, followed by the condition you want it applied for. Docs on the topic
myFile#class.MyClassTemplates
You can create a conditionally applied file by adding ##template to its file name. Now inside the file you are able to specify some conditions for content in the file. Docs on the topic
{% if yadm.os == "Darwin" %}
This block is included for MacOS
{% else %}
This block is included for any other OS
{% endif %}Classes
To set the class, use
yadm config local.class *class name*To add additional classes, use
yadm config --add local.class *class name*I have found a bunch of tips and tricks to help make installing Linux easier for me. In this section I will share how I setup my partitions, install Linux, dual boot with windows, and install a desktop environment.
I find that the first step to setting up your work station is determining your partition layout. The key considerations when making your partition layout are:
- Are you dual booting?
- Do you want a swap partition?
- Do you want your working files separate from your OS files?
Why would I want to dual boot?
Valorant only runs on windows.... So does the entire Adobe Suite.... Gaming is also kinda easier for the most part.... Ugghhh i hate windows
Why would I want a swap partition?
If you plan to Hibernate your pc or have low quantities of ram, I would highly recommend having a swap. That being said, you can create a swap file which will accomplish the exact same thing, but not require a dedicated partition. For the most part, I do not use swaps on my machines, and recommend using a swap file instead of a swap partition.
Why would I want my working files separate from my OS?
If you do a lot of OS hopping like me or generally like to wipe your OS for spring cleaning, a separate partition for all your files can save you a lot of time. No need to backup your .envs when wiping your OS, you don't lose work on branches your forgot about, ect...
For me, the answers to those questions are yes, no, yes.
Here is a fully spec'd out partition table
| Name | Size | File System | Mount Point |
|---|---|---|---|
| Boot | 1gb (300mb at the least) | fat32 | /boot |
| Swap | 4gb < 2x ram < 64gb | N/A* | N/A* |
| Windows | 1/2 drive size | ntfs | N/A |
| Linux | 30gb < 1/3 drive size > 200gb | ext4 | / |
| Storage | Remaining Space | ext4 | /storage |
If you are not dual booting, remove the Windows partition. If you do not want a dedicated swap partition, remove the Swap partition. If you do not want a separate partition for your working files, remove the Storage partition.
Easy enough, right?
*Note that swap partitions do not have a filesystem, nor do they get assigned a mount point. In Arch you must configure your swap partition after system install, but on Debian you can configure the swap during install by setting the partition type to swap.
Pretty much every OS will have a partitioning tool of some sort. Windows is ass and I am not smart enough to use Arch's, so I boot into a Ubuntu ISO and use GParted.
I like partitioning the drive before installing any OS because it makes it really easy to select/format the partitions regardless of what you are installing. Arch's partition tool is really easy to select a partition to format, but really hard to define how big a partition should be.
So boot into Ubuntu (or any other ISO with GParted) and whip up the partition table.
If you are dual booting, I recommend installing Windows first. If you are not installing Windows, you can skip this step.
Click here to see how I like to setup Windows.
Oh boy... We've made it. The part we have all been waiting for.
What distro should I use
The decision between Arch and Debian for me is pretty straight forward. Choose Arch 😁
Sarcasm aside, Arch provides a bleeding edge environment with constant updates and a rich community. Debian provides a very stable environment where things are unlikely to change.
People say that Debian is more "user friendly," but I think if you are doing a minimal install, that is not the case. Arch has access to the AUR which makes installing pretty much everything that much easier.
I have a great appreciation for Debian... But I will leave it for my servers.
Installing Arch
- Boot into your Arch ISO and get connected to the internet.
- Run "archinstall"
Here are the settings I use across all Arch my Installs
- Language: English
- Mirrors: Blank or United States
- Locales: Default
- Disc Configuration:
- Partitioning -> Manual Partitioning -> Select the correct drive
- Boot
- Set mountpoint to "/boot"
- Mark to be formatted
- Linux
- Set mountpoint to "/"
- Mark to be formatted
- Storage
- Set mountpoint to "/storage" (or "/strudel" if you are me)
- DO NOT MARK TO BE FORMATED IF IT HAS DATA
- Be grateful you made the partitions earlier :)
- Bootloader: Grub
- Unified Kernel Images: False
- Swap: I usually do False. Do true if you want a swap file.
- Host Name: strudel-(depends on device)
- Root Password:
- User account: You got this one (super user)
- Audio: Pipewire
- Kernels: linux
- Additional Packages:
- Network Configuration: NetworkManager
- Timezone: US/Mountain
- Automatic Time Sync (NTP): True
- Optional Repositories: Blank
Important: If you are installing I3 or AwesomeWM, the selection for Profile will change! Please refer to the next section
Once your settings are all the way you want them, select "Install." When it is finished, I usually skip chrooting into the new environment. Reboot!
Dual Booting? Configure grub to show windows
sudo pacman -S os-prober fuse3sudo vim /etc/default/grubRemove the # on the line GRUB_DISABLE_OS_PROBER=false
sudo mkdir /mnt/windows
sudo mount -t ntfs3 /dev/nvme0n1p3 /mnt/windows
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo umount /mnt/windowsDid that not work? Here's the fix!
If os-parser does not pick up Windows, its likely because you partitioned the EFI partition.... Don't ask me how I know.
We're gonna use bcdboot to fix it
- Boot into a windows media
- Click "Repair this Computer"
- Click "Troubleshoot"
- Click "command-line"
bcdboot D:\WindowsReboot and retry the grub steps now
I3
To install I3, add the following to your archinstall config:
- Profile:
- Desktop
- I3-wm
- Graphics Driver
- If you have a Nvidia GPU: "Nvidia (open kernel module for new GPUs, Turing+)" has been very impressive for me
- If you have an AMD GPU: "AMD / ATI (open-source)
- Greeter
- I usually find these to be bloat and do not select one
- SDDM is my go to when I do.
- Desktop
That is it! I3 is installed!
AwesomeWM
To install AwesomeWM, add the following to your archinstall config:
- Profile:
- Xorg
- Graphics Driver
- If you have a Nvidia GPU: "Nvidia (open kernel module for new GPUs, Turing+)" has been very impressive for me
- If you have an AMD GPU: "AMD / ATI (open-source)
Once you install yay, you will need to install the git version of AwesomeWM
yay -Syu awesome-gitNote: The git version of awesome was a major version ahead of the stable version provided by Arch at the time of making these instructions. It appears that major version has since been released as stable, so these instructions might not be the best anymore.
That is it! AwesomeWM is installed!
Sway
! DO NOT INSTALL SWAY IF YOU HAVE A NVIDIA GPU!!!!! Wayland is not ready yet for Nvidia. I was able to hack it together, but seriously DO NOT DO IT.
Only continue if you hate yourself. Nvidia Guide
Turn back! Its not worth it! To install Sway on a Nvidia device, add the following to your archinstall config:
- Profile: Minimal
- Additional Packages: sway mesa xf86-video-nouveau libva-mesa-driver mesa-vdpau vulkan-icd-loader vulkan-nouveau
yadm
sudo pacman -S yadm
yadm clone https://github.com/Lil-Strudel/.dotfiles.git
yadm config local.class StrhuedelSetup Firefox to get Bitwarden
yadm decryptSetup SSH for GitHub
yadm remote set-url origin git@github.com:Lil-Strudel/.dotfiles.gitSeparate working partition?
Replace this with your user and the mount point of your partition
sudo chown strudel /strudel/
ln -s /strudel ~/strudelGeneral OS Setup
yay -S zoxide feh playerctl brightnessctl pavucontrol curl zip unzip eza ripgrep fzf openssh git noto-fonts noto-fonts-cjk noto-fonts-emoji rofiI3 - Supporting Packages
// TODO: This
yay -S dunstAwesomeWM - Supporting Packages
// TODO: This
Sway - Supporting Packages
// TODO: This
SSH
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519.GitHub -C "${HOST} GitHub"
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519.GitLab -C "${HOST} GitLab"
nvim ~/.ssh/configHost github.com
IdentityFile ~/.ssh/id_ed25519.GitHub
Host gitlab.com
IdentityFile ~/.ssh/id_ed25519.GitLab
cat ~/.ssh/id_ed25519.GitHub.pub
cat ~/.ssh/id_ed25519.GitLab.pubCopy the public keys into your respective Git providers
Yay
pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si
cd ..
rm -rf yay-bin
Terminal
yay -S kitty zsh starshipChange the shell to zsh
chsh -s /bin/zsh
And install Zap to manage the zsh plugins
zsh <(curl -s https://raw.githubusercontent.com/zap-zsh/zap/master/install.zsh) --branch release-v1 --keep
Firefox
yay -S firefox- Open firefox
- Go to "about:profiles"
- Create a new profile
- Open browser in new profile
- Close browser in new profile
- Download (Right click ->
Save Link As...) the User.js File into the new profiles directory - Open browser in new profile
- Close all other tabs
- Delete original profiles
- Install Ublock Origin
- Install Bitwarden
- Go through Firefox settings and remove unwanted settings (Password manager, address auto fill, additional search engines, ect...)
Neovim
Install Yarn before opening Neovim!
yay -S neovim xclipOpen Neovim.
Tmux
yay -S tmux
git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm
tmuxCtrl-B I
Node
If you installed Zap with my ZSH config, FNM should already be installed on the system. If not install FNM
fnm install --lts
fnm use *version that was installed*
fnm default *version that was installed*
npm i -g yarn// TODO: Mason config
Go
yay -S go// TODO: Mason config
Python
yay -S python-conda// TODO: Mason config
MongoDB
yay -S mongodb-compass mongodb-toolsDocker
//TODO: This
GTK
yay -S rose-pine-gtk-theme-full lxappearance- Open LxAppearance and set theme to Rose Pine
SDDM
yay -S sddm
sudo systemctl enable sddmTerraform
yay -S terraform
terraform loginThunar
yay -S thunar gvfs thunar-volman- Launch Thunar
- Edit -> Preferences -> Advanced
- Check "Enable Volume Management" - Mount removable drives when hot-plugged - Mount removable media when inserted
Other Apps
yay -S slack-desktop spotify-launcher discord obsidian flameshot winbox steamKeyring
yay -S gnome-keyring libsecret seahorsePacman
sudo nvim /etc/pacman.confUn comment the line with "Color"
sudo nvim /etc/makepkg.confchange "debug" to "!debug"
- Boot into your Windows ISO
- Click "Install Now"
- Click "I don't have a product key"
- Click "Custom: Install Windows only (advanced)"
- Select the partition you made for Windows
- Click "Next"
- Wait.....
Hi There! I’m Cortana, and I’m here to help. A little sign-in here, a touch of Wi-Fi there, and we’ll have your PC ready for all you plan to do.
Despite it being insecure, I like to install Windows on an offline account. Windows only has my games so I don't really care if its not the most secure setup.
Once Windows is installed, update system and update Microsoft Store. Several times. Reboot, and update again. Thanks Windows for sucking.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))Install apps sophiapp and Shutup10 using chocolatey.
choco install sophiapp shutup10Run SophiApp and completely clean Windows.
Run Shutup10 (Win+r and type OOSU10) and disable all the dumb stuff from Windows.
Tired of times being messed up every time you boot Windows?
Linux primarily works of UTC time. Windows doesn't. Run this command to fix that :)
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /fInstall arch minimal
edit /etc/pacman.conf edit /etc/makepkg.conf
install yay
install fonts
yay -S noto-fonts noto-fonts-cjk noto-fonts-emoji
install hyprland + packages
yay -Syu hyprland uwsm sddm ghostty rofi-wayland dunst xdg-desktop-portal-hyprland hyprpolkitagent qt5-wayland qt6-wayland waybar swww hypridle hyprlock
enable sddm
sudo systemctl enable sddm
clone dots
yadm clone https://github.com/Lil-Strudel/.dotfiles.git
yadm config local.class Strhuedel
configure display drivers
yay -Syu nvidia-dkms nvidia-utils lib32-nvidia-utils egl-wayland libva-nvidia-driver
yay -Syu linux-headers
add nvidia to /etc/mkinitcpio.conf
MODULES=(... nvidia nvidia_modeset nvidia_uvm nvidia_drm ...)
create /etc/modprobe.d/nvidia.conf
options nvidia_drm modeset=1 fbdev=1
rebuild initramfs
sudo mkinitcpio -P
reboot
install things
yay -S fnm pnpm go rustup openssh eza fzf ripgrep zoxide wl-clipboard neovim tmux firefox
switch to zsh