This repository contains some dotfiles, scripts and configurations that I use every day.
The git repository is available online on both GitLab and GitHub. However, GitHub is a read-only mirror of GitLab.
|
Warning
|
As of August 2025, the dotfiles are partially deprecated. I have started rewriting them, as well as the installation script. |
These dotfiles can be used on any operating system, because they are just
configuration files, it depends on what you are looking for. I use a simple Bash
script, called dotfiles, that automatically installs all dotfiles and it sets
up my computer to be ready to use. This script is specifically created to work
with Fedora and it is tailored to my needs, so you may not like it or it won’t
work on your system.
Scripts under the bin directory are written to work with any operating system
with Bash, GAWK or Python.
My dotfiles are organized as modules. A module is a Bash script that can do any things, it can:
-
Run commands (eg.
dnf,curlorwget); -
Install configuration files (usually by linking them);
-
Manage services (via systemd).
If you want to install a module, you need to run: dotfiles install <module>.
With dotfiles list you can get a list of available modules.
Note that a module may be not have a dedicated subdirectory (as example the
module gtk doesn’t have gtk directory).
You can directly download this repository and run the dotfiles script:
$ git clone [email protected]:ema-pe/dotfiles.git ~/.dotfiles
Or, if you don’t have SSH keys installed:
$ git clone https://gitlab.com/ema-pe/dotfiles.git ~/.dotfiles $ cd ~/.dotfiles $ ./dotfiles install gpg git $ # install gpg keys... $ git remote set-url origin [email protected]:ema-pe/dotfiles.git
If you want to update git submodule to last commit, run this command:
git submodule foreach git pull origin master
If there are new commits, you also need to commit this update.
These modules simply link my bash configuration, that consists of a bashrc and
bash_profile file. It contains essential environment variables, aliases and
small scripts.
It also provides some autocompletion scripts for dotfiles script and other
custom scripts.
This module install all scripts in bin directory to ~/.local/bin.
These scripts are written in various programming languages (Python, Bash) and
they can require special software or libraries to run. Always read the entire
script before use!
Scripts that I no longer use are archived in a special repository on GitLab.
Available scripts:
-
backup: this script syncs some data from my laptop to my external HDD.
-
firefox-tmp: this script launches a temporary Mozilla Firefox instance (useful for testing or debugging).
-
gandi-aliases: this script manages aliases for my email hosted on Gandi.net.
-
odt2adoc: a small Python script that extracts text from an OpenDocument file to a pure text file.
-
open-gpxsee: a small Python script to open
gpxseewith GPX files according to the location of the first point (Rome or Milan). -
screen-off: this simple script turns off the screen.
This module just disables Bluetooth service via systemd, because it is enabled by default on Fedora.
This module just removes via dnf all pre-installed Fedora packaged that I
don’t use. For a list of these packages, open the script and go to the clean
module.
This module installs the dotfiles script to ~/.local/bin folder. It is
supposed that this path is added previously to PATH environment variable.
I use Mozilla Firefox as my main browser. I like it because is privacy focused, fast and work really well in Linux. It is a big and complex software, it is not easy to customize it.
Unfortunately Firefox needs to be customized from GUI instead on CLI, so there is not a real installer script. The steps to take are:
-
Open a new terminal window and run this command:
firefox --ProfileManager. -
Create a new user with this name:
default-release. -
Login to Firefox Sync (or download all extensions you want).
-
Customize Firefox GUI.
-
To set custom
user.js, run my installer script.
|
Important
|
You need to create the default profile before run dotfiles script!
|
Extensions can’t be installed from command line, so you need to install them manually (or use Firefox Sync). I use these extensions:
-
CanvasBlocker: prevent Canvas fingerprinting;
-
CSS Exfil Protection: prevent CSS Exfil attacks;
-
Decentraleyes: local emulation of CDN;
-
HTTPS Everywhere: force HTTPS on sites;
-
Tridactyl: VIM keybindings on Firefox;
-
uBlock Origin: general AD blocker;
-
Neat URL: remove garbage from URLs;
-
Containerise: automatically open websites in a container;
-
Add custom search engine: add custom search engine.
All these extensions are automatically updated via Firefox, so you only need to download them the first time.
The user.js file is a file with all options to customize Firefox behavior.
Many options can be selected from the graphical interface, but lots are hidden.
I use ghacks' user.js, an
user.js enhanced for privacy. I don’t like some options, so I have also a
custom user.js that overrides some options.
This module will download the latest version of ghacks' user.js and move that
file to the Firefox profile with suffix default-release. At the end it appends
my custom options to user.js file on the profile.
FocusWriter is a simple, distraction free text editor. I use it to write short stories and novels, with a custom theme and configuration.
This modules will install focuswriter, and copy my configuration and custom
theme.
|
Warning
|
My custom theme and configuration have my username hard-coded! |
I use GnuPG to manager my PGP keys. GnuPG have also an agent called
gpg-agent, I use it also for SSH support. There is some configuration because
out-of-the-box Fedora uses ssh-agent and gnome-keyring.
The GnuPG file configuration is located at ~/.gnupg/gpg.conf, the agent
configuration is located at ~/.gnupg/gpg-agent.conf. This module installs
them.
There is a default daemon enabled of gpg-agent, but I prefer to manage the
daemon with systemd --user. Luckily GnuPG comes with default files for
systemd, but they are not enabled. This module enables them.
The module also enables gpg-agent for SSH support. It is necessary to
specify the environment variable SSH_AUTH_SOCK to point to gpg-agent
socket. This line is already added in my custom .bashrc file:
export SSH_AUTH_SOCK="/run/user/$(id -u)/gnupg/S.gpg-agent.ssh"
I use Xfce as desktop environment. There is only one problem: it auto starts
ssh-agent. I don’t want it, so I kill it every time Xfce is started. This
line is already added in my custom .bash_profile file:
pkill ssh-agent
This module also installs pinentry-gtk, because I don’t like the default
installed that uses ncurses.
LightDM is a desktop manager easy to use, flexible and lightweight. I use it simply because it is pre-installed on Fedora.
I prefer an auto login method because the disk is encrypted and the computer have only one user. I do not want to type two password when I boot the computer, and the second is useless because if someone find the disk password he can grab the data without problems. A display manager is also useless in my case because I have only one user, but I keep it to have a "modern" desktop.
|
Important
|
DO NOT LOCK THE SCREEN. If you lock the screen and go back to the greeter, it crashes. I don’t know why. |
This module adds RPM Fusion repository and install lots of application that I use and are not installed by default on Fedora. They are:
-
pass: a command line password manager that uses
gitandgpg; -
thunderbird: a graphical email client;
-
vlc: THE video player;
-
telegram-desktop: a Telegram client.
-
ffmpeg: the swiss-knife tool for audio and video.
-
gpxsee: a GUI to see GPX tracks on maps.
-
ImageMagick: the must have to handle images.
-
hledger: a tool to manage accounting.
-
syncthing: sync data between devices.
-
ShellCheck: linter for Bash scripts.
-
libheif-tools: tools to handle HEIC file images.
This module just installs the package python3-docs, because it is not
installed by default on Fedora. I prefer to have offline documentation because
the search function is faster than the online version, and it can be used
without Internet connection.
This module installs, via xfconf-query, my Thunar configuration. Note that if
you change the configuration via Thunar GUI, the new configuration will not be
synched to dotfiles. You need to manually update the configuration!
I use some custom send-to actions, they are basically a wrapper to the original scripts:
TLP is a useful package to manage power and extends battery life. It works well
with other power management software (like xfce4-powermanager).
This package can be found via Fedora official repository with the name tlp.
The default configuration file, located on /etc/default/tlp is good, but I’ve
done some customization (I’m using a Thinkpad laptop).
The basic commands available are:
-
Start tlp:
sudo tlp start(but there is also a unit file for systemd); -
Check the configuration:
sudo tlp stat; -
Manage Wi-Fi and Bluetooth:
wifi [on/off]andbluetooth [on/off].
This module will install tlp, copy my configuration, start tlp and enable the unit file (for systemd).
I use VIM as my text editor for programming and writing. I found it very productive and efficient.
My vimrc file is well documented, I also use some plugins:
-
goyo.vim: for writing without distractions.
-
papercolor-theme: a VIM color scheme inspired by Google’s Material Design.
-
python-syntax: better Python syntax highlighting.
-
vim-pencil: better movements for writing prose.
-
vim-syntax-extra: better C syntax highlighting.
-
SimplylFold: better Python folding.
-
redact_pass: improve security when editing a password file with VIM. It requires
passpackage. -
vim-asciidoctor: better Asciidoc syntax highlighting and also support for folding.
Both goyo.vim and vim-pencil are not automatically started with VIM, instead
you need to run vim -c Writing.
This modules installs my configuration of Xfce desktop environment. Some
applications, like xfce4-terminal or thunar are configured by a different
module.
It is difficult to configure Xfce applications, because they do not use a plain
text configuration, instead they use xfconf.
This modules install my xfce4-panel configuration, font and size settings for
GTK applications and xfce4-desktop.
This module installs my custom application shortcuts to Xfce. It is a distinct module because I change often these keybindings. These are the shortcuts (for an updated list always check the source code!):
-
<Super>v:
vlc -
<Super>r:
xfce4-appfinder --disable-server --collapsed -
<Super>u:
xfce4-taskmanager -
<Super>e:
xfce4-terminal --drop-down -
<Super>t:
xfce4-terminal --maximize -
<Super>l:
screen-off -
<Shift>Print:
xfce4-screenshooter --window -
<Primary>Print:
xfce4-screenshooter --region -
<Alt>Print:
xfce4-screenshooter --region -
Print:
xfce4-screenshooter --fullscreen -
<Super>s:
telegram-desktop -
<Super>f:
thunar -
<Super>x:
mousepad -
<Super>q:
firefox-tmp -
<Super>w:
firefox -
<Super>m:
thunderbird -
<Super>r:
xfce4-appfinder --collapsed
This module installs my custom theme, but it doesn’t activate it. Other settings are not touched.
I use Thinble Xfwm theme. In my repository under xfwm4 diretory you can find the theme, but the original project is hosted on DevianArt. The following text is copied from DevianArt.
Thinble is a Xfwm theme with no title bar and a thin border. It was created to be a good looking, simple and space efficient window theme for people who mainly manage their windows using key bindings.
-
Minimal and space efficient appearance;
-
No large title bar that is otherwise mostly just wasting space;
-
Border of a reasonable size for moving/resizing windows using the mouse;
-
Slightly darker border on active windows for distinguishing between them an inactive windows;
-
Uses colors from your GTK-theme.
Copy xfwm4/thinble directory to ~/.themes for local
installation or to /usr/share/themes for system-wide installation. Or better
use my installer script!
|
Important
|
Make the title font very large, otherwise you might still be able to see the top of it in what is left of the title bar which does not look nice at all. |
This module downloads and installs a version of youtube-dl called yt-dlp, a fork with update extractors.
I also provide a custom Makefile file to lint all scripts in my
repository. You need some special software, such as shellcheck to lint Bash
script or flake8 to lint Python scripts.
This Makefile is executed on Gitlab CI, to run locally type make all. You can
also specify with file to lint, with make + TAB.
Every script is licensed under the MIT License.