~piotr-machura/dotfiles

ref: c8d545eb4cd7303ce613b21240c65420fcc613ae dotfiles/README.md -rw-r--r-- 10.6 KiB
c8d545ebPiotr Machura Add information on configuring himalaya 7 months ago

#Arch setup

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.

#Cloning the repository

This section describes 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.

  1. Create an alias alias dots="/usr/bin/git --git-dir=$HOME/.conifg/dots --work-tree=$HOME"
  2. Clone the repo git clone --single-branch --branch dots --bare git@git.sr.ht:~piotr-machura/arch-setup $HOME/.config/dots
  3. Disable the showing of untracked files dots config --local status.showUntrackedFiles no
  4. Apply the configs 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 desirable since an accidental git checkout to the master branch would temporarily remove all of the installed dotfiles, causing great confusion.

#Package installation

Make sure the "multilib" repository and paralel downloads are enabled in /etc/pacman.conf.

The cloned repo contains a list of official packages located in ~/.local/share/pacman/pkg.txt and a list of AUR packages in ~/.local/share/pacman/aur.txt.

  1. Install official packages pacman -S --needed - < ~/.local/share/pacman/pkg.txt
  2. Obtain the gpg key needed for Spotify curl -sS https://download.spotify.com/debian/pubkey.gpg | gpg --import -.
  3. Install AUR packages using your favorite AUR helper paru -S --needed - < ~/.local/share/pacman/aur.txt.

#Pacman

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 /etc/passwd using vipw.

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 (/) partition.

Note: the 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).

#Additional configuration

Some programs require manual configuration, since not everything can be kept in the repository. This section describes just that.

#Systemd & firewall

System-wide services enabled with systemctl enable <service name here> :

  • systemd-timesyncd.service
  • lightdm.service
  • bluetooth.service (optional)
  • ufw.service
  • docker.service
  • paccache.timer
  • plocate-updatedb.timer

User services enabled with systemctl enable --user <service name here> :

  • neovim-undo-cleanup.service

In order to utilize the HHKB's power key to show the power menu the logind config file must be modified to include

/etc/systemd/logind.conf
------------------------
HandlePowerKey=ignore

and the service reloaded with

systemctl restart systemd-logind.service

Firewall:

  1. Enable the firewall ufw enable.
  2. Disallow any incoming traffic ufw default deny.
  3. Allow for file sync and torrents ufw allow syncthing, ufw allow Transmission.
  4. Disable logging ufw logging off.

The last step is optional, but without it ufw does clutter the systemd logs quite a bit.

#LightDM & Xorg

The config is present in ~/.config/lightdm/lightdm-mini-greeter.conf. We will link it to the system-wide location shortly, but first:

#⚠️ Warning ⚠️

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 partition.

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

#Maven home

Maven uses ~/.m2 directory for downloaded artifacts by default, this can be changed by setting

/opt/maven/conf/settings.xml
----------------------------
<localRepository>${user.home}/.local/share/mvn</localRepository>

#Screen saver

By default the X11 screen saver 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

#Screen tearing

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

#Git

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.

#Himalaya

Himalaya is a handy command line IMAP/SMTP tool. The required configuration file has the following format:

~/.config/himalaya/config.toml
------------------------------
name = "<your name here>"
downloads-dir="<download dir here>"
signature-delimiter = "-- \n"
signature="<your name here>"
notify-cmd = "notify-send -i telegram-panel '<sender>' '<subject>'"

[personal]
default = true
email = "<email address here>"

smtp-host = "<smtp server address here>"
smtp-port = 587
smtp-login = "<email address here>"
smtp-passwd-cmd = "gpg -d <your home directory>/.config/himalaya/pass.gpg"

imap-host = "<imap server address here>"
imap-port = 993
imap-login = "<email address here>"
imap-passwd-cmd = "gpg -d <your home directory>/.config/himalaya/pass.gpg"

Prepare the password file

echo "<password here>" > ~/.config/himalaya/passw`
gpg -e ~/.config/himalaya/passw
rm ~/.config/himalaya/passw

#GUI programs

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.

#Themes and fonts

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.

#Thunar

Ensure the following options are ticked under "Prefernces":

  • "Draw frames around thumbnails"
  • "Date format: ISO8601"
  • "Open folders in new tabs on middle click"
  • "Enable volume management"

In the volume management settings ensure the following options are ticked:

  • "Mount removable drives when hot-plugged"
  • "Mount removable media when inserted"

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

#Firefox

The repository will clone userChrome.css and userContent.css into ~/.local/share/firefox-chrome . To use them perform the following steps:

  1. Open Firefox and go to "about:config".
  2. Accept the risk and search for "UserProfileCustomizations" . Set it to "true".
  3. Accept the risk and search for "helpers.private_mime_types_file" . Set it to "~/.local/share/firefox-chrome/mime.types".
  4. Go to ~/.mozilla/firefox/xxxxxxxx.default-release.
  5. Link the cloned chrome folder ln -s ~/.local/share/firefox-chrome/ chrome .
  6. Restart the browser.

A BTTV configuration json is available here. Import it in "Twitch/BTTV Settings".

#Spotify

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".

#Desktop files

The ~/.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 entries.