Wayland is the way to go forward.
Hardcoded session files outside session manager directories, like: ~/.config/hype/hype.conf or ~/.config/kdeglobals.
.config/chrome-flags.conf: password-store is pinned to kwallet6..config/brave-flags.conf: password-store is pinned to kwallet6..config/xdg-desktop-portal/portals.conf: FileChooser is pinned to kde..local/share/dbus-1/services/org.freedesktop.secrets.service: secret manager is pinned to /usr/bin/kwalletd6.install-vscode.sh: password-store is pinned to kwallet5 in ~/.vscode/argv.json
- Dotfiles are present in dotfiles/main branch.
- Static assets are present in assets branch, like certificates, public keys, themes, wallpapers, etc.
Environment variables:
CLEAN_DOT_INSTALL: This will delete existing dotfiles bare repository at~/.dotfilesif set toyes.
export CLEAN_DOT_INSTALL=no; \
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-dotfiles.sh)Set up a workspace for development using server workspace playbook.
Variables
-
NEBULA_TMP_DIR: Temporary directory to download the playbook. Default${HOME}/.tmp. -
NEBULA_VERSION: Version of the nebula playbook to be used. Default1.14.65. -
NEBULA_VENV_DIR: Directory to create the ansible virtual environment. Default${NEBULA_TMP_DIR}/venv. -
NEBULA_EXTRA_VARS_JSON_FILE: Extra vars for the playbook in JSON format. Default${NEBULA_TMP_DIR}/extra_vars.json. -
DEFAULT_ROLES_PATH: Default roles path. Default${NEBULA_TMP_DIR}/roles. -
ANSIBLE_ROLES_PATH: Ansible roles path. Default${DEFAULT_ROLES_PATH}. -
ANSIBLE_COLLECTIONS_PATH: Ansible collections path. Default${NEBULA_TMP_DIR}/collections. -
ANSIBLE_INVENTORY: Ansible YAML inventory file. Default${NEBULA_TMP_DIR}/inventory.
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-workspace.sh)For custom/silent install tags, extra-vars are optional
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-workspace.sh) \
--tags all,code --extra-vars='pv_ua_nodejs_version=16 pv_ua_code_version=1.64.2'- Nordic
- Nordic KDE
- Layan KDE
- Layan GTK Theme
- Sweet
- Sweet Mars
- Tela Icons
- Candy Icons
- Layan Cursors
- BeautyLine
- Nerd Fonts: JetBrainsMono, Hack, Meslo
- Cascadia Code
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-themes.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-rustup.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-neovim.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-vscode.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-jetbrains-toolbox.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-bitwarden-desktop.sh)- Bitwarden Desktop version is hardcoded in the script from GitHub Releases.
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-postman.sh)- Postman version is hardcoded in the script from Release Notes.
bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-dbeaver-community.sh)bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/install-telegram-desktop.sh)Bootstrap a Debian machine with a user and some basic tools using cloudinit playbook. And then set up the user workspace using setup-workspace
Any variable ends with _FILE will be written to a file and the directory will be created if it does not exist,
also ownership will be changed to the root user.
Variables:
-
CLOUD_INIT_GROUP: Group name for the user to be created. Defaultcloudinit. -
CLOUD_INIT_USER: Username for the user to be created. Defaultcloudinit. -
CLOUD_INIT_USE_SSH_PUB: Use SSH public key for the user, Defaultecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJXzoi1QAbLmxnyudx+7Dm+FGTYU+TP02MTtxqq9w82Rm2kIDtGf4xVGxaidYEP/WcgpOHacjKDa7p2skBYljmk=. -
CLOUD_INIT_IS_DEV_MACHINE: Install development tools. Defaultfalse. -
CLOUD_INIT_COPY_ROOT_SSH_KEYS: Copy root SSH keys to the user. Defaultfalse. -
CLOUD_INIT_HOSTNAME: Hostname for the machine. Defaultcloudinit. -
CLOUD_INIT_DOMAIN: Domain name for the machine. Defaultcloudinit. -
CLOUD_INIT_INSTALL_DOTFILES: Install dotfiles for the user. Defaulttrue. -
CLOUD_INIT_INSTALL_DOCKER: Install docker. Defaultfalse. -
NEBULA_TMP_DIR: Directory to clone the ansible playbook. Default/tmp/cloudinit. -
NEBULA_VERSION: Version of the nebula playbook to be used. Default1.14.65. -
NEBULA_VENV_DIR: Directory to create the ansible virtual environment. Default${NEBULA_TMP_DIR}/venv. -
NEBULA_CLOUD_INIT_AUTHORIZED_KEYS_FILE: Authorized keys file for the user. Default${NEBULA_TMP_DIR}/authorized_keys. -
NEBULA_REQUIREMENTS_FILE: Ansible requirements file. Default${NEBULA_TMP_DIR}/requirements.yml. -
DEFAULT_ROLES_PATH: Directory to clone the ansible roles. Default${NEBULA_TMP_DIR}/roles. -
ANSIBLE_ROLES_PATH: Ansible roles path. Default${DEFAULT_ROLES_PATH}. -
ANSIBLE_COLLECTIONS_PATH: Ansible collections path. Default${NEBULA_TMP_DIR}/collections. -
ANSIBLE_INVENTORY: Ansible inventory. Default${NEBULA_TMP_DIR}/inventory.yml.
CLOUD_INIT_DOMAIN=arpanrec.com sudo -E -H -u root bash -c '/bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-debian.sh)'or for development machine
CLOUD_INIT_IS_DEV_MACHINE=true CLOUD_INIT_INSTALL_DOCKER=true sudo -E -H -u root \
bash -c '/bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-debian.sh)'or for a development machine with a domain
CLOUD_INIT_DOMAIN=blr-home.arpanrec.com CLOUD_INIT_IS_DEV_MACHINE=true CLOUD_INIT_INSTALL_DOCKER=true sudo -E -H -u root \
bash -c '/bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-debian.sh)'Specific script for Linode to set up a new machine using setup-debian script. It also adds itself to root crontab to run on every day. Every time it will pull the script from GitHub.
Variables:
CLOUD_INIT_COPY_ROOT_SSH_KEYS: Copy root SSH keys to the user. Defaulttrue.CLOUD_INIT_IS_DEV_MACHINE: Install development tools. Defaultfalse.CLOUD_INIT_INSTALL_DOTFILES: Install dotfiles for the user. Defaulttrue.CLOUD_INIT_WEB_SERVER_FQDN: Web server fully qualified domain name. Default"".CLOUD_INIT_INSTALL_DOCKER: Install docker. Defaultfalse.
Variables from Linode:
LINODE_ID: Example:66627286LINODE_LISHUSERNAMEExample:linode66627286LINODE_RAM: Example:2048LINODE_DATACENTERID: Example:14
#!/usr/bin/env bash
set -euo pipefail
# <UDF name="CLOUD_INIT_COPY_ROOT_SSH_KEYS" Label="Copy Root SSH Keys to current user" oneOf="true,false" default="true"/>
# <UDF name="CLOUD_INIT_IS_DEV_MACHINE" Label="Install development tool chain" oneOf="true,false" default="false"/>
# <UDF name="CLOUD_INIT_INSTALL_DOTFILES" Label="Install dotfiles" oneOf="true,false" default="true"/>
# <UDF name="CLOUD_INIT_INSTALL_DOCKER" Label="Install Docker" oneOf="true,false" default="false"/>
# <udf name="CLOUD_INIT_WEB_SERVER_FQDN" label="Web server fully qualified domain name" example="example.com" default=""/>
/bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/linode-stack-script.sh) |
tee -a /root/linode-stack-script.log
If some of my choices trigger you,
always remember the legend named xkcd
and his wisdom about workflow which can be found
here in 1172.
- Caution: If you are too lazy to read, just know "My setup works for me".