NOTE: Before using this configuration, please take a look at Tweakable configs/Mandatory tweaks in order to set up your system correctly.
Welcome. This is my personal dotfile repository. I use Arch Linux, so these dotfiles are customized to work there. I have also used a Macbook when professionally required, so most of the configs will work there too, but expect some incompatibilities and occasional breakage.
I do not directly keep my dotfiles in this repository. Rather, I write them as
  literary documents with the actual configs embedded as code blocks. With the
  help of Emacs and it’s excellent org-mode, I can run a command and those code
  blocks go exactly into the config file they need to. This approach is known as
  literate programming.
I find it superior compared to keeping the config files directly because:
- It is much easier to document my configuration as it has become quite complex and reading/writing it this way feels more natural.
 - I can group related configuration from multiple programs in a single file, and then export (tangle is the technical term) them where they need to go. See for example: shells.org.
 - For each application, I can use the same org file to keep its configuration and a script that installs all of its dependencies.
 - I can use the breadth of 
org-modefeatures to more easily navigate my configs. - It is very satisfying.
 - I can put all the configs into a 
~/.harisfolder and make that a regular git repository, instead of keeping a bare repo in my home directory, which has some drawbacks. 
NOTE: The dotfiles are meant exclusively for Linux desktop. They have mostly been created with an Arch Linux setup in mind, but most things should be applicable to other distros as well (although I didn’t specifically test this).
I keep all persistent user configs in org files, and use org-babel-tangle (part
  of Emacs) to tangle them, i.e. send all the configs to the files they need to be in
  for the programs to read them.
If you are setting up these dotfiles for the first time, you can just run:
curl https://veracioux.me/dotfiles/bootstrap.sh | bashThis will tangle all the dotfiles to where they need to go to be usable. You may still need to install dependencies to ensure you have all the programs the dotfiles are meant to configure.
If you would like to do things in a more supervised manner, follow the bootstrap instructions.
Once you have set everything up, any changes you make to the org-mode dotfiles
  will be applied directly to your live configs when you call org-babel-tangle.
  There are also Emacs key bindings for this, which you can inspect yourself.
Most of my org-mode dotfiles have various Dependencies sections with code blocks
  tangled to /tmp/dependencies-$USER/..., grouped by package manager that is
  needed to install them. Those files contain a space/newline separated list of
  package names, and the script (WIP) that installs the dependencies will parse
  them as separate command-line arguments.
Here is a list of file extensions that can be used for dependency specifications
  tangled to /tmp/dependencies-$USER/, including how each will (soon) be processed
  by dependency installation scripts:
.pacman- Official Arch Linux packages, which will be installed with 
sudo pacman -S .aur- AUR packages, which will be installed with 
paru -S .ubuntu- APT packages that should be installed on Ubuntu 22.04, using 
sudo apt install. I might subdivide this for multiple Ubuntu versions. .pip- Python 3 packages, installed using 
sudo pip install. .cpan- CPAN packages, installed using 
sudo cpan. .pip-user- Python 3 packages, installed using 
pip installfor the current user only. - Any other extension or none
 - Custom dependency installation script. It will be executed directly.
 
This list might be extended in the future, but I will try my best to keep it up to date as a centralized overview of all the subdirectories I use.
NOTE: I made most of the dependency lists while using Arch Linux, so you should
  expect the best completeness when using pacman as the package manager and paru
  as an AUR helper.
NOTE: I have recently started seriously using a Ubuntu setup as well, making changes to my configs whenever I noticed that something didn’t work. Some things were caused by differing packages among distributions, and I solved them by installing the missing dependencies, but I haven’t always been meticulous in updating my dotfiles correspondingly.
To set up a new system, you can look at system-setup.org. It is incomplete, but should be better than starting from scratch.
Here you can find a mapping of mime types to default applications that I use, and some added mime type associations. To apply the changes, run:update-desktop-database ~/.local/share/applications[Default Applications]
application/octet-stream=emacs.desktop;gvim.desktop;
application/pdf=org.pwmt.zathura-pdf-poppler.desktop;
application/x-dxf=librecad.desktop;
application/x-gnome-saved-search=nemo.desktop;
inode/directory=alacritty-open.desktop;
image/jpeg=vimiv.desktop;sxiv.desktop;
image/png=vimiv.desktop;sxiv.desktop;
image/svg+xml=vimiv.desktop;sxiv.desktop;
image/tiff=vimiv.desktop;sxiv.desktop;
image/vnd.dwg=inkscape.desktop;
image/vnd.dxf=org.inkscape.Inkscape.desktop;
image/webp=vimiv.desktop;sxiv.desktop;
text/doc=libreoffice-writer.desktop;
text/html=firefox.desktop;
text/plain=emacs.desktop;gvim.desktop;
text/x-arduino=arduino-arduinoide.desktop;
text/x-bibtex=emacs.desktop;gvim.desktop;
text/x-c=emacs.desktop;gvim.desktop;
text/x-c++=emacs.desktop;gvim.desktop;org.qt-project.qtcreator.desktop;
text/x-chdr=emacs.desktop;gvim.desktop;
text/x-c++hdr=emacs.desktop;gvim.desktop;org.qt-project.qtcreator.desktop;
text/x-csrc=emacs.desktop;gvim.desktop;
text/x-c++src=emacs.desktop;gvim.desktop;org.qt-project.qtcreator.desktop;
text/xml=emacs.desktop;gvim.desktop;firefox.desktop;
text/x-org=emacs.desktop;
text/x-script.python=emacs.desktop;gvim.desktop;
text/x-shellscript=emacs.desktop;gvim.desktop;
text/x-tex=emacs.desktop;gvim.desktop;
video/mp4=mpv.desktop;
video/mpeg=mpv.desktop;
video/webm=mpv.desktop;
video/x-matroska=mpv.desktop;
x-directory/gnome-default-handler=nemo.desktop;
x-directory/normal=nemo.desktop;
x-scheme-handler/file=nemo.desktop;
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
x-scheme-handler/msteams=teams.desktop;
x-scheme-handler/tg=org.telegram.desktop.desktop;
x-scheme-handler/viber=viber.desktop;
[Added Associations]
application/octet-stream=gvim.desktop;
application/x-bibtex=gvim.desktop;
image/vnd.dwg=inkscape.desktop;org.inkscape.Inkscape.desktop;
image/vnd.dxf=inkscape.desktop;org.inkscape.Inkscape.desktop;
I have configured my main shell fish to notify me when non-visible background tasks finish. Setting this variable to a non-zero value disables this behavior.
This variable is hardly invented by me. But I use it heavily in scripts, most
  notably the TERM=dumb value. In general, if TERM=dumb, that is a hint to my
  scripts and utilities that graphical interaction is preferred over terminal
  interaction. The askpass command behaves this way for example.
This is a list of configs that you can tweak per deployment. They are not under version control. Some of them should be set up in order for things to work correctly, like the ID of your bluetooth headphones, etc.
These tweaks are mandatory for all the features to work correctly. If you don’t configure some of them, your system probably won’t break but you will experience missing features.
- OpenAI key
 - Bluetooth headphones ID
 - CPU temperature file
 
- Local and temporary shell configs
 
This section describes briefly where to find configurations for various programs.
# Development worktrees
wt*/