{"id":17161787,"url":"https://github.com/catern/dotfiles","last_synced_at":"2025-10-28T06:08:41.271Z","repository":{"id":13889486,"uuid":"16587747","full_name":"catern/dotfiles","owner":"catern","description":"My dotfiles","archived":false,"fork":false,"pushed_at":"2023-03-29T02:08:44.000Z","size":202,"stargazers_count":18,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-27T05:12:40.797Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catern.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-02-06T17:43:04.000Z","updated_at":"2023-12-05T17:31:00.000Z","dependencies_parsed_at":"2022-09-14T00:31:21.582Z","dependency_job_id":null,"html_url":"https://github.com/catern/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/catern%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catern%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catern%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catern%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catern","download_url":"https://codeload.github.com/catern/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248724629,"owners_count":21151561,"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":[],"created_at":"2024-10-14T22:43:54.934Z","updated_at":"2025-10-28T06:08:41.219Z","avatar_url":"https://github.com/catern.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"These are my dotfiles.\nThey are full of dot and files.\n\nI use these dotfiles on all my machines; laptop, desktop, servers, shell accounts, everywhere.\n\nSo I avoid putting hardware-specific or system-specific configuration into this repo,\nas I don't necessarily have root everywhere I use it.\n\n## .config\nI endeavour to move as many files into .config as I can,\nto comply with the [XDG Base Directory Specification](http://www.freedesktop.org/software/systemd/man/file-hierarchy.html#Home%20Directory).\n\nI also like the drop-in config directory approach that is increasingly common even at a system level in Linux;\nfor example, instead of editing /etc/sudoers directly, many distros now support dropping config snippets into the /etc/sudoers.d directory.\nI try to emulate this in my personal configs.\n\n### bash\nThe drop-in configs approach is most noticeable in the way I organize my bash configuration.\n\nMy .bashrc just does a few things, and then sources the contents of the .config/bash directory.\nIn .config/bash are different files setting up my prompt, aliases, etc.\n\nThis way if I have some local configuration that I don't want to push to this shared dotfiles repository,\nI can just drop a local.sh file in .config/bash, and everything just works.\n\n### xinit\nI also try to keep my .xinitrc modular.\nxinitrc usually consists of a list of programs to run after X is started through startx.\n\nI have several small scripts in the .config/xinit directory\nwhich I can run from a local, not-committed .xinitrc.\nEach script is just a list of commands to run,\nand I put lines sourcing some selection of scripts in my .xinitrc.\n\nUnfortunately, I run very few X programs on startup,\nso the files in .config/xinit are very small.\nThey are so small that it would be a lot easier to just copy the commands into my local .xinitrc.\nHowever, I want to store the commands that I run at X startup in git,\nand have them accessible across all my machines.\n\nA better solution would be running these commands as systemd --user services that depend on X.\nEventually systemd --user sessions will become more widely used to start and manage a user's DE, WM, and other X services.\nAt that point I will be able to just commit these X startup commands as .service files,\nand systemctl --user enable/disable them locally.\n\n### dconf (GNOME)\n\nI've written a blog post [here](http://catern.com/2014/12/21/plain-text-configuration-gnome.html) about the approach I take for dconf.\n\n### systemd\nI use [systemd --user sessions](https://wiki.archlinux.org/index.php/Systemd/User)\nto run the daemons or programs that I want always running in the background.\nAt least, those that don't depend on X, and therefore can be run even on shell servers or TTYs.\nSo this folder contains [systemd.unit(5)](http://www.freedesktop.org/software/systemd/man/systemd.unit.html) files\nthat run those programs as systemd services.\n\nI don't do anything special with the orginzation of these unit files;\nsystemd already expects them to be laid out in a neat and orderly way.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatern%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatern%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatern%2Fdotfiles/lists"}