This is a repository containing the configuration of my personal Arch Linux system. The changes to my home directory are directly tracked on the "dots" branch, master is for documentation and license only.
This section descibes a full "dotfile installation", which should (ideally) come right after installing Arch and booting properly for the first time. Feel free to skip it and clone the repo normally if you just want some of the configuration.
alias dots="/usr/bin/git --git-dir=$HOME/.conifg/dots --work-tree=$HOME"
git clone --single-branch --branch dots --bare https://github.com/piotr-machura/arch-setup.git $HOME/.config/dots
dots config --local status.showUntrackedFiles no
dots reset --hard
Note: the cloned
~/.config/git/config contains a handy git alias, so that
git dots will always access the
configs repo directly. Feel free to
unalias dots now.
Note 2: the
--single-branch option only clones the "dots" branch, which is desireable since an accidental
git checkout to the master branch would temporarily remove all of the installed dotfiles.
Make sure the "multilib" repository and paralel downloads are enabled in
The cloned repo contains a list of official packages located in
~/.local/share/pacman/pkg.txt and a list of AUR
pacman -S --needed - < ~/.local/share/pacman/pkg.txt
curl -sS https://download.spotify.com/debian/pubkey.gpg | gpg --import -.
paru -S --needed - < ~/.local/share/pacman/aur.txt.
Enable the included pacman hooks to the system-wide location by creating an appropriate directory
sudo mkdir /etc/pacman.d/hooks/ and linking the hooks
sudo ln -f ~/.local/share/pacman/hooks/* /etc/pacman.d/hooks. The hooks
also require that user's
$HOME is kept when executing commands as root. This can be enabled in the sudoers file.
visudo ------ Defaults env_keep += "HOME"
or, alternatively the root's home directory can be changed to your user's in the
Important note: hard links do not work well across partitions, so if your
/home is on a different drive just copy the hooks
instead. Also, do not change root's home to anything that is on a different partition than the root (
package-list.hook contains some exceptions to the packages being tracked (microcode, video drivers
etc.). Examine it and you'll quickly figure out how to exclude additional ones.
The list contains a nice meta-package which groups all of the base-devel utilities as its dependency after doing
sudo pacman -S --asdeps $(pacman -Qqg base-devel).
Some programs require manual configuration, since not everything can be kept in the repository. This section describes just that.
System-wide services enabled with
systemctl enable <service name here> :
User services enabled with
systemctl enable --user <service name here> :
ufw default deny.
ufw allow syncthing,
ufw allow Deluge.
ufw logging off.
The last step is optional, but without it ufw does clutter the systemd logs quite a bit.
The config is present in
~/.config/lightdm/lightdm-mini-greeter.conf. We will link it to the system-wide
location shortly, but first:
The greeter in use is the LightDM mini greeter. It
requires specifying the user in config file. You have to change the
user field in the cloned
lightdm-mini-greeter.conf or you won't be able to log in.
After you change the
user field you may link it to the system-wide location with
sudo ln -f ~/.config/lightdm/lightdm-mini-greeter.conf /etc/lightdm. Again, simply copy it if your
/home/ is on a different
To enable the greeter uncomment the following lines
/etc/lightdm/lightdm.conf ------------------------- [LightDM] user-authority-in-system-dir=true greeter-session=lightdm-mini-greeter logind-check-graphical=true
By default the X11 screensaver will blank out the screen after ~10 minutes of inactivity. If, like me, you find this behavior annoying, create or edit
/etc/X11/xorg.conf ------------------ Section "ServerFlags" Option "BlankTime" "0" EndSection
If you experience screen tearing (especially when watching videos in Firefox) edit the following
/etc/X11/xorg.conf.d/20-<intel or amd here>.conf ------------------------------------------- Section "Device" Identifier "<Intel Graphics or AMD here>" Driver "<intel or amdgpu here>" Option "TearFree" "true" EndSection
The git config under
~/.config/git/config is set up to include an identity file, which contains user's
personal info. This way the config can be distributed without distributing sensitive data like the email address and GPG
key ID. Provide said identity file by creating
~/.config/git/id ---------------- [user] name = <your name here> email = <your email here> signingKey = <your GPG keyid here> [sendemail] smtpserver = <your smtp server address here> smtpuser = <your email here>
While you're at it, move the current gpg directory to the desired location
mv ~/.gnupg $GNUPGHOME.
Some GUI programs choose to keep absolutely everything in their config files - including useless stuff like last window position, geometry etc. Also I am pretty sure that (in the case of Thunar at least) there is a binary database somewhere, because simply editing its XML files often does not work. Therefore we are forced to configure them in their graphical interfaces.
The UI font is Rubik and the mono space font is JetBrains Mono, both of which are supplemented with Nerd Font glyphs. GTK+ theme is Arc Darker and icon theme is Papirus. The cursor theme is Breeze Snow. Set it as system-wide default by editing
/usr/share/icons/default/index.theme ------------------------------------ [Icon Theme] Inherits=Breeze_Snow
The others should be enabled by default after installing the dotfiles.
Unpin all folders from "Places" in sidebar and pin the ones you actually want and ensure the following options are ticked:
In the volume management settings ensure the following options are ticked:
Issue the following commands to enable some "hidden settings":
xfconf-query --channel thunar --property /misc-full-path-in-title --create --type bool --set true xfconf-query --channel thunar --property /misc-image-size-in-statusbar --create --type bool --set true
The repository will clone
~/.local/share/firefox-chrome . To use them perform the following steps:
ln -s ~/.local/share/firefox-chrome/ chrome.
A BTTV configuration json is available here. Import it in "Twitch/BTTV Settings".
Log into Spotify and go to "Settings". You may encounter some glitches with drop-down menus. Instead of clicking place a cursor on them and hit "Enter". Change "Streaming quality" to "Very high", disable "Normalize volume", "Autoplay" and "Show desktop notifications when song changes".
The only thing to do here is to set the font to "JetBrains Mono Medium 11" under "Options". Leafpad is a Notepad clone that is note very feature rich, as there are literally 3 entries under "Options". Don't get overwhelmed.
~/.local/share/applications directory contains a local database of desktop entries for rofi and mime-type
associations. They will be added automatically via the linked
dekstop-files.hook pacman hook. Feel free to edit them
or remove (effectively) by appending
~/.local/share/applications/<entry name here>.desktop ----------------------------------------------------- Hidden=true
Note that the hook does not remove any desktop entries, just adds new ones. Old ones remaining after uninstalling an
application must be removed manually, but the
.bashrc provides a handy alias
menu-diff for comparing global and local