{"id":16323821,"url":"https://github.com/david-else/developer-workstation-setup-script","last_synced_at":"2025-08-18T18:04:24.573Z","repository":{"id":37418218,"uuid":"384101119","full_name":"David-Else/developer-workstation-setup-script","owner":"David-Else","description":"Post-install script for Fedora and RHEL 9 clones to create your ultimate development environment","archived":false,"fork":false,"pushed_at":"2023-07-25T11:59:58.000Z","size":9772,"stargazers_count":117,"open_issues_count":0,"forks_count":14,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-01T22:16:39.282Z","etag":null,"topics":["almalinux","fedora","linux","neovim","rhel9","rocky","setup-script","vim"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/David-Else.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2021-07-08T11:26:56.000Z","updated_at":"2025-03-04T12:50:49.000Z","dependencies_parsed_at":"2024-01-16T20:28:36.110Z","dependency_job_id":"e2d1a3fa-021a-4f30-b7ef-b67a1e6b067a","html_url":"https://github.com/David-Else/developer-workstation-setup-script","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/David-Else/developer-workstation-setup-script","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/David-Else%2Fdeveloper-workstation-setup-script","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/David-Else%2Fdeveloper-workstation-setup-script/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/David-Else%2Fdeveloper-workstation-setup-script/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/David-Else%2Fdeveloper-workstation-setup-script/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/David-Else","download_url":"https://codeload.github.com/David-Else/developer-workstation-setup-script/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/David-Else%2Fdeveloper-workstation-setup-script/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271035378,"owners_count":24688396,"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","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["almalinux","fedora","linux","neovim","rhel9","rocky","setup-script","vim"],"created_at":"2024-10-10T22:55:45.001Z","updated_at":"2025-08-18T18:04:24.547Z","avatar_url":"https://github.com/David-Else.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Developer Workstation Setup Script\n\n![neo-70s](./images/neo-70s.jpg)![rocky-fedora-logos](./images/rocky-fedora.png)\n\nUPDATE: Work has now moved to the [Debian version](https://github.com/David-Else/developer-workstation-setup-script-debian). Debian 12 is now the best platform.\n\nAre you tired of spending hours setting up your development environment every time you switch to a new machine? Look no further than the Developer Workstation Setup Script!\n\n This setup script uses Ansible and Bash to quickly and easily install a variety of development and general use software on both cutting edge Fedora and stable Red Hat Enterprise Linux 9 compatible distributions.\n\n## Features\n\nThe Developer Workstation Setup Script has the following features:\n\n- Works with both cutting edge Fedora (tested up to [38](https://download.fedoraproject.org/pub/fedora/linux/releases/38/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-38-1.6.iso)) and stable Red Hat Enterprise Linux 9 (tested up to [9.2](https://mirrors.almalinux.org/isos/x86_64/9.2.html)) compatible distributions.\n- Easy to customize, just add and remove packages/config from the scripts before running.\n- Uses [stow](https://www.gnu.org/software/stow/) to install and manage dotfiles.\n- Includes a variety of development and general use software:\n\n| Development | Browsers | Graphics | Sound and video | Security and backup |\n| --- | --- | --- | --- | --- |\n| Helix | Firefox | Krita | MPV | KeepassXC |\n| Node.js / Deno | nnn file browser | ImageMagick | Handbrake | BorgBackup |\n| Kitty |  |  | MKVToolNix |  |\n| Lazygit |  |  | Blender |  |\n| GitHub CLI |  |  | OBS Studio |  |\n| Pandoc |  |  |  |  |\n| Shellcheck / Shfmt |  |  |  |  |\n| Bat |  |  |  |  |\n| Ripgrep |  |  |  |  |\n| Delta |  |  |  |  |\n\n## Installation\n\nThese scripts are designed to be run immediately after installing the operating system.\n\n![el9](./images/centos-8-install-options.png)\n\n1. Install a fresh copy of Fedora or a Red Hat Enterprise Linux 9 compatible distribution. If you are using an el9 clone, select `workstation` from the software selection option during installation. You must also give your user account administrative privileges, this is a tick-box when you are creating the user.\n2. Clone the repository and `cd` into it: `git clone https://github.com/David-Else/developer-workstation-setup-script`\n3. Install Ansible:\n\nIf you are using el9, you need to first enable the epel repository:\n\n`sudo dnf config-manager --set-enabled crb` and `sudo dnf install epel-release`.\n\nInstall Ansible and the community collection:\n\n`sudo dnf install ansible-core ansible-collection-community-general`\n\n4. Customize the software selection by modifying the `install.yml` and `install-setup.bash` scripts with your own software preferences.\n5. Run the scripts: `ansible-playbook ./install.yml -K` and `./install-setup.bash`\n\nNote: Your `BECOME` password in Ansible is your user password, your account must have administrative privileges.\n\nAfter installation, you must run `nnn` once with `-a` to create the fifo file for the preview feature to work.\n\n## Optional Tweaks\n\nBased on your software selection, hardware, and personal preferences, you may want to make the following changes:\n\n### Audio\n\n- Set the available sample rates for your audio interface:\n\n1. Find your audio interface(s) and available sample rates:\n\n`cat /proc/asound/cards`\n\nExample output:\n\n```sh\n 0 [HDMI           ]: HDA-Intel - HDA ATI HDMI\n                      HDA ATI HDMI at 0xf7e60000 irq 31\n 1 [USB            ]: USB-Audio - Scarlett 6i6 USB\n                      Focusrite Scarlett 6i6 USB at usb-0000:00:14.0-10, high speed\n```\n\nPlay some audio and examine the stream for your audio interface (in this case `card1`):\n\n`cat /proc/asound/card1/stream0`\n\nExample output:\n   \n```sh\nFocusrite Scarlett 6i6 USB at usb-0000:00:14.0-10, high speed : USB Audio\n\nPlayback:\n  Status: Running\n    Interface = 1\n    Altset = 1\n    Packet Size = 216\n    Momentary freq = 48000 Hz (0x6.0000)\n    Feedback Format = 16.16\n  Interface 1\n    Altset 1\n    Format: S32_LE\n    Channels: 6\n    Endpoint: 0x01 (1 OUT) (ASYNC)\n    Rates: 44100, 48000, 88200, 96000, 176400, 192000\n    Data packet interval: 125 us\n    Bits: 24\n    Channel map: FL FR FC LFE RL RR\n    Sync Endpoint: 0x81 (1 IN)\n    Sync EP Interface: 1\n    Sync EP Altset: 1\n    Implicit Feedback Mode: No\n```\n\n2. Create a PipeWire user config file: `cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/`\n3. Add/modify your sound cards available sample rates by editing `~/.config/pipewire/pipewire.conf`:\n\nThe Fedora default is:\n\n```sh\n#default.clock.allowed-rates = [ 48000 ]\n```\n\nFor the Scarlett 6i6 example above replace it with:\n\n```sh\ndefault.clock.allowed-rates = [ 44100 48000 88200 96000 176400 192000 ]\n```\n\nDon't forget to remove the `#` comment.\n\n- Setup PipeWire for low latency audio by following the guide at https://jackaudio.org/faq/linux_rt_config.html and creating the following file:\n\nNote: Copy code blocks by clicking on the top right-hand corner, then just paste them into your terminal.\n\n```sh\ncat \u003c\u003c'EOF' | sudo tee /etc/security/limits.d/audio.conf\n@audio   -  rtprio     95\n@audio   -  memlock    unlimited\nEOF\n```\n\nAdd yourself to the `audio` group that you have given the privileges to with `sudo usermod -aG audio [username]`.\n\nCreate a user config file for your (PipeWire) JACK settings: \n\n```sh\nmkdir -p ~/.config/pipewire/jack.conf.d/\ncat \u003e~/.config/pipewire/jack.conf.d/jack.conf \u003c\u003cEOF\njack.properties = {\n     node.latency       = 256/96000\n     node.rate          = 1/96000\n     node.quantum       = 256/96000\n     node.force-quantum = 256\n}\nEOF\n```\n\n### Intel CPU GPU HW acceleration\n\n- Install the `libva-intel`(older systems) or `intel-media-driver` driver for Intel CPUs with built-in GPUs to use HW acceleration with MPV.\n\n### General\n\n- (Fedora) Hardware codecs with AMD (Mesa)\n\nThis is needed since Fedora 37 and later... and mainly concern AMD hardware since NVIDIA hardware with nouveau doesn't work well:\n\n```sh\nsudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld\nsudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld\n```\n\n- (el9) Fix Gnome forgetting your monitor scaling choice, if you only use the GUI `Settings/Displays` it often forgets.\n\nCreate a file `/usr/share/glib-2.0/schemas/93_hidpi.gschema.override` with the following content for 200% scaling:\n\n```sh\n[org.gnome.desktop.interface]\nscaling-factor=2\n```\n\nReinitialize schemas with `sudo glib-compile-schemas /usr/share/glib-2.0/schemas`\n\n- Setup Deno by creating/updating shell completions: `deno completions bash \u003e deno.sh` and `sudo mv deno.sh /etc/profile.d`.\n- Setup Vale:\n\nChange the global `.vale.ini` file in your `$HOME` directory to point to an empty directory you want to store your styles, for example:\n\n```sh\nStylesPath = ~/Documents/styles\n```\n\nRun `vale sync`. You can create a new config file at [Config Generator](https://vale.sh/generator)\n\n- Setup HEIF, AVIF and WebP image formats (inc Apple `.HEIC` photos) by adding:\n\n```sh\nsudo dnf install libheif-freeworld libheif-tools heif-pixbuf-loader webp-pixbuf-loader\n```\n\n- Setup Git:\n\n```sh\ngit config --global user.email \"you@example.com\"\ngit config --global user.name \"Your Name\"\n```\n\n```sh\ngit config --global user.signingkey key\ngit config --global commit.gpgsign true\n```\n\n# FAQ\n\nIf you would like to use Code for things that Helix still struggles with (like debugging), and still use all the modal keyboard shortcuts, I suggest installing `silverquark.dancehelix` or `asvetliakov.vscode-neovim` and using these settings:\n\n`settings.json`\n\n```jsonc\n{\n  // font size\n  \"editor.fontSize\": 15,\n  \"markdown.preview.fontSize\": 15,\n  \"terminal.integrated.fontSize\": 15,\n  // asvetliakov.vscode-neovim\n  \"editor.scrollBeyondLastLine\": false,\n  \"vscode-neovim.neovimExecutablePaths.linux\": \"/usr/local/bin/nvim\", // for el9 clones, or \"/usr/bin/nvim\" for Fedora\n  \"workbench.list.automaticKeyboardNavigation\": false,\n  // various\n  \"window.titleBarStyle\": \"custom\", // adjust the appearance of the window title bar for linux\n  \"editor.minimap.enabled\": false, // controls whether the minimap is shown\n  \"workbench.activityBar.visible\": false, // controls the visibility of the activity bar in the workbench\n  \"window.menuBarVisibility\": \"hidden\", // control the visibility of the menu bar\n  \"files.restoreUndoStack\": false, // don't restore the undo stack when a file is reopened\n  \"editor.dragAndDrop\": false, // controls whether the editor should allow moving selections via drag and drop\n  \"telemetry.enableTelemetry\": false // disable diagnostic data collection\n}\n```\n\nYou might also like to install `ms-vscode.live-server` for live debugging in Code or the browser.\n\n**Q**: Does this script disable the caps lock key? I've noticed that it works during login but after that it stops working altogether.\n\n**A**: It makes the caps lock into delete for touch typing purposes, to change it modify this line in `install.yml`:\n\n```yml\n- { key: \"/org/gnome/desktop/input-sources/xkb-options\", value: \"['caps:backspace', 'terminate:ctrl_alt_bksp', 'lv3:rwin_switch', 'altwin:meta_alt']\" }\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavid-else%2Fdeveloper-workstation-setup-script","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavid-else%2Fdeveloper-workstation-setup-script","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavid-else%2Fdeveloper-workstation-setup-script/lists"}