{"id":17994766,"url":"https://github.com/mikeeq/ansible-ops-workstation","last_synced_at":"2025-03-26T02:31:11.797Z","repository":{"id":40385315,"uuid":"360666812","full_name":"mikeeq/ansible-ops-workstation","owner":"mikeeq","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-20T14:56:41.000Z","size":369,"stargazers_count":13,"open_issues_count":2,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-21T01:41:36.727Z","etag":null,"topics":["ansible","devops","fedora","linux","provision","provisioning-scripts","ubuntu","visual-studio-code","vscode","windows","workstation","wsl","wsl2"],"latest_commit_sha":null,"homepage":"","language":"Jinja","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/mikeeq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","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},"funding":{"github":["mikeeq"]}},"created_at":"2021-04-22T19:57:58.000Z","updated_at":"2025-03-13T15:51:11.000Z","dependencies_parsed_at":"2023-11-07T16:27:24.727Z","dependency_job_id":"ab3811d9-b1d2-430c-90a4-e76676131e18","html_url":"https://github.com/mikeeq/ansible-ops-workstation","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/mikeeq%2Fansible-ops-workstation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeeq%2Fansible-ops-workstation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeeq%2Fansible-ops-workstation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeeq%2Fansible-ops-workstation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikeeq","download_url":"https://codeload.github.com/mikeeq/ansible-ops-workstation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245576528,"owners_count":20638125,"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","devops","fedora","linux","provision","provisioning-scripts","ubuntu","visual-studio-code","vscode","windows","workstation","wsl","wsl2"],"created_at":"2024-10-29T20:16:20.136Z","updated_at":"2025-03-26T02:31:11.783Z","avatar_url":"https://github.com/mikeeq.png","language":"Jinja","funding_links":["https://github.com/sponsors/mikeeq"],"categories":[],"sub_categories":[],"readme":"\u003c!--\n*** Thanks for checking out the Best-README-Template. If you have a suggestion\n*** that would make this better, please fork the repo and create a pull request\n*** or simply open an issue with the tag \"enhancement\".\n*** Thanks again! Now go create something AMAZING! :D\n***\n***\n***\n*** To avoid retyping too much info. Do a search and replace for the following:\n*** mikeeq, ansible-ops-workstation, twitter_handle, email, ansible-ops-workstation, project_description\n--\u003e\n\n\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** I'm using markdown \"reference style\" links for readability.\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n*** See the bottom of this document for the declaration of the reference variables\n*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n--\u003e\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mikeeq/ansible-ops-workstation\"\u003e\n    \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Ansible_logo.svg/1664px-Ansible_logo.svg.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003eansible-ops-workstation\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Ansible playbooks for provisioning Fedora Workstations with tools which are commonly used in DevOps environments.\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/mikeeq/ansible-ops-workstation\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/mikeeq/ansible-ops-workstation\"\u003eView Demo\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/mikeeq/ansible-ops-workstation/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/mikeeq/ansible-ops-workstation/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n[![CI](https://github.com/mikeeq/ansible-ops-workstation/actions/workflows/ci.yml/badge.svg)](https://github.com/mikeeq/ansible-ops-workstation/actions/workflows/ci.yml)\n\n[![CircleCI](https://circleci.com/gh/mikeeq/ansible-ops-workstation.svg?style=svg)](https://circleci.com/gh/mikeeq/ansible-ops-workstation)\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails open=\"open\"\u003e\n  \u003csummary\u003e\u003ch2 style=\"display: inline-block\"\u003eTable of Contents\u003c/h2\u003e\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003c!-- \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e --\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003c!-- \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e --\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgements\"\u003eAcknowledgements\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\nAnsible playbooks for provisioning Fedora Workstations with tools which are commonly used in DevOps environments.\n\n### Built With\n\n- [Ansible](https://github.com/ansible/ansible)\n\n\u003c!-- GETTING STARTED --\u003e\n\u003c!-- ## Getting Started --\u003e\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\n\n### Fedora\n\n1. Install git, python, ansible\n\n   ```bash\n   sudo -i\n   dnf install -y git python3-pip curl sudo\n   pip3 install ansible\n   ```\n\n2. Clone repository\n\n   ```bash\n   # Create directory for github repository\n   mkdir -p ~/git/github\n   cd ~/git/github\n\n   # Clone (pull) git repository\n   git clone https://github.com/mikeeq/ansible-ops-workstation.git\n   ```\n\n3. Change `user_name` in `playbooks/group_vars/all.yml` to your Fedora username and run Ansible\n\n   ```bash\n   # Go to repository directory\n   cd ansible-ops-workstation/playbooks\n\n   # Edit playbooks/group_vars/all.yml, change user_name\n   vi group_vars/all.yml\n\n   # Run Ansible\n   ansible-playbook -i ../inventory/hosts.yml fedora.yml -K\n   ```\n\n4. Reboot your machine to apply all changes\n\n#### Optional\n\n1. Open terminal, login as root, upgrade your OS:\n\n   ```bash\n   sudo -i\n   hostnamectl set-hostname mikeePC\n   dnf upgrade -y\n   ```\n\n2. Reboot your machine\n\n   ```bash\n   reboot\n   ```\n\n### Ubuntu WSL\n\n1. Install\n\n   - VSCode - \u003chttps://code.visualstudio.com/download\u003e\n   - Ubuntu 24.04 WSL2\n     - \u003chttps://apps.microsoft.com/store/detail/windows-subsystem-for-linux/9P9TQF7MRM4R\u003e\n     - \u003chttps://apps.microsoft.com/detail/9nz3klhxdjp5?hl=en-gb\u0026gl=PL\u003e\n     - \u003chttps://docs.microsoft.com/en-us/windows/wsl/install\u003e\n   - Docker Desktop for Windows - \u003chttps://docs.docker.com/desktop/windows/install/\u003e\n   - Windows Terminal\n     - \u003chttps://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab\u003e\n     - \u003chttps://github.com/microsoft/terminal\u003e\n\n2. Open WSL2 terminal, login as root, upgrade your OS:\n\n   ```bash\n   sudo -i\n   apt-get update\n   apt-get upgrade\n   ```\n\n3. Install git, python, ansible\n\n   ```bash\n   sudo -i\n   apt-get install -y git python3-pip curl sudo\n   pip3 install --break-system-packages ansible\n   ```\n\n4. Clone repository\n\n   ```bash\n   # Create directory for github repository\n   mkdir -p ~/git/github\n   cd ~/git/github\n\n   # Clone (pull) git repository\n   git clone https://github.com/mikeeq/ansible-ops-workstation.git\n   ```\n\n5. Change `user_name` in `playbooks/group_vars/all.yml` to your WSL username ([link](https://github.com/mikeeq/ansible-ops-workstation/blob/main/playbooks/group_vars/all.yml#L2)) and run Ansible\n\n   ```bash\n   # Go to repository directory\n   cd ansible-ops-workstation/playbooks\n\n   # Edit playbooks/group_vars/all.yml, change user_name\n   vi group_vars/all.yml\n\n   # Run Ansible\n   ansible-playbook -i ../inventory/hosts.yml wsl-ubuntu.yml -K\n   ```\n\n6. Install PowerLevel10K font on Windows - \u003chttps://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf\u003e\n\n7. Copy Windows Terminal config from - \u003chttps://github.com/mikeeq/ansible-ops-workstation/blob/main/roles/desktop/machines/wsl/templates/settings.json\u003e\n\n   - and paste it here - `C:\\Users\\${WINDOWS_USER_NAME}\\AppData\\Local\\Packages\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\LocalState`\n\n8. Copy VScode config file from - \u003chttps://github.com/mikeeq/ansible-ops-workstation/blob/main/roles/desktop/apps/vscode/files/settings.json\u003e\n\n   - and paste it here - `C:/Users/${WINDOWS_USER_NAME}/AppData/Roaming/Code/User/settings.json`\n\n9. You can also install VScode extensions manually from the list here - \u003chttps://github.com/mikeeq/ansible-ops-workstation/blob/main/playbooks/group_vars/all.yml#L146-L173\u003e, by finding them in the VScode UI and clicking install or via CLI by executing:\n\n   ```bash\n   code --install-extension ${EXTENSION_NAME}\n   ```\n\n10. Restart your VScode/Windows Terminal to see your new oh-my-zsh :)\n\n\u003e Remember to use VScode with Remote WSL extension and store all your unix/git files/repositories under WSL2 to not encounter any issues with file permissions, etc.\n\u003e\u003e I also recommend to use builtin terminal in VSCode as it also really configurable and works like a charm with oh-my-zsh and P10K\n\n- ms-vscode-remote.remote-wsl - \u003chttps://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl\u003e\n\n## Tips and Tricks\n\n1. MacOS disk utility doesn't show free space on a harddisk\n\n   - create ntfs partition on any free disk space on that disk, then shrink/resize your APFS partitions/containers.\n\n2. To fix Docker on newer Fedora's installations:\n\n   ```bash\n   vi /etc/default/grub\n     systemd.unified_cgroup_hierarchy=0\n   grub2-mkconfig -o /boot/grub2/grub.cfg\n   ```\n\n3. Fix selinux policies for OpenVPN certs custom path\n\n   ```bash\n   sudo semanage fcontext -a -t home_cert_t /home/mikee/Documents/vpns/certs_vpn/ca.crt\n   sudo restorecon -R -v /home/mikee/Documents/vpns/certs_vpn/\n   ```\n\n4. How to enable bitlocker on macbook\n\n   - Configure BitLocker to work without a TPM:\n\n     ```bash\n     Start =\u003e run =\u003e gpedit.msc\n     Open the Local Computer Policy node\n     Navigate to Computer Configuration \\ Administrative Templates \\ Windows\n     Components \\ Bit Locker Drive Encryption \\ Operating System Drives\n     Double click on Require additional authentication at startup\n     Enable the feature and check the box next to `Allow BitLocker without a compatible TPM`, click Apply and Ok, and close out of Local Group Policy Editor.\n     ```\n\n5. To save last boot entry in grub - add lines below to `/etc/default/grub` and run `grub2-mkconfig -o /boot/grub2/grub.cfg`\n\n   ```bash\n   GRUB_DEFAULT=saved\n   GRUB_SAVEDEFAULT=true\n   ```\n\n6. To setup hp printer\n\n   ```bash\n   hp-setup        # to configure HP printer\n   ```\n\n7. To disable KDE wallet when using pip3\n\n   ```bash\n   python3 -m keyring --disable\n   ```\n\n8. hid_apple mods - \u003chttps://github.com/free5lot/hid-apple-patched\u003e\n\n   ```bash\n   cd /sys/module/hid_apple/parameters\n   echo 1 \u003e swap_fn_leftctrl\n   echo 1 \u003e swap_opt_cmd\n   ```\n\n   ```bash\n   # vi /etc/modprobe.d/hid_apple.conf\n   options hid_apple swap_fn_leftctrl=1\n   options hid_apple swap_opt_cmd=1\n   options hid_apple iso_layout=1\n\n   # after adding this options to the file, you need to rebuild your initramfs\n   ## in Fedora\n   dracut -f\n   ```\n\n9. Add SSH keys, config and private gpg keys from keybase\n\n   ```bash\n   keybase pgp list\n   keybase pgp export --query $KEY_ID -s \u003e private.gpg; gpg --import private.gpg; rm -v private.gpg\n   keybase pgp export --query $KEY_ID \u003e public.gpg; gpg --import public.gpg; rm -v public.gpg\n   git-crypt add-gpg-user -n --trusted $USER_ID[could be email]\n\n   # If `gpg -vvvvv --import` hangs on:\n   ## gpg: waiting for lock (held by 5555) ...\n   ## gpg: no running keyboxd - starting '/usr/libexec/keyboxd'\n   ### you can fix it by commenting out use-keyboxd in ~/.gnupg/common.conf.\n   ```\n\n10. To save HTTPS git credentials\n\n    ```bash\n    git config --global credential.helper store\n    git config lfs.cachecredentials true\n    ```\n\n11. How to install latest NVIDIA driver on Linux:\n\n    - Fedora 36 issues with NVIDIA driver\n      - \u003chttps://github.com/NVIDIA/open-gpu-kernel-modules/issues/228\u003e\n      - \u003chttps://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/\u003e\n\n    ```bash\n    ### Install using .run installer (manually) ###\n    # Install DKMS to automatically install Nvidia driver when updating kernel\n    dnf install dkms kernel-devel kernel-headers gcc make acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig vdpauinfo libva-vdpau-driver libva-utils\n\n    # Add opensource nvidia driver - nouveau to blacklist\n    vi /etc/modprobe.d/nvidia-installer-disable-nouveau.conf\n\n    blacklist nouveau\n    options nouveau modeset=0\n\n    vi /etc/default/grub\n\n    GRUB_CMDLINE_LINUX=\"rhgb quiet rd.driver.blacklist=nouveau\"\n\n    grub2-mkconfig -o /boot/grub2/grub.cfg\n\n    # Rebuild initramfs\n    dracut -f\n\n    systemctl set-default multi-user.target\n\n    reboot\n\n    # Download latest cuda driver and nvidia driver and go to download path\n    # CUDA - https://developer.nvidia.com/cuda-downloads\n    bash cuda_11.5.1_495.29.05_linux.run\n    # cuda will also install nvidia driver, but in older version\n    # Nvidia driver - https://www.nvidia.com/en-us/drivers/unix/\n    bash NVIDIA-Linux-x86_64-495.46.run\n\n    systemctl set-default graphical.target\n\n    dnf remove xorg-x11-drv-nouveau\n\n    reboot\n\n    # to dynamically change current session to non-graphical user interface\n    systemctl isolate multi-user.target\n    # to revert back to graphical\n    systemctl isolate graphical.target\n\n    # If there are some issues with booting to graphical environment, i.e.: with API mismatch error, execute `dracut -f` to rebuild initramfs with newer version of driver\n    # dmesg|grep -i nvrm -A3\n    # [  113.647054] NVRM: API mismatch: the client has the version 460.91.03, but\n    #                NVRM: this kernel module has the version 390.144.  Please\n    #                NVRM: make sure that this kernel module and all NVIDIA driver\n    #                NVRM: components have the same version.\n    dracut -f\n\n    # If you fail to boot to Fedora, you can edit boot entry in grub by clicking \"e\" in grub bootmenu and in line starting with \"linux ...\" add at the end \"init 3\" to boot in multi-user.target (without graphical interface)\n\n    # If you are using Secure Boot, during installation of the NVIDIA drivers create new key pair (or use existing one), and if it's a new key pair then add them to UEFI key by executing\n\n    mkdir -p /usr/share/uefimok/\n    cp -rfv /usr/share/nvidia/nvidia-modsign-crt-${id}.der /usr/share/uefimok/\n    cp -rfv /usr/share/nvidia/nvidia-modsign-key-${id}.key /usr/share/uefimok/\n\n    mokutil --import /usr/share/uefimok/nvidia-modsign-crt-${id}.der\n\n    bash NVIDIA-Linux-x86_64-550.107.02.run --module-signing-secret-key=/usr/share/uefimok/nvidia-modsign-key-${id}.key --module-signing-public-key=/usr/share/uefimok/nvidia-modsign-crt-${id}.der\n\n    ### Install using packages from CUDA rpm repository ###\n\n    # Check latest available rpm repo (fedora40 is not available) - https://developer.download.nvidia.com/compute/cuda/repos/\n    distro=fedora39\n\n    dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$distro/x86_64/cuda-$distro.repo\n    dnf -y install dkms\n    dnf -y module install nvidia-driver:open-dkms\n    dnf -y install nvidia-container-toolkit\n\n    # Make sure you're running desktop in X11 mode, wayland is a bit laggy still\n    # xorg.conf can be generated from nvidia-settings\n\n    # Enroll MOK key if you're using SecureBoot\n    ## You can check by which key the kernel module is signed by, by executing: modinfo nvidia-drm, and then try to find it locally (i.e.: in dkms config file)\n    mokutil --import /var/lib/dkms/mok.pub\n\n    ### Enabling wayland\n\n    ## vi /etc/dracut.conf.d/nvidia.conf\n    force_drivers+=\" nvidia nvidia_modeset nvidia_uvm nvidia_drm \"\n\n    ## vi /etc/modprobe.d/nvidia.conf\n    options nvidia_drm modeset=1 fbdev=1\n\n    ##\n\n    mv /usr/lib/udev/rules.d/61-gdm.rules /root/61-gdm.rules\n    dracut -f\n\n    ```\n\n12. To fix purple'ish screen, enable OC and Fan control (I recommend to use GreenWithEnvy - gwe (installed using flatpak)) apply those changes to `/etc/X11/xorg.conf`:\n\n    ```bash\n    Section \"Device\"\n        # To fix ddcutil\n        Option         \"RegistryDwords\" \"RMUseSwI2c=0x01; RMI2cSpeed=100\"\n        # To enable fan control and OC\n        Option         \"Coolbits\" \"12\"\n    EndSection\n\n    Section \"Screen\"\n        # To fix purple'ish screen\n        ## These settings can be controled using nvidia-settings --\u003e X Server Display Configuration --\u003e Advanced... --\u003e Force Composition Pipeline --\u003e Save to X Configuration File\n        Option         \"metamodes\" \"nvidia-auto-select +0+0 {ForceCompositionPipeline=On, AllowGSYNCCompatible=On}\"\n    EndSection\n\n    ### Example /etc/X11/xorg.conf\n    Section \"Device\"\n        Identifier     \"Device0\"\n        Driver         \"nvidia\"\n        VendorName     \"NVIDIA Corporation\"\n        BoardName      \"NVIDIA GeForce RTX 3070\"\n        Option         \"RegistryDwords\" \"RMUseSwI2c=0x01; RMI2cSpeed=100\"\n        Option         \"Coolbits\" \"12\"\n    EndSection\n\n    Section \"Screen\"\n        Identifier     \"Screen0\"\n        Device         \"Device0\"\n        Monitor        \"Monitor0\"\n        DefaultDepth    24\n        Option         \"Stereo\" \"0\"\n        Option         \"nvidiaXineramaInfoOrder\" \"DFP-1\"\n        Option         \"metamodes\" \"nvidia-auto-select +0+0 {ForceCompositionPipeline=On, AllowGSYNCCompatible=On}\"\n        Option         \"SLI\" \"Off\"\n        Option         \"MultiGPU\" \"Off\"\n        Option         \"BaseMosaic\" \"off\"\n        SubSection     \"Display\"\n            Depth       24\n        EndSubSection\n    EndSection\n    ```\n\n13. To enable \"outdated\" gnome extension add used gnome-shell version to `shell-version` table in `metadata.json` extension's file\n\n    ```bash\n    gnome-shell --version\n    GNOME Shell 41.2\n\n    EXTENSION_NAME=cpufreq@konkor\n    vi ~/.local/share/gnome-shell/extensions/${EXTENSION_NAME}/metadata.json\n\n    {\n      \"shell-version\": [\n        \"41.2\n      ]\n    }\n    ```\n\n14. To turn off hdd\n\n    ```bash\n    echo 1 \u003e /sys/block/sdb/device/delete\n    ```\n\n15. To open remote VScode session from CLI:\n\n    ```bash\n    code --folder-uri vscode-remote://ssh-remote+${SSH_USER}@${HOST}${PATH}\n\n    # Example\n    code --folder-uri vscode-remote://ssh-remote+user@192.168.1.10/home/user/git\n    ```\n\n16. To change brightness:\n\n```\ncat /sys/class/backlight/acpi_video0/max_brightness\necho 2 \u003e /sys/class/backlight/acpi_video0/brightness\n```\n\n17. To give Steam access to local storage outside of flatpak\n\n```\nflatpak override com.valvesoftware.Steam --filesystem=${PATH_TO_FILESYSTEM}\n\n## If your games don't load/start and those are stored on NTFS\n# NTFS mount needs to be done as user\n# https://github.com/ValveSoftware/Proton/wiki/Using-a-NTFS-disk-with-Linux-and-Windows#editing-fstab\n\n## cat /etc/fstab\n/dev/nvme1n1p2 /mnt/dntfs auto uid=1000,gid=1000,rw,user,exec,umask=000 0 0\n\n### only worked after reboot, CLI commands with the same options passed didn't work (still NTFS was mounted as root), i.e.\n❯ mount.ntfs-3g -o uid=1000,gid=1000,dmask=0022,fmask=0133 /dev/nvme1n1p2 /mnt/dntfs\n```\n\n18. Terminator fails to open with an error `terminator:24:\u003cmodule\u003e:ModuleNotFoundError: No module named 'psutil'`, try reinstalling `dnf reinstall python3-psutil` to fix it\n\n19. Enable tabs scrolling in firefox:\n\n```\n### about:config\n\n# tabs mouse scrolling\ntoolkit.tabbox.switchByScrolling = true\n\n# if google docs crashes, page jumps\ngfx.canvas.accelerated = false\n```\n\n20. On Fedora 41 or newer, when connection Azure DevOps or GitHub over SSH fails with an error:\n\n```\nssh_dispatch_run_fatal: Connection to 40.74.28.12 port 22: error in libcrypto\n```\n\nIt needs to be fixed by executing `update-crypto-policies --set LEGACY` (or creating your own custom crypto policy) and rebooting the machine.\n\n21. ssh-config for Azure DevOps and GitHub:\n\n```\nHost ssh.dev.azure.com\n  HostName ssh.dev.azure.com\n  User git\n  Port 22\n  IdentityFile ~/.ssh/id_rsa\n  IdentitiesOnly yes\n  PubkeyAcceptedKeyTypes=ssh-rsa\n  HostKeyAlgorithms=+ssh-rsa\n\nHost vs-ssh.visualstudio.com\n  HostName vs-ssh.visualstudio.com\n  User git\n  Port 22\n  IdentityFile ~/.ssh/id_rsa\n  IdentitiesOnly yes\n  PubkeyAcceptedKeyTypes=ssh-rsa\n  HostKeyAlgorithms=+ssh-rsa\n\nHost github.com\n  HostName github.com\n  User git\n  Port 22\n  IdentityFile ~/.ssh/id_rsa\n  IdentitiesOnly yes\n```\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the GNU GPLv3 License. See `COPYING` for more information.\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nTwitter - [@mikeeqp](https://twitter.com/mikeeqp)\n\nProject Link: [https://github.com/mikeeq/ansible-ops-workstation](https://github.com/mikeeq/ansible-ops-workstation)\n\n\u003c!-- ACKNOWLEDGEMENTS --\u003e\n## Acknowledgements\n\n- [Best-README-Template](https://raw.githubusercontent.com/othneildrew/Best-README-Template)\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/mikeeq/ansible-ops-workstation.svg?style=for-the-badge\n[contributors-url]: https://github.com/mikeeq/ansible-ops-workstation/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/mikeeq/ansible-ops-workstation.svg?style=for-the-badge\n[forks-url]: https://github.com/mikeeq/ansible-ops-workstation/network/members\n[stars-shield]: https://img.shields.io/github/stars/mikeeq/ansible-ops-workstation.svg?style=for-the-badge\n[stars-url]: https://github.com/mikeeq/ansible-ops-workstation/stargazers\n[issues-shield]: https://img.shields.io/github/issues/mikeeq/ansible-ops-workstation.svg?style=for-the-badge\n[issues-url]: https://github.com/mikeeq/ansible-ops-workstation/issues\n[license-shield]: https://img.shields.io/github/license/mikeeq/ansible-ops-workstation.svg?style=for-the-badge\n[license-url]: https://github.com/mikeeq/ansible-ops-workstation/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://linkedin.com/in/miotkmikolaj/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeeq%2Fansible-ops-workstation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikeeq%2Fansible-ops-workstation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeeq%2Fansible-ops-workstation/lists"}