https://github.com/rtucek/dotfiles
My dotfiles
https://github.com/rtucek/dotfiles
chezmoi configuration dotfiles gitconfig tmux-conf vimrc
Last synced: 11 months ago
JSON representation
My dotfiles
- Host: GitHub
- URL: https://github.com/rtucek/dotfiles
- Owner: rtucek
- License: mit
- Created: 2017-02-28T01:07:38.000Z (about 9 years ago)
- Default Branch: main
- Last Pushed: 2025-05-11T18:18:16.000Z (11 months ago)
- Last Synced: 2025-05-11T19:27:57.182Z (11 months ago)
- Topics: chezmoi, configuration, dotfiles, gitconfig, tmux-conf, vimrc
- Language: Shell
- Homepage:
- Size: 1.41 MB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Dotfiles
My dotfiles - use them and contribute your personal changes/suggestions.
## Installation
The specifically target Arch-alike distributions. For instance, the
instructions here should also work for Manjaro, which builds upon Arch.
Most importantly, it's require to install a package manager, which
makes use of the AUR. [yay](https://github.com/Jguer/yay) is by far
the best one I've ever seen and can simply be installed like so.
```bash
sudo pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si
```
Then, you'd want to install all relevant packages from the [General
packages](#general-packages), [Fonts](#fonts) and [AUR](#aur) sections.
Dotfiles are managed by [`chezmoi`](https://github.com/twpayne/chezmoi). Run
`chezmoi init rtucek` in order to download all dotfiles, followed by `chezmoi
cd` for jumping directly to the git repo of the dotfiles.
A couple of template variables have to be set for proper configuration.
Use the sample config file from `dot_config/chezmoi/chezmoi.toml.sample` and
copy it to `~/.config/chezmoi/chezmoi.toml`, then set the value accordingly and
run `chezmoi apply` for having the actual dotfiles being put a their right
place.
Refer to [chezmoi's docs](https://www.chezmoi.io/) for further details.
## Contribution
Pull requests are welcome!
## Dependencies
The dotfiles are optimized for the following setup.
### General packages
- alsa-utils
- arandr
- arch-audit
- autorandr [[8]](#autorandr-post-installation-activation-[8])
- bash-completion
- bat [[1]](#syntax-highlight-with-bat-and-cat-[1])
- bluetui
- bluez
- bluez-utils
- bolt [[4]](#fix-hotplug-issue-with-thunderbolt-[4])
- brightnessctl
- chezmoi
- ctags
- devspace-bin
- diff-so-fancy
- dmidecode
- docker [[2]](#docker-post-installation-[2])
- docker-compose
- dog
- dunst
- firefox
- fwupd
- fzf
- gimp
- git-delta [[1]](#syntax-highlight-with-bat-and-cat-[1])
- glab
- globalprotect-openconnect
- gnome-keyring
- gnu-netcat
- go
- gparted
- gufw
- gzip
- helm
- helvum
- httpie
- i3-battery-popup-git
- imagemagick
- inxi
- ipcalc
- jless
- jq
- k9s
- kubectl
- lastpass-cli
- less
- litecli
- lsb-release
- lshw
- lsof
- man-db
- mkcert
- msr-tools
- mtr
- mycli
- mysql-workbench
- neovim
- networkmanager-openconnect
- nitrogen
- openconnect
- openssh
- osquery
- pcmanfm
- percona-server-clients
- percona-toolkit
- pgcli
- picom
- pigz
- pipewire [[7]](#pipewire-post-installation-activation-[7])
- pipewire-pulse
- playerctl
- polkit-gnome
- polybar [[6]](#permissions-for-polybar-[6])
- postgresql-client
- pw-volume
- pwgen
- python-pip
- python-pipx
- python-pynvim
- ranger
- rofi
- rsync
- ruby-erb
- scrot
- snapd
- sound-theme-freedesktop
- speedtest-cli
- stern
- strongswan
- tcpdump
- tela-circle-icon-theme-manjaro
- terminator
- testssl.sh
- the_silver_searcher
- thunderbird
- tmux [[3]](#install-tmux-plugins-[3])
- torbrowser-launcher
- tree
- tree-sitter-cli
- udiskie
- udisks2
- ufw [[5]](#ufw-post-install-actions-[5])
- unzip
- usbutils
- veracrypt
- vi
- whois
- wireplumber
- xclip
- xorg-xinput
- xorg-xkill
- xss-lock
- yay
- yubioath-desktop
### FS support
- bcachefs-tools
- btrfs-progs
- btrfs-tools
- cryptsetup
- dosfstools
- exfatprogs
- hfsprogrs
- hfsutils
- lvm2
- mtools
- ntfs-3g
- ntfs-progrs
### Fonts
- noto-fonts
- noto-fonts-cjk
- noto-fonts-emoji
- ttf-dejavu
- ttf-font-awesome
- ttf-input-nerd
- ttf-joypixels
### AUR
- 1password
- 1password-cli
- auto-cpufreq [[9]](http://localhost:8530/1#auto-cpufreq-post-installation-activation-[9])
- certigo
- csvtools-git
- google-chrome
- kind-bin
- nvm
- postman-bin
- tmuxinator
- unimatrix-git
- xidlehook
### Snap packages
n/a
### Composer
```bash
composer global require consolidation/cgr
```
### nvm
Most important commands are:
```bash
nvm install --lts # Installing most recent LTS version
nvm alias default "lts/*" # Alias most recent lts node version as default
nvm use default # Use most recent version
nvm install-latest-npm # Upgrade npm to the latest version
```
### npm
The following npm packages are considered as standard.
Install them via `npm install --global [packages]`:
- @vue/cli
- create-react-app
- neovim
### yarn
Install yarn via npm. Let yarn manage itself by re-installing yarn globally and
removing it afterwards via npm again.
```
npm -g install yarn
yarn global add yarn
npm -g remove yarn
```
### PIP
```bash
pipx install python-language-server # (coc-python)
```
### Bash completion
- composer (`cgr require bamarni/symfony-console-autocomplete`)
- tmux (https://github.com/imomaliev/tmux-bash-completion/blob/master/completions/tmux)
- yarn (https://github.com/dsifford/yarn-completion/blob/master/yarn-completion.bash)
## Addendum
### Syntax highlight with bat and cat [1]
As a special case, in order to have syntax highlighting for PHP work with
`bat` in combination with `delta` diffs, refer to [these
instructions](https://github.com/dandavison/delta/issues/162#issuecomment-625952288).
It's necessary to perform this step, whenever `bat` gets updated.
### Docker post-installation [2]
By default, the docker installation requires some manual actions. For instance,
the docker daemon is not started automatically. It's required to run `sudo
systemctl start docker` after the installation and likewise, it's required to
run every docker command with sudo. For convenience, you'd typically want to run
these commands once ([based on Docker's official
docs](https://docs.docker.com/engine/install/linux-postinstall/):
```bash
# Start docker and containerd daemon upon boot
sudo systemctl enable --now docker.service
sudo systemctl enable --now containerd.service
# Run docker commands root-less
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```
### Install tmux plugins [3]
After tmux has been installed, run the following commands in order to install
and setup tmux plugin manager ([TPM](https://github.com/tmux-plugins/tpm)) for
the first time. The following commands below will clone TPM's source code and
install it at the right location, then type; `Ctrl + SPACE + I` in order to
actually install tmux plugins.
```bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
```
### sudo password indicator
When using `sudo`, it's convenient to have a masked password indicator in case
sudo requires to enter the user's password. In order to have a password
indicator, simply run `sudo visudo` and add the following lines below.
```diff
+# Have a masked password indicator, when typing the password for sudo
+Defaults pwfeedback
```
### Pacman tweaks
There are some nice2have tweaks for pacman. Simply add these lines to the
`/etc/pacman.conf` file (or uncomment existing ones).
```diff
+# Have colored output
+Color
+# Add fancy pacman gimmick to progres bar
+ILoveCandy
+# Multiple simultaneous downloads
+ParallelDownloads = 5
```
### Faillock account lockout
Faillock with cause a temporary account lock for users, who mistype their
password too often. Usually, the default values are a lockout of 10 minutes
after 3 failed attempts. In case this is unwanted, disable faillock like so by
modifying `/etc/security/faillock.conf` (source: [Arch Wiki -
Security](https://wiki.archlinux.org/title/Security#Lock_out_user_after_three_failed_login_attempts)):
```diff
#
# Only track failed user authentications attempts for local users
# in /etc/passwd and ignore centralized (AD, IdM, LDAP, etc.) users.
# The `faillock` command will also no longer track user failed
# authentication attempts. Enabling this option will prevent a
# double-lockout scenario where a user is locked out locally and
# in the centralized mechanism.
# Enabled if option is present.
# local_users_only
#
# Deny access if the number of consecutive authentication failures
# for this user during the recent interval exceeds n tries.
# The default is 3.
-# deny = 3
+deny = 0
#
# The length of the interval during which the consecutive
# authentication failures must happen for the user account
# lock out is n seconds.
# The default is 900 (15 minutes).
# fail_interval = 900
#
```
### Handling lid-switch, power key pressing and similar
The handling of certain hardware events like lid-switch, short or long pressing
of power key, etc., are handled by systemd's `systemd-logind.service`.
The default settings may be viewed by running `systemd-analyze cat-config
systemd/logind.conf`.
In order to override default behavior, create a drop-in for the config file
by adding overrides into any `/etc/systemd/logind.conf.d/*.conf`.
This is typically done by:
```bash
sudo mkdir -p /etc/systemd/logind.conf.d
systemd-analyze cat-config systemd/logind.conf | sudo tee /etc/systemd/logind.conf.d/90-logind.conf
```
Then, open `/etc/systemd/logind.conf.d/90-logind.conf` and leave only your
overrides un-commented. Below are some sample customizations.
```diff
--- /etc/systemd/logind.conf
+++ /etc/systemd/logind.conf.d/90-logind.conf
@@ -1,3 +1,4 @@
+# /etc/systemd/logind.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it under the
@@ -24,18 +25,18 @@
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#UserStopDelaySec=10
-#SleepOperation=suspend-then-hibernate suspend
-#HandlePowerKey=poweroff
-#HandlePowerKeyLongPress=ignore
+SleepOperation=suspend-then-hibernate suspend
+HandlePowerKey=suspend
+HandlePowerKeyLongPress=poweroff
#HandleRebootKey=reboot
#HandleRebootKeyLongPress=poweroff
#HandleSuspendKey=suspend
#HandleSuspendKeyLongPress=hibernate
#HandleHibernateKey=hibernate
#HandleHibernateKeyLongPress=ignore
-#HandleLidSwitch=suspend
-#HandleLidSwitchExternalPower=suspend
-#HandleLidSwitchDocked=ignore
+HandleLidSwitch=suspend
+HandleLidSwitchExternalPower=suspend
+HandleLidSwitchDocked=suspend
#HandleSecureAttentionKey=secure-attention-key
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
```
Finally, run `sudo systemctl reload systemd-logind.service` in order to have any
changes being applied.
Links:
- [LOGIND.CONF(5)](https://man.archlinux.org/man/logind.conf.5.en)
- [SYSTEMD-LOGIND.SERVICE(8)](https://man.archlinux.org/man/systemd-logind.8)
### CPU clock modulation fix
Some Dell XPS devices may become slow after system wakeups. This is due to
aggressive [suspend settings in clock modulation
settings](https://wiki.archlinux.org/title/Dell_XPS_13_2-in-1_(7390)#Sleep/Suspend_causes_slow_system).
To fix this issue, add the systemd unit file to
`/etc/systemd/system/msr-fix.service`, then enable it via `sudo systemctl enable
msr-fix.service`. The unit file will explicitly reset the necessary CPU
register.
```ini
[Unit]
Description=Fix MSR after wakeup
After=suspend.target
[Service]
User=root
Type=oneshot
ExecStart=wrmsr -a 0x19a 0x0
[Install]
WantedBy=suspend.target
```
### Fix hotplug issue with Thunderbolt [4]
Given the following symptoms:
> Devices, connected via Thunderbolt don't work if "hot plugged in" (that is,
> after the OS has booted). However, if the device is connected at cold boot
> time, the device works mystically. In particular, to a Dock connected devices
> like keyboards and mouses don't assume to have any powered state (e.g. the
> laser pointer of a mouse remains switched off).
This is due to the [OS' security
settings](https://wiki.archlinux.org/title/Thunderbolt#User_device_authorization).
The OS - by default - protects against [DMA
attacks](https://en.wikipedia.org/wiki/DMA_attack) such as
[Thunderstrike](https://trmm.net/Thunderstrike_2/), by setting the security mode
to `user` or `secure`. So the in some form or another, we have to "approve" the
connected device.
One way to simply get away with it, is to add a udev rule to
`/etc/udev/rules.d/99-removable.rules`, which just authorizes essentially every
hot-plugged Thunderbolt device:
```
ACTION=="add", SUBSYSTEM=="thunderbolt", ATTR{authorized}=="0", ATTR{authorized}="1"
```
The rule will become effective after the next reboot, however you can also avoid
a reboot by live-reloading udev rules:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
However, a much simpler approach would be actually authorizing the device via
`bolt`.
Sources:
- [Thunderbolt](https://wiki.archlinux.org/title/Thunderbolt)
- [Thunderbolt - udev rule (Arch Wiki)](https://wiki.archlinux.org/title/Thunderbolt#Automatically_connect_any_device)
- [Live-reload udev rule (unix.stackexchange.com)](https://unix.stackexchange.com/a/39371/213414)
### GPG keyservers
My GPG keys are generally distributed via the following public keyservers:
- keys.openpgp.org
- keyserver.ubuntu.com
- pgp.mit.edu
### Fix automatic wake ups from suspend
For some Tuxedo Laptops, the Laptop wakes up automatically within a couple of
seconds. This is due to a bug in the BIOS, which can be seen in the syslog,
based on these log entries:
```
[...]
xxx xx xx:xx:xx archlinux kernel: ACPI BIOS Error (bug): Could not resolve symbol [\_SB.ACDC.RTAC], AE_NOT_FOUND (20230628/psargs-332)
xxx xx xx:xx:xx archlinux kernel: ACPI Error: Aborting method \_SB.PEP._DSM due to previous error (AE_NOT_FOUND) (20230628/psparse-529)
[...]
```
For mitigation, the kernel parameter `acpi.ec_no_wakeup=1` must be set in
`/etc/default/grub`:
```diff
-GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
+GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi.ec_no_wakeup=1"
```
> Don't forget to run `sudo update-grub` in order re-build and deploy the grub
> config, so that it becomes effective from the next system boot onwards..
For testing purpose, the `acpi.ec_no_wakeup=1` parameter can also be set at
post-boot with the sysfs interface:
```bash
# Read current state of acpi.ec_no_wakeup via ...
cat /sys/module/acpi/parameters/ec_no_wakeup
# ... Y -> 1 (on); N -> 0 (off)
# Set the value by writing 1 or 0 to the file: e.g.
echo "1" | sudo tee /sys/module/acpi/parameters/ec_no_wakeup
```
It's worth pointing out, that even with setting the parameter, the error will
still be logged to syslog, however the automatic wake ups are prevented this
way.
Links:
- [Tuxedo FAQ / Device Immediately Wakes Up After Suspend](https://www.tuxedocomputers.com/en/FAQ-TUXEDO-InfinityBook-Pro-15-Gen9.tuxedo#3675)
- [Arch Wiki / /sys/module/acpi/parameters/ec_no_wakeup](https://wiki.archlinux.org/title/Power_management/Wakeup_triggers#/sys/module/acpi/parameters/ec_no_wakeup)
### ufw post-install actions [5]
[Uncomplicated Firewall (aka
ufw)](https://wiki.archlinux.org/title/Uncomplicated_Firewall) may not be active
right away post-install. This can be fixed with systemd.
```bash
sudo systemctl enable --now ufw.service
```
Further, even if ufw is started via systemd, ufw may not be initialized. Run the
following commands in order to check and fix (if needed).
```bash
$ sudo ufw status
Status: inactive
# explicitly enable ufw
$ sudo ufw enable
Firewall is active and enabled on system startup
```
Finally, check if the current rules are the "sane and sensitive defaults":
```bash
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
```
Mind the `Default: deny (incoming), allow (outgoing), deny (routed)` line. In
case default rules are different by default, you may correct them with:
```bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed
```
Links:
- [Arch Wiki / Uncomplicated Firewall](https://wiki.archlinux.org/title/Uncomplicated_Firewall)
- [Ubuntu Wiki / UFW](https://help.ubuntu.com/community/UFW)
### Have systemd using same default console editor
By default, systemd may use any available console-based editor.
However, the `SYSTEMD_EDITOR` ENV allows configuring any editor of preference.
In order to have `sudo` based commands inheriting this ENV, add the following
line to the sudoers file manually via `visudo`.
```diff
##
## Preserve editor environment variables for visudo.
## To preserve these for all commands, remove the "!visudo" qualifier.
Defaults!/usr/bin/visudo env_keep += "SUDO_EDITOR EDITOR VISUAL"
+Defaults env_keep += "SYSTEMD_EDITOR"
##
## Use a hard-coded PATH instead of the user's to find commands.
```
### Permissions for Polybar [6]
Many modules may not work out of the box. Inspect
`~/.config/polybar/config.ini`, which might require a few parameters to be
properly templated via chezmoi.
#### Change backlight via scrolling
For having support for changing the backlight via scrolling, do the following:
1) Add your user to the `video` group.
```bash
sudo usermod -aG video $USER
newgrp video
```
2) Add the following udev rule `/etc/udev/rules.d/99-backlight.rules`
```
ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp video $sys$devpath/brightness", RUN+="/bin/chmod g+w $sys$devpath/brightness"
```
Reload udev via:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
In case it does not work, try rebooting the system.
### Pipewire post-installation activation [7]
[`pipewire`](https://wiki.archlinux.org/title/PipeWire) is used as the audio
router and processor. For audio session management,
[`wireplumber`](https://wiki.archlinux.org/title/WirePlumber) is used.
Additionally, the `pipewire-pulse` package is installed for mimicking
[`pulseaudio`](https://wiki.archlinux.org/title/PulseAudio) for some
applications. In order to have both services working reliably, make sure systemd
is running them upon startup.
[`helvum`](https://gitlab.freedesktop.org/pipewire/helvum) may be used as
patchbay GUI for pipewire.
```bash
systemctl enable --user --now pipewire.service
systemctl enable --user --now pipewire-pulse.service
```
### Autorandr post-installation activation [8]
[`autorandr`](https://github.com/phillipberndt/autorandr) is used to
automatically detect monitors, storing profiles and auto-applying them upon
reconnect.
In order to work properly, the following 2 systemd services should be activated:
```bash
sudo systemctl enable --now autorandr.service
sudo systemctl enable --now autorandr-lid-listener.service
```
### Bluetooth support
For having [Bluetooth](https://wiki.archlinux.org/title/Bluetooth) working, the
`bluetoothd` daemon must run in the background.
Run the following systemd command in order to run bluetoothd from the beginning.
```bash
sudo systemctl enable --now bluetooth.service
```
Tools like [`bluetui`](https://github.com/pythops/bluetui) and
`bluetoothctl` may be used for frontends for interacting.
### Yubikey support
[Yubikey](https://wiki.archlinux.org/title/YubiKey) builds upon the smartcard
interface, whose service may not be running.
You may enable the service to become available via systemd activation:
```bash
sudo systemctl enable --now pcscd.service
```
### auto-cpufreq post-installation activation [9]
THe `auto-cpufreq` daemon need to be activated via systemd first.
```bash
sudo systemctl enable --now auto-cpufreq
```
Once done, `auto-cpufreq --stats` allows live-observing the profile. For
instance on AC, the `performance` governor will be applied, otherwise the
`powersave` governor when relying on battery.