Author: Emanuele Petriglia
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 ~/. dotfilesOr, 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.gitIf you want to update git submodule to last commit, run this command:
git submodule foreach git pull origin masterIf 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
dotfilesscript!
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](https://github.com/ghacksuserjs/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!
This module installs Hack font on the system, but it doesn't activate it.
This module installs git and links the configuration.
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-agentThis module also installs pinentry-gtk, because I don't like the default installed that uses ncurses.
This module just installs and activate Arc-Dark GTK theme.
This module just installs and activate papirus-icon-theme icon theme.
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:
- [osmgpx](xfce4/Thunar/send-to/osmgpx. desktop): a shortcut to
osmgpxscript.
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).
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.