{"id":28192195,"url":"https://github.com/mark-omarov/dotfiles","last_synced_at":"2026-04-12T15:43:40.864Z","repository":{"id":134089801,"uuid":"598380724","full_name":"mark-omarov/dotfiles","owner":"mark-omarov","description":"My macOS dotfiles 👾","archived":false,"fork":false,"pushed_at":"2025-04-26T07:34:07.000Z","size":13827,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-12T08:53:01.750Z","etag":null,"topics":["dotfiles","macos"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/mark-omarov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-07T01:33:52.000Z","updated_at":"2025-04-26T07:34:11.000Z","dependencies_parsed_at":"2023-11-08T10:46:11.167Z","dependency_job_id":"6dcbb59c-d78d-4cfd-83c2-5025cfd2d70e","html_url":"https://github.com/mark-omarov/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/mark-omarov%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mark-omarov%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mark-omarov%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mark-omarov%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mark-omarov","download_url":"https://codeload.github.com/mark-omarov/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518325,"owners_count":22084376,"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":["dotfiles","macos"],"created_at":"2025-05-16T11:12:12.672Z","updated_at":"2026-04-12T15:43:35.823Z","avatar_url":"https://github.com/mark-omarov.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles\n\nThese are my dotfiles. I use ansible to manage them. The playbook is designed to run on macOS, I cannot guarantee it will work on other systems.\n\n![Kapture 2024-07-25 at 05 48 46](https://github.com/user-attachments/assets/8bf78923-77f9-47c1-a6ea-7293f110614b)\n\n## Highlights\n\n- Automated setup with [Ansible](https://github.com/ansible/ansible)\n- Homebrew, macOS dock and mas applications setup (see `vars/` directory)\n- [Starship](https://starship.rs/) prompt with [Hack Nerd Font](https://www.nerdfonts.com/)\n- [Wezterm](https://wezfurlong.org/wezterm/) minimal style terminal configuration\n- Secrets management with [ansible-vault](https://docs.ansible.com/ansible/latest/vault_guide/index.html) (private submodule)\n- Runtimes: NodeJS LTS with Corepack enabled\n\n## Installation\n\n- Make sure you got xcode command line tools: `xcode-select --install`\n- Make sure you got `python3`, I recommend using [pyenv](https://github.com/pyenv/pyenv) to manage python versions.\n- Install ansible: `pip3 install ansible`\n- Install ansible dependencies: `ansible-galaxy install -r requirements.yml`\n- Install [tmux plugin manager](https://github.com/tmux-plugins/tpm)\n\n## Usage\n\n\u003e [!IMPORTANT]\n\u003e Do not blindly run the setup. Thoroughly review all roles and playbooks, make any necessary changes to fit your needs, especially where my no-reply email and other info is specified.\n\u003e\n\u003e The playbook will not prompt you to confirm nor create a backup. Proceed with caution. I do not take any responsibility for the data loss. You have been warned.\n\u003e\n\u003e Be aware that `roles/dotfiles/files/secrets` is a git submodule to a private repository with encrypted files I use. If you want a similar setup, you will need to configure it yourself. However, the playbook should work without it.\n\nTo apply the configuration changes, run the following command:\n\n```bash\nmake setup\n```\n\nYou may augment the command with any valid ansible options, for example, if you use ansible-vault, you might run:\n\n```bash\nmake setup ARGS=\"--ask-vault-pass\"\n```\n\nTo complete the setup, you will need to manually start skhd service and configure the permissions.\n\n```bash\nskhd --start-service\n```\n\n## Secrets Management\n\nThe `dotfiles` role supports a secrets submodule. It's best for you to review the role to see how it works exactly. But in short, it will decrypt all files that end with `.enc` under `roles/dotfiles/files/secrets` using ansible-vault. You **have to** make adjustments to fit your needs.\n\n**Why I automate secrets setup?**\n\nI don't like setting up ssh, gpg, or other keys and credentials manually. I prefer to have them encrypted and stored in a private repository. This way I can easily clone the repository and have all the necessary files in place. The `dotfiles` role outlines what secrets are dotfiles specific and will be decrypted, moved to correct location, and symlinked. And what secrets are not, and will be decrypted and left as is. I use non-dotfiles secrets to setup applications that don't have a configuration file that can be symlinked or require manual import.\n\n**Can I clean up non-dotfiles secrets?**\n\nIf you use secrets submodule, after running the playbook, you may want to remove all decrypted non-dotfiles files from the secrets directory after you manually import them in your applications. You can do this by running:\n\n```bash\nmake clean\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmark-omarov%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmark-omarov%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmark-omarov%2Fdotfiles/lists"}