{"id":31074131,"url":"https://github.com/ema-pe/dotfiles","last_synced_at":"2026-04-08T18:02:15.848Z","repository":{"id":313615311,"uuid":"1047920317","full_name":"ema-pe/dotfiles","owner":"ema-pe","description":"My own dotfiles.","archived":false,"fork":false,"pushed_at":"2026-03-27T13:26:51.000Z","size":921,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-27T23:57:02.354Z","etag":null,"topics":["bash","configuration","dotfiles","neovim","python"],"latest_commit_sha":null,"homepage":"https://gitlab.com/ema-pe/dotfiles","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ema-pe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-31T14:30:03.000Z","updated_at":"2026-03-27T13:26:56.000Z","dependencies_parsed_at":"2025-10-06T06:36:50.923Z","dependency_job_id":null,"html_url":"https://github.com/ema-pe/dotfiles","commit_stats":null,"previous_names":["ema-pe/dotfiles"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ema-pe/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ema-pe%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ema-pe%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ema-pe%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ema-pe%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ema-pe","download_url":"https://codeload.github.com/ema-pe/dotfiles/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ema-pe%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31567227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","configuration","dotfiles","neovim","python"],"created_at":"2025-09-16T02:03:25.598Z","updated_at":"2026-04-08T18:02:15.840Z","avatar_url":"https://github.com/ema-pe.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ema-pe dotfiles\n\n**Author:** Emanuele Petriglia\n\n## Table of Contents\n\n- [What they are](#what-they-are)\n- [Requirements](#requirements)\n- [Installation](#installation)\n  - [Dotfiles installation](#dotfiles-installation)\n  - [Repository installation](#repository-installation)\n- [Modules](#modules)\n  - [bash](#bash)\n  - [bin](#bin)\n  - [bluetooth](#bluetooth)\n  - [clean](#clean)\n  - [dotfiles](#dotfiles)\n  - [firefox](#firefox)\n  - [focuswriter](#focuswriter)\n  - [font](#font)\n  - [git](#git)\n  - [gpg](#gpg)\n  - [gtk](#gtk)\n  - [icon](#icon)\n  - [lightdm](#lightdm)\n  - [packages](#packages)\n  - [python](#python)\n  - [thunar](#thunar)\n  - [tlp](#tlp)\n  - [xfce4](#xfce4)\n  - [xfce4-keyboard-shortcuts](#xfce4-keyboard-shortcuts)\n  - [xfce4-terminal](#xfce4-terminal)\n  - [xfwm4](#xfwm4)\n  - [youtube-dl](#youtube-dl)\n- [Makefile](#makefile)\n- [License](#license)\n\n## What they are\n\nThis repository contains some dotfiles, scripts and configurations that I use every day. \n\nThe git repository is available online on both [GitLab](https://gitlab.com/ema-pe/dotfiles) and [GitHub](https://github.com/ema-pe/dotfiles). However, GitHub is a **read-only mirror** of GitLab. \n\n\u003e [!important]\n\u003e As of August 2025, the dotfiles are partially deprecated. I have started rewriting them, as well as the installation script. See [issue 31](https://gitlab.com/ema-pe/dotfiles/-/issues/31) for more information.\nthing important you should know.\n\n## Requirements\n\nThese 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.\n\nScripts under the `bin` directory are written to work with any operating system with Bash, GAWK or Python. \n\n## Installation\n\n### Dotfiles installation\n\nMy dotfiles are organized as modules.  A module is a Bash script that can do any things, it can: \n\n* Run commands (eg. `dnf`, `curl` or `wget`);\n* Install configuration files (usually by linking them);\n* Manage services (via systemd).\n\nIf you want to install a module, you need to run:  `dotfiles install \u003cmodule\u003e`. With `dotfiles list` you can get a list of available modules.\n\nNote that a module may be not have a dedicated subdirectory (as example the module `gtk` doesn't have `gtk` directory).\n\n### Repository installation\n\nYou can directly download this repository and run the `dotfiles` script: \n\n```bash\n$ git clone git@gitlab.com:ema-pe/dotfiles.git ~/. dotfiles\n```\n\nOr, if you don't have SSH keys installed: \n\n```bash\n$ git clone https://gitlab.com/ema-pe/dotfiles.git ~/.dotfiles\n$ cd ~/.dotfiles\n$ ./dotfiles install gpg git\n$ # install gpg keys... \n$ git remote set-url origin git@gitlab.com:ema-pe/dotfiles.git\n```\n\nIf you want to update git submodule to last commit, run this command:\n\n```bash\ngit submodule foreach git pull origin master\n```\n\nIf there are new commits, you also need to commit this update. \n\n## Modules\n\n### bash\n\nThese modules simply link my bash configuration, that consists of a `bashrc` and `bash_profile` file. It contains essential environment variables, aliases and small scripts. \n\nThere is also a custom `.inputrc` file for configuring GNU Readline.\n\nIt also provides some autocompletion scripts for `dotfiles` script and other custom scripts.\n\n---\n\n### bin\n\nThis module install all scripts in [`bin`](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! \n\nScripts that I no longer use are archived in a [special repository](https://gitlab.com/ema-pe/archived-scripts) on GitLab.\n\nAvailable scripts:\n\n* [**backup**](bin/backup): this script syncs some data from my laptop to my external HDD.\n* [**firefox-tmp**](bin/firefox-tmp): this script launches a temporary Mozilla Firefox instance (useful for testing or debugging).\n* [**gandi-aliases**](bin/gandi-aliases): this script manages aliases for my email hosted on [Gandi. net](https://www.gandi.net/en).\n* [**odt2adoc**](bin/odt2adoc): a small Python script that extracts text from an OpenDocument file to a pure text file.\n* [**open-gpxsee**](bin/open-gpxsee): a small Python script to open `gpxsee` with GPX files according to the location of the first point (Rome or Milan).\n* [**screen-off**](bin/screen-off): this simple script turns off the screen. \n\n---\n\n### bluetooth\n\nThis module just disables Bluetooth service via systemd, because it is enabled by default on Fedora. \n\n---\n\n### clean\n\nThis 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.\n\n---\n\n### dotfiles\n\nThis module installs the `dotfiles` script to `~/.local/bin` folder. It is supposed that this path is added previously to `PATH` environment variable.\n\n---\n\n### draw.io\n\nThis module installs [draw.io](https://www.drawio.com/) as AppImage to `~/.local/bin`. It is supposed that this path is added previously to `PATH` environment variable.\n\n---\n\n### firefox\n\nI 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. \n\n#### Manual installation process\n\nUnfortunately Firefox needs to be customized from GUI instead on CLI, so there is not a real installer script. The steps to take are:\n\n1. Open a new terminal window and run this command:  `firefox --ProfileManager`.\n2. Create a new user with this name: `default-release`.\n3. Login to Firefox Sync (or download all extensions you want).\n4. Customize Firefox GUI. \n5. To set custom `user.js`, run my installer script. \n\n\u003e **Important:** You need to create the default profile before run `dotfiles` script! \n\n#### Extensions\n\nExtensions can't be installed from command line, so you need to install them manually (or use [Firefox Sync](https://www.mozilla.org/en-US/firefox/features/sync/)). I use these extensions:\n\n* [**CanvasBlocker**](https://addons.mozilla.org/en-US/firefox/addon/canvasblocker/): prevent Canvas fingerprinting;\n* [**CSS Exfil Protection**](https://addons.mozilla.org/en-US/firefox/addon/css-exfil-protection/): prevent CSS Exfil attacks;\n* [**Decentraleyes**](https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/): local emulation of CDN;\n* [**HTTPS Everywhere**](https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/): force HTTPS on sites;\n* [**Tridactyl**](https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/): VIM keybindings on Firefox;\n* [**uBlock Origin**](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/): general AD blocker;\n* [**Neat URL**](https://addons.mozilla.org/en-US/firefox/addon/neat-url/): remove garbage from URLs;\n* [**Containerise**](https://addons.mozilla.org/en-US/firefox/addon/containerise/): automatically open websites in a container;\n* [**Add custom search engine**](https://github.com/evilpie/add-custom-search-engine): add custom search engine. \n\nAll these extensions are automatically updated via Firefox, so you only need to download them the first time.\n\n#### Custom user.js\n\nThe `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. \n\nI 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`](firefox/user.js) that overrides some options.\n\nThis 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.\n\n---\n\n### focuswriter\n\n[FocusWriter](https://gottcode.org/focuswriter) is a simple, distraction free text editor.  I use it to write short stories and novels, with a custom theme and configuration.\n\nThis modules will install `focuswriter`, and copy my configuration and custom theme. \n\n\u003e **Warning:** My custom theme and configuration have my username hard-coded! \n\n---\n\n### font\n\nThis module installs Hack font on the system, but it doesn't activate it. \n\n---\n\n### git\n\nThis module installs `git` and links the configuration. \n\n---\n\n### gpg\n\nI 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`.\n\nThe GnuPG file configuration is located at `~/.gnupg/gpg.conf`, the agent configuration is located at `~/.gnupg/gpg-agent.conf`. This module installs them. \n\nThere 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.\n\nThe 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:\n\n```bash\nexport SSH_AUTH_SOCK=\"/run/user/$(id -u)/gnupg/S.gpg-agent. ssh\"\n```\n\nI 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:\n\n```bash\npkill ssh-agent\n```\n\nThis module also installs `pinentry-gtk`, because I don't like the default installed that uses ncurses.\n\n---\n\n### gtk\n\nThis module just installs and activate Arc-Dark GTK theme.\n\n---\n\n### icon\n\nThis module just installs and activate `papirus-icon-theme` icon theme.\n\n---\n\n### lightdm\n\n[LightDM](https://github.com/canonical/lightdm) is a desktop manager easy to use, flexible and lightweight. I use it simply because it is pre-installed on Fedora. \n\nI 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. \n\n\u003e **Important:** **DO NOT LOCK THE SCREEN**. If you lock the screen and go back to the greeter, it crashes.  I don't know why. \n\n---\n\n### packages\n\nThis module adds RPM Fusion repository and install lots of application that I use and are not installed by default on Fedora.  They are: \n\n* pass:  a command line password manager that uses `git` and `gpg`;\n* thunderbird: a graphical email client;\n* vlc: THE video player;\n* telegram-desktop: a Telegram client. \n* ffmpeg: the swiss-knife tool for audio and video. \n* gpxsee: a GUI to see GPX tracks on maps. \n* ImageMagick: the must have to handle images.\n* hledger: a tool to manage accounting. \n* syncthing: sync data between devices.\n* ShellCheck: linter for Bash scripts.\n* libheif-tools: tools to handle HEIC file images. \n\n---\n\n### python\n\nThis 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.\n\n---\n\n### thunar\n\nThis 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! \n\nI use some custom send-to actions, they are basically a wrapper to the original scripts: \n\n* [**osmgpx**](xfce4/Thunar/send-to/osmgpx. desktop): a shortcut to [`osmgpx`](bin/osmgpx) script. \n\n---\n\n### tlp\n\nTLP is a useful package to manage power and extends battery life. It works well with other power management software (like `xfce4-powermanager`).\n\nThis package can be found via Fedora official repository with the name `tlp`.\n\nThe default configuration file, located on `/etc/default/tlp` is good, but I've done some customization (I'm using a Thinkpad laptop).\n\nThe basic commands available are:\n\n* Start tlp: `sudo tlp start` (but there is also a unit file for systemd);\n* Check the configuration: `sudo tlp stat`;\n* Manage Wi-Fi and Bluetooth: `wifi [on/off]` and `bluetooth [on/off]`.\n\nThis module will install tlp, copy my configuration, start tlp and enable the unit file (for systemd).\n\n---\n\n### xfce4\n\nThis modules installs my configuration of Xfce desktop environment.  Some applications, like `xfce4-terminal` or `thunar` are configured by a different module.\n\nIt is difficult to configure Xfce applications, because they do not use a plain text configuration, instead they use `xfconf`.\n\nThis modules install my `xfce4-panel` configuration, font and size settings for GTK applications and `xfce4-desktop`.\n\n---\n\n### xfce4-keyboard-shortcuts\n\nThis 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! ):\n\n* _Super + v_: `vlc`\n* _Super + r_: `xfce4-appfinder --disable-server --collapsed`\n* _Super + u_: `xfce4-taskmanager`\n* _Super + e_: `xfce4-terminal --drop-down`\n* _Super + t_: `xfce4-terminal --maximize`\n* _Super + l_: `screen-off`\n* _Shift + Print_: `xfce4-screenshooter --window`\n* _Primary + Print_: `xfce4-screenshooter --region`\n* _Alt + Print_: `xfce4-screenshooter --region`\n* _Print_: `xfce4-screenshooter --fullscreen`\n* _Super + s_: `telegram-desktop`\n* _Super + f_: `thunar`\n* _Super + x_: `mousepad`\n* _Super + q_: `firefox-tmp`\n* _Super + w_:  `firefox`\n* _Super + m_: `thunderbird`\n* _Super + r_: `xfce4-appfinder --collapsed`\n\n---\n\n### xfce4-terminal\n\nThis module installs my custom theme, but it doesn't activate it. Other settings are not touched.\n\n---\n\n### xfwm4\n\nI use Thinble Xfwm theme.  In my repository under [xfwm4](xfwm4) diretory you can find the theme, but the original project is hosted on [DevianArt](https://paldepind.deviantart.com/art/Thinble-362276066). The following text is copied from DevianArt. \n\nThinble 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.\n\n#### Features\n\n* Minimal and space efficient appearance;\n* No large title bar that is otherwise mostly just wasting space;\n* Border of a reasonable size for moving/resizing windows using the mouse;\n* Slightly darker border on active windows for distinguishing between them an inactive windows;\n* Uses colors from your GTK-theme.\n\n#### Installation\n\nCopy [`xfwm4/thinble`](xfwm4/thinble) directory to `~/.themes` for local installation or to `/usr/share/themes` for system-wide installation. Or better use my installer script!\n\n\u003e **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.\n\n---\n\n### youtube-dl\n\nThis module downloads and installs a version of youtube-dl called [yt-dlp](https://github.com/yt-dlp/yt-dlp), a fork with update extractors.\n\n## Makefile\n\nI also provide a custom [Makefile](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.\n\nThis Makefile is executed on Gitlab CI, to run locally type `make all`. You can also specify with file to lint, with `make` + `TAB`.\n\n## License\n\nEvery script is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fema-pe%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fema-pe%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fema-pe%2Fdotfiles/lists"}