{"id":30281871,"url":"https://github.com/theunixdemon/desktopsetup","last_synced_at":"2026-04-17T10:07:42.565Z","repository":{"id":305956067,"uuid":"1022805804","full_name":"TheUnixDemon/DesktopSetup","owner":"TheUnixDemon","description":"Recovery \u0026 installation script","archived":false,"fork":false,"pushed_at":"2025-08-07T20:09:45.000Z","size":37,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-16T16:55:51.901Z","etag":null,"topics":["archlinux","bash-script","borg","post-install-script","rsync","setup-script","ssh","ssh-key","unattended-installation"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/TheUnixDemon.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-19T21:42:56.000Z","updated_at":"2025-07-30T01:31:36.000Z","dependencies_parsed_at":"2025-08-16T16:55:53.541Z","dependency_job_id":"e675b2c8-2f85-4c90-b5ca-3363d30c90b5","html_url":"https://github.com/TheUnixDemon/DesktopSetup","commit_stats":null,"previous_names":["theunixdemon/desktopsetup"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/TheUnixDemon/DesktopSetup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheUnixDemon%2FDesktopSetup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheUnixDemon%2FDesktopSetup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheUnixDemon%2FDesktopSetup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheUnixDemon%2FDesktopSetup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheUnixDemon","download_url":"https://codeload.github.com/TheUnixDemon/DesktopSetup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheUnixDemon%2FDesktopSetup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31924405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T09:10:15.403Z","status":"ssl_error","status_checked_at":"2026-04-17T09:10:14.455Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["archlinux","bash-script","borg","post-install-script","rsync","setup-script","ssh","ssh-key","unattended-installation"],"created_at":"2025-08-16T16:55:50.220Z","updated_at":"2026-04-17T10:07:42.545Z","avatar_url":"https://github.com/TheUnixDemon.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arch Installation Script\n\nA half-unattended post-installation script for **Arch Linux**. It installs  packages that are declared within the `./src/packages/**/*.txt` files and transfers data from a Borg server to the current operating system using Rsync.\n\n# Getting Started\n\nFor a complete installation \u0026 syncing excute the main script `./src/main.sh`. **But** before that it is required to configure the connection to the Borg server by creating a script named `./src/borg/conf/conf.sh`. Here an example how this configuration script should look like.\n\n```bash\n#!/bin/bash\n# === conn config \u0026 auth ===\n# reference file\nSSH_KEYFILE=\"PATH/YOUR-SSHKEY\" # location of ssh private key\n# borg repo\nBORG_REPO=\"ssh://USERNAME@HOSTNAME:PORT/PATH\" # repo address *REQUIRED\nBORG_PASSPHRASE=\"PASSWORD\" # repo password *OPTIONAL\n# ssh conn\nBORG_RSH=\"ssh -i '$SSH_KEYFILE'\" # ssh auth *OPTIONAL\n# === local config ===\nMOUNT_DIR=/tmp/borg # borg archive mount location *REQUIRED\nBORG_HOME=\"$MOUNT_DIR/home/USERNAME\" # borg archive home location *REQUIRED\n```\n\nAfter that execute the `./src/main.sh` and check it's output. If the checks are looking good it's time to continue the process using direct confirmation by the user.\n\n## \u003cu\u003e Configuration \u003c/u\u003e \n\nFirst of all the configuration variables `BORG_PASSPHRASE` and `BORG_RSH` are optional. If you are using SSH to communicate with your external Borg server you have to use `BORG_RSH`. But if the targeted Borg server is locally and not through SSH `BORG_RSH` do not set this variable at all. `SSH_KEYFILE` can be ignored if `BORG_RSH` is of no use for you.\n\nFurthermore If `BORG_PASSPHRASE` is set you don't have to input the password by hand but the connection will be directly without user interaction. If not you will be requested to input that password everytime you want to connect again using this script.\n\n## \u003cu\u003e How It Works \u003c/u\u003e\n\nIf the `./src/main.sh` is started it installs it's required packages via Pacman. After that It loads both core scripts `./src/borg/core.sh` and `./src/packages/core.sh`. Before the process of installation and data recovery starts. The core scripts are checking if, first of all, the package files (`./src/packages/pacman/*.txt`, `...`) are to be found and last but not least if the Borg server is reachable, the connection is successful, archives are found and can be mounted to the desired location. After that the process is split in two. Firstly the **installation** process of packages declared in those package files and secoundly the **data recovery** via Borg and Rsync. Inbetween the user has to confirm that the script should continue it's normal course. This interaction is recommended to keep for checking the results of package installation by hand before continuing.\n\n### Packages\n\nIf you want to use this as base for a half-unattended install like I'm doing you should change up at least every package file (look below for more). So basicly go through `./src/packages/core.sh`. The package file locations are defined in the `./src/packages/install.sh`.\n\nFor base driver I wrote down two package files `./src/packages/amd.txt` and `./src/packages/nvidia.txt`. Because I'm using mainly my Nvidia graphicscard you should change one line if you have an amd graphicscard. Also some driver are written down within `./src/packages/pacman/pkgs.txt`. What for package files are loaded with which packagemanager is written down in the script `./src/packages/core.sh`.\n\n```bash\n#!/bin/bash\n...\ninstall_pkgs() {\n    inst_pacman_pkgs $nvidia_pkgs $pacman_pkgs # for nvidia\n    inst_pacman_pkgs $amd_pkgs $pacman_pkgs # for amd\n    inst_yay_pkgs $yay_pkgs\n    inst_flatpak_pkgs $flatpak_pkgs\n}\n```\n\nPaste packages to the `**/pkgs.txt` of your choice. The comments in those files have to be seperated from the package declaration using a new line.\n\n#### *Positive Example*\n\nHere an example how a `**/pkgs.txt` should look like.\n\n```bash\n# comment 1\npackage-1\n# comment 2\npackage-2\n# comment 3\npackage-3\npackage-4\n```\n\nFlatpak doesn't support token based packages chained together as valid parameter so one after another will be installed. Pacman and Yay can both chain them together so these have to be executed only ones.\n\n```bash\n#!/bin/bash\n# Pacman\nsudo pacman -Syu --noconfirm --needed package-1 package-2 package-3 package-4\n# Yay\nyay -Syu --noconfirm --needed package-1 package-2 package-3 package-4\n# Flatpak\nflatpak install -y flathub package-1\nflatpak install -y flathub package-2\nflatpak install -y flathub package-3\nflatpak install -y flathub package-4\n```\n\n#### *Negative Example*\n\nNow a bad example how the `**/pkgs.txt` would not work.\n\n```bash\npackage-1 # comment 1\npackage-2\n```\n\nThe first line will be ignored because of the `#` symbol so you better not mix them together with package declaration lines.\n\n### Rsync\n\nThe locations that will be tranfered are defined in the `./src/main.sh`.\n\n```bash\n#!/bin/bash\n...\nmake_recovery() {\n    # recovery locations\n    declare -A sync_dirs=(\n        [\"$BORG_HOME/\"]=\"$HOME\"\n    )\n    ...\n}\n...\n```\n\n`sync_dirs` is a map. The *key* (`$BORG_HOME/`) is the location of the Borg archive and the *value* (`$HOME`) should be a location on your localhost.\n\nHere as example the complete content of the mounted archive and it's home directory will be *synchronized* to the home directory of the current user.\n\n```bash\n#!/bin/bash\nrsync -avP --exclude-from=\"$ROOT_DIR/exclude.txt\" \"$BORG_HOME/\" \"$HOME\" # key -\u003e value\n```\n\n#### *Exclude Patterns*\n\nIf you want to exclude folders or files you can put your patterns into the `./src/exclude.txt`.\n\n```bash\n**/Downloads/**\n**/.wine/**\n**/.cache/**\n**/Trash/**\n**/*.log\n```\n\n# My Setup\n\nHere my essential software parts that I would install on every desktop setup that I use. I don't include AMD and their drivers because I usually don't use them (but my notebook does).\n\n## \u003cu\u003e Operating System \u003c/u\u003e\n* Arch Linux 64 Bit - **x86**\n* Cinnamon Wayland **\u0026** KDE Plasma 6 Wayland\n* Nvidia driver\n    * `nvidia` (not `nvidia-dkms`)\n    * `nvidia-utils` \u0026 `lib32-nvidia-utils`\n\nCurrently I'm using KDE Plasma 6 Wayland because it's more stable than years before. Back in the day, KDE Plasma 6 had some terrible issues with its stability and support for Nvidia, so basically it sometimes crashed randomly or had screen tearing. Then I switched for more than two years (2023–2025) to Cinnamon because of its stability (based on older GNOME), and it fixed most of my issues. As said, nowadays KDE Plasma 6 Wayland is stable enough to use it even with Nvidia cards, but if you have issues, I can recommend checking out Cinnamon.\n\n`nvidia-dkms` will be locally compiled everytime a new version comes up so it takes much longer than `nvidia` because `nvidia` is pre-compiled. So why then so many recommend `nvidia-dkms`? It's basicly with every kernel compatible so it should work fine under every kernel. But If you're using the stable kernel (default) then I strongly recommend to switch to `nvidia`.\n\n## \u003cu\u003e Compatibily Layer \u003c/u\u003e\n* `wine` (stable)\n* `wine-gecko` \n* `wine-mono`\n* `winetricks`\n* `umu-launcher` (proton)\n\nI am using Linux full time and can handle my *Wine* prefixes by myself (mostly) so I'm usually not using *Lutris* as compatibily layer handler. If you have problems with the terminal try *Lutris*. Also I like to use *umu-launcher* for using Proton from Steam without using it through (outside of) Steam. *umu-launcher* allows to use *winetricks* for the installation of *dlls* and has a better compatibility out-of-the-box than *Wine* without installing directly additional *dlls*.\n\n## \u003cu\u003e Utility Tools \u003c/u\u003e\n* `gamemode`\n* `gamescope` \u0026 `lib32-gamemode`\n\nMore performance through *gamemoderun* and *gamescope* makes window issues (mostly) obsolete.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheunixdemon%2Fdesktopsetup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheunixdemon%2Fdesktopsetup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheunixdemon%2Fdesktopsetup/lists"}