{"id":13622981,"url":"https://github.com/potamides/dotfiles","last_synced_at":"2025-09-29T18:31:35.922Z","repository":{"id":49063672,"uuid":"259347156","full_name":"potamides/dotfiles","owner":"potamides","description":"My personal dotfiles for most of the programs I use on a daily basis.","archived":false,"fork":false,"pushed_at":"2024-04-01T08:23:41.000Z","size":8713,"stargazers_count":149,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-20T01:28:01.223Z","etag":null,"topics":["alacritty","awesome","awesomewm","bash","config","conky","dotfiles","linux","lua","mutt","ncmpcpp","neovim","physlock","ptpython","qpdfview","ranger","tmux","weechat","when"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"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/potamides.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}},"created_at":"2020-04-27T14:20:32.000Z","updated_at":"2024-04-28T04:35:37.000Z","dependencies_parsed_at":"2024-04-14T02:18:38.022Z","dependency_job_id":"5ff50f23-6599-4919-bab5-e501bcc415b5","html_url":"https://github.com/potamides/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potamides%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potamides%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potamides%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potamides%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/potamides","download_url":"https://codeload.github.com/potamides/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234650362,"owners_count":18866193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alacritty","awesome","awesomewm","bash","config","conky","dotfiles","linux","lua","mutt","ncmpcpp","neovim","physlock","ptpython","qpdfview","ranger","tmux","weechat","when"],"created_at":"2024-08-01T21:01:26.578Z","updated_at":"2025-09-29T18:31:35.908Z","avatar_url":"https://github.com/potamides.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"\u003ca href=\"#readme\"\u003e\n  \u003cimg alt=\"🍙 Dotfiles\" width=\"100%\" src=\"https://user-images.githubusercontent.com/53401822/162452560-4addbc36-c894-47b0-8479-c99e7fb5818c.svg\"/\u003e\n\u003c/a\u003e\n\n---\n\nThis repository contains my personal\n[dotfiles](https://wiki.archlinux.org/title/Dotfiles) for most of the programs\nI use on a daily basis. Primarily, this allows me to organize my\n[rice](https://thatnixguy.github.io/posts/ricing) and to easily set up the\ncomputing experience I enjoy on any machine I come across. However, it also\nallows me to share my preferences with others. I think there are some\ninteresting things here worth discovering, and that's why I take the time to\nwrite (or at least try to write) sufficient comments and documentation.\n\nMy principles are to find a satisfactory balance between functionality and\ndesign while keeping an eye on resource consumption. I prefer keyboard-focused\ncontrol over everything else and place a high value on visual consistency\n(preferably by using the [gruvbox](https://github.com/morhetz/gruvbox) color\nscheme). I use [Arch Linux](https://archlinux.org) as my daily driver, but\nthere shouldn't be much here requiring this specific distribution, so using my\nconfigurations on other distros or, in the worst case, porting them shouldn't be\ntoo hard. I prefer a slightly retro design, but I don't shy away from\noccasionally using Unicode symbols and [Nerd Font](https://www.nerdfonts.com)\nglyphs in my terminal applications. However, since I sometimes only work with\nthe [Linux console](https://wiki.archlinux.org/title/Linux_console), I always\nmake sure to fall back to settings that look good in [VGA text\nmode](https://en.wikipedia.org/wiki/VGA_text_mode) with [code page\n437](https://en.wikipedia.org/wiki/Code_page_437), if that should be the case.\n\n\u003cdetails\u003e\u003csummary\u003ePast Discussions\u003c/summary\u003e\n\n  * [Vi-like keybindings for awesome](https://www.reddit.com/r/awesomewm/comments/i4pj35/vilike_keybindings_for_awesome_with_motions_and) (6. Aug. 2020)\n  * [Streets of Gruvbox](https://www.reddit.com/r/unixporn/comments/i60b10/awesome_streets_of_gruvbox) (8. Aug. 2020)\n  * [Confload: Create dotfiles-manageable weechat configs with password manager integration](https://www.reddit.com/r/unixporn/comments/l1unqe/oc_confload_create_dotfilesmanageable_weechat) (21. Jan. 2021)\n  * [Snipcomp.lua: LuaSnip companion plugin for omni completion](https://www.reddit.com/r/neovim/comments/rddugs/snipcomplua_luasnip_companion_plugin_for_omni) (10. Dec. 2021)\n\u003c/details\u003e\n\n\u003ca href=\"https://user-images.githubusercontent.com/53401822/162453427-35cd1699-0b5b-49b6-9023-783bbeea0ebf.png\"\u003e\n  \u003cimg alt=\"CRT Monitor with rice\" width=\"100%\" src=\"https://user-images.githubusercontent.com/53401822/162453210-a2e00d8d-9f14-4ffa-a511-fbc99f99aecb.svg\"/\u003e\n\u003c/a\u003e\n\n## Installation\n\u003e [!CAUTION]\n\u003eMy dotfiles are heavily customized to my own needs. I, therefore, advise\n\u003eeveryone not to use this repository blindly. Instead, I recommend that you\n\u003etreat this project solely as a source of inspiration, or at least thoroughly\n\u003echeck each relevant component before using it to avoid unexpected\n\u003ecomplications.\n\nIf you just want to hack at your own leisure, this repository and its\nsubmodules can be cloned with the following command:\n```sh\ngit clone --recurse-submodules https://github.com/potamides/dotfiles\n```\nFor actual use, I recommend the installation as a bare Git repository. This\nmakes it possible to manage dotfiles with git only in an uncomplicated and\neffective way without having to rely on additional external tools[^1]. For this\nuse case, I provide a [script](.local/bin/install-dotfiles) that installs a\nbare git repository to `$HOME/.dotfiles` and updates configuration files in\n`$HOME` with the contents of this project (conflicting files are moved to\n`$HOME/dotfiles.backup`). For convenience the script can be executed as\nfollows:\n```sh\nbash \u003c(curl -LfsS https://github.com/potamides/dotfiles/raw/master/.local/bin/install-dotfiles)\n```\nWith a simple alias (already included in [bashrc](.bashrc)) this dotfiles\nproject can then be managed like any other git repository:\n```sh\nalias dotfiles='git --git-dir=$HOME/.dotfiles --work-tree=$HOME'\n```\nThis repository also contains a [script](.local/bin/install-packages) which can\nbe used to install all required packages. However, please note that it is\nspecific to [Arch Linux](https://www.archlinux.org). When this script is\nsourced it defines the array variables `PKG`, `PIP` and `AUR`. You can then use\n`pacman`, `pip` and an [AUR\nhelper](https://wiki.archlinux.org/index.php/AUR_helpers) of your choice to\ninstall everything:\n```sh\nsource \u003c(curl -LfsS https://github.com/potamides/dotfiles/raw/master/.local/bin/install-packages)\nsudo pacman -S \"${PKG[@]}\" \u0026\u0026 yay -Sa \"${AUR[@]}\" \u0026\u0026 pip install \"${PIP[@]}\" --user\n```\n\n## Content\nConfiguration files and other information for the core components of this rice\nare listed in the following table. Many programs do not differ significantly\nfrom the default settings in terms of usage, which is why I simply refer to the\nrespective homepages for further information. For applications where I\ndeveloped a more individual workflow, I give additional instructions below.\n| | Name | Files \u0026 Directories | Links |\n|-| ---- | ------- | ----- |\n| **Shell**                | bash        | [.inputrc](.inputrc), [.bashrc](.bashrc), [.bash\\_profile](.bash_profile) | [Repository](https://git.savannah.gnu.org/cgit/bash.git), [Homepage](https://www.gnu.org/software/bash) |\n| **Window Manager**       | awesome     | [.config/awesome](.config/awesome), [.xinitrc](.xinitrc) | [Repository](https://github.com/awesomeWM/awesome), [Homepage](https://awesomewm.org) |\n| **Editor**               | neovim      | [.config/nvim](.config/nvim) | [Repository](https://github.com/neovim/neovim), [Homepage](https://neovim.io) |\n| **Terminal**             | alacritty   | [.config/alacritty](.config/alacritty) | [Repository](https://github.com/alacritty/alacritty), [Homepage](https://alacritty.org) |\n| **Terminal Multiplexer** | tmux        | [.config/tmux](.config/tmux) | [Repository](https://github.com/tmux/tmux), [Homepage](https://tmux.github.io) |\n| **Music Player**         | ncmpcpp     | [.config/ncmpcpp](.config/ncmpcpp) | [Repository](https://github.com/ncmpcpp/ncmpcpp), [Homepage](https://rybczak.net/ncmpcpp) |\n| **System Monitor**       | conky       | [.config/conky](.config/conky) | [Repository](https://github.com/brndnmtthws/conky), [Homepage](https://github.com/brndnmtthws/conky/wiki) |\n| **Mail Client**          | mutt        | [.config/mutt](.config/mutt) | [Repository](https://gitlab.com/muttmua/mutt), [Homepage](http://www.mutt.org) |\n| **IRC Client**           | weechat     | [.config/weechat](.config/weechat) | [Repository](https://github.com/weechat/weechat), [Homepage](https://weechat.org) |\n| **File Manager**         | ranger      | [.config/ranger](.config/ranger) | [Repository](https://github.com/ranger/ranger), [Homepage](https://ranger.github.io) |\n| **Calculator** ;-)       | ptpython    | [.config/ptpython](.config/ptpython) | [Repository](https://github.com/prompt-toolkit/ptpython) |\n| **Calendar**             | when        | [.config/when](.config/when) | [Repository](https://github.com/bcrowell/when), [Homepage](http://www.lightandmatter.com/when/when.html) |\n| **Document Viewer**      | qpdfview    | [.config/qpdfview](.config/qpdfview) | [Repository](https://launchpad.net/qpdfview) |\n| **Web Browser**          | qutebrowser | [.config/qutebrowser](.config/qutebrowser) | [Repository](https://github.com/qutebrowser/qutebrowser), [Homepage](https://qutebrowser.org) |\n\nApart from the applications mentioned in the table, this repository also\ncontains some additional [scripts](.local/bin) to automate or facilitate\nvarious tasks. All scripts contain a header explaining how to use them.\n\n### Awesome\nInstead of the standard\n[awful.key](https://awesomewm.org/doc/api/libraries/awful.key.html)\nkeybindings, my awesome configuration uses\n[modalawesome](https://github.com/potamides/modalawesome) to create vi-like\nkeybindings with motions, counts and multiple modes. To understand how to\ncontrol my awesome configuration, I recommend to check it out beforehand.\n\nAdditionally, if an [mpd](https://www.musicpd.org) server is running on\n`$MPD_HOST:$MPD_PORT`, song information is displayed in the status bar. Songs\nare also played back via [mpv](https://mpv.io) by listening on\n`$MPD_HOST:$MPD_STREAM_PORT`. In my case, all my audio files are located on a\nserver and to connect to its mpd instance I use an ssh tunnel via a [systemd\nuser service](.config/systemd/user/mpd-tunnel.service):\n```sh\nsystemctl --user enable --now mpd-tunnel\n```\n\n### Conky\nMy conky configuration merges with my background image, so the position and\nsize must be set precisely. Since I often use multiple screens with different\nresolutions throughout the day, I need to be able to scale conky's dimensions\naccordingly. Unfortunately, I am not aware of any built-in feature that could\nsolve this problem. For this reason I wrote the conky plugin\n[scaling.lua](.config/conky/scaling.lua). It introduces new configuration\noptions through a new table `conky.sizes`, which can be used to specify\ndifferent sizes for arbitrary screen resolutions. For unspecified screen\nresolutions, the plugin tries to calculate the best scaling automatically.\n\n### Neovim\nFor my Neovim configuration, I made heavy use of the new features introduced\nwith [Neovim 0.5](https://neovim.io/news/2021/07) and wrote it entirely in Lua.\nI wrote a small wrapper around the [paq-nvim](https://github.com/savq/paq-nvim)\nplugin manager called [autopaq.lua](.config/nvim/lua/autopaq.lua), which makes\nsure to install itself and all specified plugins on its own on the first launch\nof Neovim, eliminating the need for any further setup steps. I tried to keep\nthe main configuration file, [init.lua](.config/nvim/init.lua), mostly language\nagnostic. Therefore, I refactored language-specific and buffer-local code into\n[ftplugins and lsp servers](.config/nvim/after). Similarly, I moved a lot of\nfunctionality into standalone [libraries](.config/nvim/lua). Some examples\ninclude [statusline.lua](.config/nvim/lua/statusline.lua), a custom statusline\nbased on [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim), and\n[snipcomp.lua](.config/nvim/plugin/snipcomp.lua), a companion plugin for the\n[LuaSnip](https://github.com/L3MON4D3/LuaSnip) snippet engine which provides a\nsnippet completion function for the built-in insert mode completion commands.\nConsult `:h ins-completion` for details. There is also a Neovim [remote\nwrapper](.config/nvim/bin/nvim) used, e.g., within embedded terminals to open\nfiles in the parent instance and a custom [Lua interpreter](.local/bin/nlua)\nthat communicates with Neovim under the hood, making it possible to\ninteractively explore its stdlib (it also has other useful features like\nautomatic pretty-printing).\n\n### Mutt\nMutt is configured for multiple email accounts. It makes use of the command\nline tool distributed with [KeePassXC](https://keepassxc.org) to access\npasswords. The location of the password database and the keyfile can be\ncontrolled with the `KEEPASSXC_DATABASE` and `KEEPASSXC_KEYFILE` environment\nvariables.\n\nMutt also contains a [script](.config/mutt/scripts/create-alias.sh) which\nautomatically creates aliases for addresses in the `FROM` field, when reading\nan email. It also utilizes the\n[markdown2html](https://git.madduck.net/etc/mutt.git/blob_plain/HEAD:/.mutt/markdown2html)\nscript to conveniently create `multipart/alternative` emails when the need\narises.\n\n### Weechat\nWeechat keeps a lot of separate configuration files, which contain both default\noptions and options altered by the user. Also some of the files contain highly\nsensitive information. Combined with the fact, that weechat doesn't support\nstandalone password managers to obtain secrets, this makes it hard to manage a\nweechat config with a dotfiles repository.\n\nThat's why I wrote the script\n[confload.py](.config/weechat/python/confload.py). It reads a configuration\nfile called [weechatrc](.config/weechat/weechatrc) located in the weechat home\ndirectory. The file itself should be written in\n[m4](https://www.gnu.org/software/m4) macro language and after processing\nshould contain valid weechat commands. The script also provides the special\nmacro `KEEPASS(\u003ctitle\u003e, \u003cattr\u003e)`, which can be used to obtain sensitive\ninformation managed with KeePassXC. When this script is loaded for the first\ntime it prompts the user for the KeePassXC password and then loads the config\nfile. On subsequent launches of weechat this process can be manually invoked\nwith the command `/confload \u003cpassphrase\u003e`. Again you can use the\n`KEEPASSXC_DATABASE` and `KEEPASSXC_KEYFILE` environment variables for the\nlocations of KeePassXC files.\n\n### Ptpython\nI configured ptpython to embed itself into the default Python REPL. That way,\nit can be started simply by executing the standard Python binary. This is\nrealized through the environment variable `PYTHONSTARTUP`, which points to a\nsetup [script](.config/python/config.py) that is executed when Python is\nlaunched in interactive mode.\n\n## Miscellaneous\nBesides the things mentioned above, this repository also contains configuration\nfiles for a number of other programs. However, these are only optionally\nrequired and perform specific tasks that are often not needed. Therefore, these\nprograms are not included in the package installation script and must be\ninstalled manually. The corresponding packages and their functions are listed\nbelow:\n* For Kana, Kanji, and Hangul input, install\n  [fcitx5-im](https://archlinux.org/groups/x86_64/fcitx5-im),\n  [fcitx5-mozc](https://archlinux.org/packages/community/x86_64/fcitx5-mozc),\n  and\n  [fcitx5-hangul](https://archlinux.org/packages/community/x86_64/fcitx5-hangul).\n* To enable automounting, install\n  [udiskie](https://archlinux.org/packages/community/any/udiskie).\n* To compile L\u003csup\u003eA\u003c/sup\u003eT\u003csub\u003eE\u003c/sub\u003eX with Neovim using qpdfview as the\n  previewer, install [T\u003csub\u003eE\u003c/sub\u003eX\n  Live](https://wiki.archlinux.org/title/TeX_Live). For inverse search set\n  `nvim +%2 %1` as the source editor in qpdfview.\n* Install [mythes](https://archlinux.org/packages/?sort=\u0026q=mythes-) for\n  thesaurus lookup and\n  [languagetool-word2vec](https://aur.archlinux.org/packages/?K=languagetool-word2vec-)\n  and/or\n  [languagetool-ngrams](https://aur.archlinux.org/packages/?K=languagetool-ngrams-)\n  to detect confusion errors with [LT\u003csub\u003eE\u003c/sub\u003eX+](https://github.com/ltex-plus/ltex-ls-plus)\n  in Neovim.\n* For Japanese pop-up dictionary search in qutebrowser install\n  [jamdict](https://pypi.org/project/jamdict) and\n  [jamdict-data](https://pypi.org/project/jamdict-data) (for further\n  information see [yomichad](https://github.com/potamides/yomichad)).\n\n[^1]: [Ask HN: What do you use to manage dotfiles?](https://news.ycombinator.com/item?id=11070797)  \n  [The best way to store your dotfiles: A bare Git repository](https://developer.atlassian.com/blog/2016/02/best-way-to-store-dotfiles-git-bare-repo)  \n  [Manage Dotfiles With a Bare Git Repository](https://harfangk.github.io/2016/09/18/manage-dotfiles-with-a-git-bare-repository.html)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpotamides%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpotamides%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpotamides%2Fdotfiles/lists"}