{"id":20509762,"url":"https://github.com/aminnairi/dotfiles","last_synced_at":"2025-05-09T07:31:53.699Z","repository":{"id":154630677,"uuid":"625371098","full_name":"aminnairi/dotfiles","owner":"aminnairi","description":"My personal software installation \u0026 configuration","archived":false,"fork":false,"pushed_at":"2025-02-05T11:22:21.000Z","size":1223,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"development","last_synced_at":"2025-04-13T22:35:18.414Z","etag":null,"topics":["ansible","archlinux","dotfiles","fish","neovim","tmux","vifm"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aminnairi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"zenodo":null}},"created_at":"2023-04-08T22:46:47.000Z","updated_at":"2025-02-05T11:22:26.000Z","dependencies_parsed_at":"2025-01-04T18:25:00.218Z","dependency_job_id":"50a08590-5fa9-492c-a694-de1fac04a8af","html_url":"https://github.com/aminnairi/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminnairi%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminnairi%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminnairi%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminnairi%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aminnairi","download_url":"https://codeload.github.com/aminnairi/dotfiles/tar.gz/refs/heads/development","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253209375,"owners_count":21871647,"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":["ansible","archlinux","dotfiles","fish","neovim","tmux","vifm"],"created_at":"2024-11-15T20:26:23.443Z","updated_at":"2025-05-09T07:31:53.681Z","avatar_url":"https://github.com/aminnairi.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🗃️ dotfiles\n\nMy personal software installation \u0026 configuration\n\n![image](https://github.com/aminnairi/dotfiles/assets/18418459/9a3f32a0-76bb-4b67-bf8e-7a4db65e7589)\n\n## ☣️ Disclaimer\n\nThis is a repository that I keep public in order to ease out the installation of my different computers.\n\nThe repository is not intended to be used as-is by many people, although special attention and care has been put in order to make it sensibly easy to be used by anyone wanting to try out this installation.\n\nAlthough the goal for any non-contributor is to get inspiration, not to use it as you daily driver. Nothing can stop you from doing it so feel free to do so and open issues, but I can't guarantee to be available to fix issues.\n\n## 🔥 Features\n\n- Gnome with Pipewire to get the maximum of our audio/video\n- `nvim` with a ton of plugins for web development \u0026 linux stuff\n- `helix` setup \u0026 configured with support for `lazygit` and `lazydocker`\n- Tons of browsers (actually just 4 but this is something) like `chromium`, `google-chrome`, `opera` \u0026 `firefox`\n- `docker` enabled for the unprivileged user so commands don't need prefixing with `sudo` anymore\n- `tmux` for terminal multiplexing with automatic installation \u0026 update of plugins before starting `tmux`\n- `vifm` to manipulate your file system \u0026 `vicd` to change directory like a hacker in your terminal\n- Enhanced `ls` command with colors \u0026 icons just like in VSCode\n- Enhanced `cat` command with syntactic colorization of files just like in VSCode\n- Enhanced `rm` command so that it does not really remove the file permanently but put it in the trash can instead\n- Custom `privateinternetaccess` function that lets you choose a configuration from OpenVPN using `fzf` for starting a new `openvpn` tunnel quickly\n- Get the latest weather news right in your terminal with `wttr`\n- Support for both `intel` \u0026 `amd` architecture (pull requests welcome to add VirtualBox \u0026 VMware Guest Additions)\n- `ufw` enabled and ready to protect your personal life\n- `pass` Fish function to select and copy a password using Passbolt\n- Lots of programing language's interpreter \u0026 compiler installed (Python, Ruby, PHP, Julia, ...)\n- Tons of Fish's abbreviations for `docker` \u0026 `docker-compose`\n\n## 📖 Requirements\n\n- [Archlinux](https://archlinux.org/)\n- [GNU/Bash](https://www.gnu.org/software/bash/)\n\n## ⚙️ Setup\n\n### 👮 Create the user as administrator\n\n```bash\n# Install the necessary dependencies\npacman -S sudo fish git\n\n# Allow members of the group \"sudo\" to issue sudo commands\nsed -i 's/# %sudo/%sudo/g' /etc/sudoers\n\n# Add the \"sudo\" group\ngroupadd sudo\n\n# Add the unprivileged user\nuseradd --create-home --shell /bin/fish --groups sudo --uid 1000 user\n\n# Setup the password for the unprivileged user\npasswd user\n```\n\n### 🧔 Installation as user\n\n```bash\n# Clone the repository in the home folder\ngit clone https://github.com/aminnairi/dotfiles ~/Documents/git/github.com/aminnairi/dotfiles\n\n# Change the current working directory to the source-code for the installation script\ncd ~/Documents/git/github.com/aminnairi/dotfiles\n\n# Apply the configuration\nbash main.sh\n```\n\nYou can also feed the script with the path to an existing playbook if you don't want to be prompted to choose one.\n\n```bash\n# Or by providing the path to an existing playbook directly\nbash main.sh ansible/amd-gnome.yml\n```\n\n## 🐛 Error codes\n\nAn error code is returned each time you run this script and an error occurred.\n\nIn order to get the specific error code, you can use the `$?` variable in bash.\n\n```bash\necho $?\n```\n\nRefer to the list below to know what happened in order to take remediation action.\n\nNote that a friendly error message will also appear in case an error occurs, that way you don't have to manually check for these error codes.\n\nThis is documented in case you want to include this script in a bigger program or system and you probably don't ever need to read the following if you are a end-user of this script.\n\n### 🪲 1 (ERROR_BECAUSE_ROOT)\n\nThis error code is returned whenever you try to run this script as root.\n\nThis script should only be run as the unprivileged user that has `sudo` access only.\n\nMorever, this script contains routines that needs to be run as a non-root, for instance, the installation of Arch User Repository packages.\n\n### 🪲 2 (ERROR_BECAUSE_NOT_ARCH_LINUX)\n\nThis error code is returned whenever you try to run this script in an operating system that has no `pacman` executable installed.\n\nThis script has been made specifically to install this configuration for Arch operating systems only.\n\nFeel free to fork this project and to update its source-code if you wish to support other operating systems as well. You are encouraged to propose pull requests as well.\n\n### 🪲 3 (ERROR_BECAUSE_TOO_MUCH_ARGUMENTS_PROVDED)\n\nThis error code is returned whenever you try to call this script with too much arguments.\n\nToo much arguments means that you tried to pass more than one argument, since this script only take at most one argument which is the path to a playbook containing the wanted configuration.\n\nYou can find the list of available configuration at the [`ansible`](./ansible) folder (every file that ends with a `*.yml` extension is a playbook).\n\n### 🪲 4 (ERROR_BECAUSE_ANSIBLE_INSTALLATION_FAILED)\n\nThis error code is returned whenever you try to call this script and your operating system does not have the `ansible` package installed.\n\nIf the installation of `ansible` has failed, this script will return the error, otherwise, it will simply continue with the installation.\n\n### 🪲 5 (ERRROR_BECAUSE_FUZZY_FILE_FINDER_INSTALLATION_FAILED)\n\nThis error code is returned whenever you try to call this script and your operating system does not have the `fzf` package installed.\n\nIf the installation of `fzf` has failed, this script will return the error, otherwise, it will simply continue with the installation.\n\n### 🪲 6 (ERROR_BECAUSE_GIT_PULL_FAILED)\n\nThis error code is returned whenever the script detect that `git` has not been installed and tries to install it, but the installation has failed.\n\nThis error (and the verification for `git`) should not happen since this repository should have been downloaded using `git`.\n\nHowever, for people that have downloaded the repository using the GitLab or GitHub user interface's download button, this might be helpful since it might not necessarily means that `git` is installed yet.\n\n### 🪲 7 (ERROR_BECAUSE_GIT_PULL_FAILED)\n\nThis error code is returned whenever the script attempts at updating the local git repository.\n\nThis may happen if you have local changes, or if you don't have any http connection anymore.\n\nThis script will require an internet connection so it does not make sense to continue if you don't have one.\n\n### 🪲 8 (ERROR_BECAUSE_PLAYBOOK_PATH_DOES_NOT_EXIST)\n\nThis error code is returned whenever you try to call this script with an argument, which is the path to a playbook (configuration for the installation) you know you want to use.\n\nIf the playbook's path choosen is not found, then you'll get an error.\n\n## ℹ️ Informations\n\n### ✒️ Neovim\n\n[Neovim](https://neovim.io/)'s plugins gets installed only when run. Try running `nvim` at least once per user `root` and the choosen unprivileged user.\n\n### ✈️ Tmux\n\n[Tmux](https://github.com/tmux/tmux)'s plugins get installed once it is run without argument. A Fish function gets triggered whenever `tmux` is run. If it has no argument, then plugins gets checked and installed. If it has arguments, plugins do not get installed nor checked. Please run at least once `tmux` in order to install the necessary plugins before using it.\n\n### 🔐 SSH\n\nIt's a good idea to backup your existing `~/.ssh/config` file before erasing the informations contained in a previous computer.\n\nOnce the new computer is installed, don't forget to create a new SSH key using `ssh-keygen -t ed25519` and to propagate this key to the relevant services (servers, GitHub, GitLab, ...).\n\n### 🛡️ Passbolt\n\nPassbolt has been installed and is the default password manager used in this configuration.\n\nIn order to initialize an account, use the following command after installation.\n\n```bash\npassbolt configure --serverAddress https://passbolt.com --userPassword \"...\" --userPrivateKeyFile \"...\"\n```\n\n## ✨ Feature request, bug report \u0026 vulnerability report\n\nSee [`issues`](./issues).\n\n## 🙋 Code of conduct\n\nSee [`CODE_OF_CONDUCT`](./CODE_OF_CONDUCT.md).\n\n## 💪 Contributing\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md).\n\n## 📃 License\n\nSee [`LICENSE`](./LICENSE).\n\n## 🛡️ Security\n\nSee [`SECURITY.md`](./SECURITY.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminnairi%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faminnairi%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminnairi%2Fdotfiles/lists"}