Skip to content

ema-pe/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ema-pe dotfiles

What they are

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.

Requirements

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.

Installation

Dotfiles installation

My dotfiles are organized as modules. A module is a Bash script that can do any things, it can:

  • Run commands (eg. dnf, curl or wget);

  • 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).

Repository installation

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.

Modules

bash

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.


bin

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 gpxsee with GPX files according to the location of the first point (Rome or Milan).

  • screen-off: this simple script turns off the screen.


bluetooth

This module just disables Bluetooth service via systemd, because it is enabled by default on Fedora.


clean

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.


dotfiles

This module installs the dotfiles script to ~/.local/bin folder. It is supposed that this path is added previously to PATH environment variable.


firefox

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.

Manual installation process

Unfortunately Firefox needs to be customized from GUI instead on CLI, so there is not a real installer script. The steps to take are:

  1. Open a new terminal window and run this command: firefox --ProfileManager.

  2. Create a new user with this name: default-release.

  3. Login to Firefox Sync (or download all extensions you want).

  4. Customize Firefox GUI.

  5. To set custom user.js, run my installer script.

Important
You need to create the default profile before run dotfiles script!

Extensions

Extensions can’t be installed from command line, so you need to install them manually (or use Firefox Sync). I use these extensions:

All these extensions are automatically updated via Firefox, so you only need to download them the first time.

Custom user.js

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

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!

font

This module installs Hack font on the system, but it doesn’t activate it.


git

This module installs git and links the configuration.


gpg

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.


gtk

This module just installs and activate Arc-Dark GTK theme.


icon

This module just installs and activate papirus-icon-theme icon theme.


lightdm

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.

packages

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 git and gpg;

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


python

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.


thunar

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

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] and bluetooth [on/off].

This module will install tlp, copy my configuration, start tlp and enable the unit file (for systemd).


vim

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:

Both goyo.vim and vim-pencil are not automatically started with VIM, instead you need to run vim -c Writing.


xfce4

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.


xfce4-keyboard-shortcuts

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


xfce4-terminal

This module installs my custom theme, but it doesn’t activate it. Other settings are not touched.


xfwm4

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.

Features

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

Installation

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.

youtube-dl

This module downloads and installs a version of youtube-dl called yt-dlp, a fork with update extractors.

Makefile

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.

License

Every script is licensed under the MIT License.