commit 29263b36f525edaf4c576342a893b3635101f122 Author: GlennIgen Date: Fri May 22 18:57:48 2026 +0200 feat: initial commit — Ansible Fedora KDE setup Flyttet fra .dotfiles/fedora/kde/ansible/ til eget repo. - site.yml som hovedindgang til playbooken - tasks/ opdelt pr. ansvarsområde: rpmfusion, repos, dnf, flatpak, system - vars/ med pakkelister for nem redigering - kde_shortcuts/ med custom KDE genveje - README og installation.md fra .dotfiles diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3ef838 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# Fedora KDE — Ansible Setup + +Ansible-playbook der automatiserer installationsguiden i [installation.md](../installation.md). + +## Struktur + +``` +ansible/ +├── site.yml ← Kør denne +├── vars/ +│ ├── dnf_packages.yml ← Liste over DNF-pakker +│ └── flatpak_packages.yml ← Liste over Flatpak-pakker +└── tasks/ + ├── rpmfusion.yml ← RPM Fusion repos, multimedia, DVD, firmware + ├── repos.yml ← GPG-nøgler og .repo-filer + ├── dnf_packages.yml ← Installer DNF-pakker fra vars/ + ├── flatpak_packages.yml ← Installer Flatpaks fra vars/ + └── system.yml ← NetworkManager/systemd-resolved fix +``` + +## Forudsætninger + +Installer Ansible og `community.general`-samlingen (kræves til Flatpak-modulet): + +```bash +sudo dnf install ansible +ansible-galaxy collection install community.general +``` + +## Kør + +```bash +ansible-playbook -K site.yml +``` + +`-K` prompter for sudo-password. Playbooken kører kun på `localhost`. + +## Tilføj eller fjern pakker + +- **DNF-pakke:** tilføj/fjern en linje i [vars/dnf_packages.yml](vars/dnf_packages.yml) +- **Flatpak:** tilføj/fjern en linje i [vars/flatpak_packages.yml](vars/flatpak_packages.yml) +- **Repo:** tilføj en task-blok i [tasks/repos.yml](tasks/repos.yml) + +## Spring et modul over + +Kommenter den relevante linje ud i `site.yml`: + +```yaml + tasks: + - import_tasks: tasks/rpmfusion.yml + # - import_tasks: tasks/repos.yml ← springes over + - import_tasks: tasks/dnf_packages.yml + - import_tasks: tasks/flatpak_packages.yml + - import_tasks: tasks/system.yml +``` + +## Manuelle trin + +Disse kan ikke automatiseres og skal gøres manuelt efter kørsel: + +1. **Tailscale login:** `sudo tailscale up` +2. **Jottacloud login:** `run_jottad && jotta-cli login` +3. **Firefox about:config** — se [installation.md](../installation.md#firefox-aboutconfig) +4. **KDE Shortcuts** — System Settings → Shortcuts → Import → `kde_shortcuts/1password_shortcuts.kksrc` diff --git a/installation.md b/installation.md new file mode 100644 index 0000000..80766b8 --- /dev/null +++ b/installation.md @@ -0,0 +1,205 @@ +# Installations for new Fedora KDE instance + +Setup guide for a fresh Fedora KDE install. Follow sections in order. + +> **Automatisk installation:** De fleste trin herunder kan automatiseres via Ansible. +> Se [ansible/README.md](ansible/README.md) for kørselsvejledning. +> Denne guide gælder hvis du foretrækker at køre trinene manuelt. + +## Index + +1. [RPM Fusion Tweaks](#rpm-fusion-tweaks) + - [Configurations](#configurations) + - [Multimedia](#multimedia) + - [DVD stuff](#dvd-stuff) + - [Firmware stuff](#firmware-stuff) + +2. [Packages](#packages) + - [Import keys & repos](#import-keys--repos) + - [Install packages](#install-packages) + - [Configs](#configs) + +3. [System Settings](#system-settings) + - [NetworkManager & systemd-resolved](#fix-common-issues-with-networkmanager--systemd-resolved) + +4. [KDE Shortcuts](#kde-shortcuts) + +--- + +## RPM Fusion Tweaks + +> [RPM Fusion](https://rpmfusion.org/) — [Configuration guide](https://rpmfusion.org/Configuration) + +### Configurations + +Enable RPM Fusion repos and update core: + +```bash +sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm +sudo dnf config-manager setopt fedora-cisco-openh264.enabled=1 +sudo dnf update @core +sudo dnf install rpmfusion-\*-appstream-data +``` + +### Multimedia + +> [RPM Fusion Multimedia guide](https://rpmfusion.org/Howto/Multimedia) + +```bash +sudo dnf swap ffmpeg-free ffmpeg --allowerasing +sudo dnf update @multimedia --setopt="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin +``` + +#### Intel (Recent CPU) + +```bash +sudo dnf install intel-media-driver +``` + +### DVD stuff + +```bash +sudo dnf install rpmfusion-free-release-tainted +sudo dnf install libdvdcss +``` + +### Firmware stuff + +```bash +sudo dnf install rpmfusion-nonfree-release-tainted +sudo dnf --repo=rpmfusion-nonfree-tainted install "*-firmware" +``` + +[↑ Index](#index) + +--- + +## Packages + +### Import keys & repos + +#### 1Password + +```bash +sudo rpm --import https://downloads.1password.com/linux/keys/1password.asc +sudo sh -c 'echo -e "[1password]\nname=1Password Stable Channel\nbaseurl=https://downloads.1password.com/linux/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=\"https://downloads.1password.com/linux/keys/1password.asc\"" > /etc/yum.repos.d/1password.repo' +sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg +sudo dnf config-manager addrepo --from-repofile=https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo +sudo dnf config-manager addrepo --from-repofile=https://repo.librewolf.net/librewolf.repo +``` + +#### Jottacloud + +```bash +sudo tee /etc/yum.repos.d/JottaCLI.repo > /dev/null << 'EOF' +[jotta-cli] +name=Jottacloud CLI +baseurl=https://repo.jotta.cloud/redhat +gpgcheck=1 +gpgkey=https://repo.jotta.cloud/public.gpg +EOF +``` + +#### VSCodium + +```bash +sudo tee -a /etc/yum.repos.d/vscodium.repo << 'EOF' +[gitlab.com_paulcarroty_vscodium_repo] +name=gitlab.com_paulcarroty_vscodium_repo +baseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/ +enabled=1 +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg +metadata_expire=1h +EOF +``` + +#### Cider + +```bash +sudo rpm --import https://repo.cider.sh/RPM-GPG-KEY +sudo tee /etc/yum.repos.d/cider.repo << 'EOF' +[cidercollective] +name=Cider Collective Repository +baseurl=https://repo.cider.sh/rpm/RPMS +enabled=1 +gpgcheck=1 +gpgkey=https://repo.cider.sh/RPM-GPG-KEY +EOF +``` + +### Install packages + +#### DNF + +```bash +sudo dnf install fastfetch stow fish steam git gh nvim tldr btop 1password sublime-text mangojuice gamemode gamescope obs-studio jotta-cli codium rpmconf Cider +``` + +#### Flatpak + +```bash +flatpak install -y \ + com.discordapp.Discord \ + io.github.Faugus.faugus-launcher \ + com.adamcake.Bolt \ + com.notesnook.Notesnook \ + com.saivert.pwvucontrol \ + com.github.tchx84.Flatseal \ + org.kde.kdenlive \ + it.mijorus.gearlever \ + com.github.Matoking.protontricks \ + com.vysp3r.ProtonPlus \ + org.musicbrainz.Picard \ + io.github.lullabyX.sone +``` + +### Configs + +#### Jottacloud + +```bash +run_jottad +jotta-cli help +``` + +#### Firefox about:config + +Open `about:config` and set: + +``` +accessibility.typeaheadfind.enablesound = false +media.hardwaremediakeys.enabled = false +clipboard.autocopy = false +middlemouse.paste = false +widget.gtk.native-emoji-dialog = false +``` + +[↑ Index](#index) + +--- + +## System Settings + +### Fix common issues with NetworkManager + systemd-resolved + +```bash +sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf +``` + +[↑ Index](#index) + +--- + +## KDE Shortcuts + +### 1Password + +Import the shortcut file via **System Settings → Shortcuts → Import**: + +``` +fedora/kde/kde_shortcuts/1password_shortcuts.kksrc +``` + +[↑ Index](#index) diff --git a/kde_shortcuts/custom_shortcuts.kksrc b/kde_shortcuts/custom_shortcuts.kksrc new file mode 100644 index 0000000..170df48 --- /dev/null +++ b/kde_shortcuts/custom_shortcuts.kksrc @@ -0,0 +1,27 @@ +[Custom Commands][net.local.1password-2.desktop] +Exec=1password --quick-access +Name=1password qa + +[Custom Commands][net.local.1password.desktop] +Exec=1password --toggle +Name=1password + +[Custom Commands][net.local.kitty-2.desktop] +Exec=kitty --override window_title="shutdown-script" bash -c "~/scripts/app_close_and_shutdown.sh; exec bash" +Name=app_close_and_shutdown + +[Custom Commands][net.local.kitty.desktop] +Exec=kitty --override window_title="shutdown-script" bash -c "~/scripts/app_close_and_reboot.sh; exec bash" +Name=app_close_and_restart.sh\s + +[net.local.1password-2.desktop][Global Shortcuts] +_launch=Meta+Ctrl+. + +[net.local.1password.desktop][Global Shortcuts] +_launch=Meta+Ctrl+, + +[net.local.kitty-2.desktop][Global Shortcuts] +_launch=Meta+Ctrl+Alt+S + +[net.local.kitty.desktop][Global Shortcuts] +_launch=Meta+Ctrl+Alt+R diff --git a/site.yml b/site.yml new file mode 100644 index 0000000..1433257 --- /dev/null +++ b/site.yml @@ -0,0 +1,15 @@ +--- +- name: Fedora KDE Setup + hosts: localhost + connection: local + become: true + gather_facts: true + vars_files: + - vars/dnf_packages.yml + - vars/flatpak_packages.yml + tasks: + - import_tasks: tasks/rpmfusion.yml + - import_tasks: tasks/repos.yml + - import_tasks: tasks/dnf_packages.yml + - import_tasks: tasks/flatpak_packages.yml + - import_tasks: tasks/system.yml diff --git a/tasks/dnf_packages.yml b/tasks/dnf_packages.yml new file mode 100644 index 0000000..a1cf862 --- /dev/null +++ b/tasks/dnf_packages.yml @@ -0,0 +1,5 @@ +--- +- name: DNF - Installer pakker + ansible.builtin.dnf: + name: "{{ dnf_packages }}" + state: present diff --git a/tasks/flatpak_packages.yml b/tasks/flatpak_packages.yml new file mode 100644 index 0000000..f1c29c1 --- /dev/null +++ b/tasks/flatpak_packages.yml @@ -0,0 +1,6 @@ +--- +- name: Flatpak - Installer pakker + community.general.flatpak: + name: "{{ flatpak_packages }}" + method: system + state: present diff --git a/tasks/repos.yml b/tasks/repos.yml new file mode 100644 index 0000000..312fba8 --- /dev/null +++ b/tasks/repos.yml @@ -0,0 +1,82 @@ +--- +# 1Password +- name: 1Password - GPG nøgle + ansible.builtin.rpm_key: + key: https://downloads.1password.com/linux/keys/1password.asc + state: present + +- name: 1Password - repo + ansible.builtin.yum_repository: + name: 1password + description: 1Password Stable Channel + baseurl: https://downloads.1password.com/linux/rpm/stable/$basearch + enabled: true + gpgcheck: true + repo_gpgcheck: true + gpgkey: https://downloads.1password.com/linux/keys/1password.asc + state: present + +# Sublime Text +- name: Sublime Text - GPG nøgle + ansible.builtin.rpm_key: + key: https://download.sublimetext.com/sublimehq-rpm-pub.gpg + state: present + +- name: Sublime Text - repo + ansible.builtin.command: + cmd: dnf config-manager addrepo --from-repofile=https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo + args: + creates: /etc/yum.repos.d/sublime-text.repo + +# LibreWolf +- name: LibreWolf - repo + ansible.builtin.command: + cmd: dnf config-manager addrepo --from-repofile=https://repo.librewolf.net/librewolf.repo + args: + creates: /etc/yum.repos.d/librewolf.repo + +# Jottacloud +- name: Jottacloud - repo + ansible.builtin.yum_repository: + name: jotta-cli + description: Jottacloud CLI + baseurl: https://repo.jotta.cloud/redhat + gpgcheck: true + gpgkey: https://repo.jotta.cloud/public.gpg + state: present + +# VSCodium +- name: VSCodium - repo + ansible.builtin.yum_repository: + name: gitlab.com_paulcarroty_vscodium_repo + description: gitlab.com_paulcarroty_vscodium_repo + baseurl: https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/ + enabled: true + gpgcheck: true + repo_gpgcheck: true + gpgkey: https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg + metadata_expire: 1h + state: present + +# Tailscale +- name: Tailscale - repo + ansible.builtin.command: + cmd: dnf config-manager addrepo --from-repofile=https://pkgs.tailscale.com/stable/fedora/tailscale.repo + args: + creates: /etc/yum.repos.d/tailscale.repo + +# Cider +- name: Cider - GPG nøgle + ansible.builtin.rpm_key: + key: https://repo.cider.sh/RPM-GPG-KEY + state: present + +- name: Cider - repo + ansible.builtin.yum_repository: + name: cidercollective + description: Cider Collective Repository + baseurl: https://repo.cider.sh/rpm/RPMS + enabled: true + gpgcheck: true + gpgkey: https://repo.cider.sh/RPM-GPG-KEY + state: present diff --git a/tasks/rpmfusion.yml b/tasks/rpmfusion.yml new file mode 100644 index 0000000..79a0faf --- /dev/null +++ b/tasks/rpmfusion.yml @@ -0,0 +1,60 @@ +--- +- name: RPM Fusion - Installer free og nonfree repos + ansible.builtin.dnf: + name: + - "https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-{{ ansible_distribution_major_version }}.noarch.rpm" + - "https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-{{ ansible_distribution_major_version }}.noarch.rpm" + state: present + +- name: RPM Fusion - Aktiver Cisco OpenH264 + ansible.builtin.command: + cmd: dnf config-manager setopt fedora-cisco-openh264.enabled=1 + changed_when: false + +- name: RPM Fusion - Opdater @core + ansible.builtin.dnf: + name: "@core" + state: latest + +- name: RPM Fusion - Installer appstream data + ansible.builtin.dnf: + name: "rpmfusion-*-appstream-data" + state: present + +- name: Multimedia - Swap ffmpeg-free til ffmpeg + ansible.builtin.command: + cmd: dnf swap -y ffmpeg-free ffmpeg --allowerasing + register: ffmpeg_swap + changed_when: "'Nothing to do' not in ffmpeg_swap.stdout" + failed_when: ffmpeg_swap.rc != 0 and 'already installed' not in ffmpeg_swap.stderr | default('') + +- name: Multimedia - Opdater @multimedia + ansible.builtin.command: + cmd: dnf update -y @multimedia --setopt=install_weak_deps=False --exclude=PackageKit-gstreamer-plugin + changed_when: false + +- name: Multimedia - Intel media driver (kun Intel CPU) + ansible.builtin.dnf: + name: intel-media-driver + state: present + when: ansible_processor | join(' ') | lower is search('intel') + +- name: DVD - rpmfusion-free-release-tainted + ansible.builtin.dnf: + name: rpmfusion-free-release-tainted + state: present + +- name: DVD - libdvdcss + ansible.builtin.dnf: + name: libdvdcss + state: present + +- name: Firmware - rpmfusion-nonfree-release-tainted + ansible.builtin.dnf: + name: rpmfusion-nonfree-release-tainted + state: present + +- name: Firmware - installer nonfree firmware + ansible.builtin.command: + cmd: dnf --repo=rpmfusion-nonfree-tainted install -y "*-firmware" + changed_when: false diff --git a/tasks/system.yml b/tasks/system.yml new file mode 100644 index 0000000..e16e1b3 --- /dev/null +++ b/tasks/system.yml @@ -0,0 +1,13 @@ +--- +- name: Tailscale - aktiver og start tailscaled + ansible.builtin.systemd: + name: tailscaled + enabled: true + state: started + +- name: System - resolv.conf symlink (NetworkManager + systemd-resolved fix) + ansible.builtin.file: + src: /run/systemd/resolve/stub-resolv.conf + dest: /etc/resolv.conf + state: link + force: true diff --git a/vars/dnf_packages.yml b/vars/dnf_packages.yml new file mode 100644 index 0000000..bd96471 --- /dev/null +++ b/vars/dnf_packages.yml @@ -0,0 +1,25 @@ +--- +dnf_packages: + - fastfetch + - stow + - fish + - kitty + - lsd + - glow + - tailscale + - steam + - git + - gh + - nvim + - tldr + - btop + - 1password + - sublime-text + - mangojuice + - gamemode + - gamescope + - obs-studio + - jotta-cli + - codium + - rpmconf + - Cider diff --git a/vars/flatpak_packages.yml b/vars/flatpak_packages.yml new file mode 100644 index 0000000..ed247b5 --- /dev/null +++ b/vars/flatpak_packages.yml @@ -0,0 +1,14 @@ +--- +flatpak_packages: + - com.discordapp.Discord + - io.github.Faugus.faugus-launcher + - com.adamcake.Bolt + - com.notesnook.Notesnook + - com.saivert.pwvucontrol + - com.github.tchx84.Flatseal + - org.kde.kdenlive + - it.mijorus.gearlever + - com.github.Matoking.protontricks + - com.vysp3r.ProtonPlus + - org.musicbrainz.Picard + - io.github.lullabyX.sone