From ecb4689213a59a1b0ebc4621345734893b035e08 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 17 Mar 2026 18:48:34 +0100 Subject: [PATCH] Switch desktop fallback terminal to st and build it from source --- ansible/inventory/group_vars/desktop.yml | 8 + .../roles/profile_desktop_i3/tasks/main.yml | 161 ++++++++++++++++++ dotfiles/desktop/.config/i3/config | 2 +- 3 files changed, 170 insertions(+), 1 deletion(-) diff --git a/ansible/inventory/group_vars/desktop.yml b/ansible/inventory/group_vars/desktop.yml index 7df8c3f..2cb753b 100644 --- a/ansible/inventory/group_vars/desktop.yml +++ b/ansible/inventory/group_vars/desktop.yml @@ -10,6 +10,7 @@ profile_packages: - rofi - alacritty - Thunar + - exo - thunar-volman - udiskie - xfce-polkit @@ -33,11 +34,18 @@ profile_packages: - cmake - gcc - gdb + - pkg-config + - libX11-devel + - libXft-devel + - fontconfig-devel + - freetype-devel - go - clang - clang-tools-extra - mpv - yt-dlp + - meld + - 7zip - libreoffice - lm_sensors - fastfetch diff --git a/ansible/roles/profile_desktop_i3/tasks/main.yml b/ansible/roles/profile_desktop_i3/tasks/main.yml index c5d98e9..46c8e71 100644 --- a/ansible/roles/profile_desktop_i3/tasks/main.yml +++ b/ansible/roles/profile_desktop_i3/tasks/main.yml @@ -63,6 +63,41 @@ group: "{{ user_group }}" mode: "0600" +- name: Ensure local source directory exists + ansible.builtin.file: + path: "{{ user_home }}/.local/src" + state: directory + owner: "{{ username }}" + group: "{{ user_group }}" + mode: "0755" + +- name: Clone st repository + ansible.builtin.git: + repo: https://codeberg.org/fscotto/st + dest: "{{ user_home }}/.local/src/st" + update: true + become_user: "{{ username }}" + environment: + HOME: "{{ user_home }}" + register: st_repo + +- name: Check whether st binary is installed + ansible.builtin.stat: + path: /usr/local/bin/st + register: st_binary + +- name: Build and install st + ansible.builtin.command: + cmd: make clean install + chdir: "{{ user_home }}/.local/src/st" + when: st_repo.changed or not st_binary.stat.exists + +- name: Clean st build artifacts + ansible.builtin.command: + cmd: make clean + chdir: "{{ user_home }}/.local/src/st" + when: st_repo.changed or not st_binary.stat.exists + - name: Ensure flathub remote is configured community.general.flatpak_remote: name: "{{ desktop_flatpak_remote_name | default('flathub') }}" @@ -77,3 +112,129 @@ remote: "{{ desktop_flatpak_remote_name | default('flathub') }}" method: system when: (desktop_flatpak_packages | default([])) | length > 0 + +- name: Set desktop external tool release metadata + ansible.builtin.set_fact: + desktop_tools_tmp_dir: /tmp/desktop-tools + gitmux_version: v0.11.5 + bw_version: 1.22.1 + gitmux_arch: >- + {{ + 'amd64' if ansible_architecture == 'x86_64' + else 'arm64' if ansible_architecture in ['aarch64', 'arm64'] + else '' + }} + +- name: Ensure architecture is supported for gitmux binary + ansible.builtin.fail: + msg: "Unsupported architecture {{ ansible_architecture }} for gitmux release binary" + when: gitmux_arch == '' + +- name: Ensure architecture is supported for bw binary + ansible.builtin.fail: + msg: "Unsupported architecture {{ ansible_architecture }} for bw release binary" + when: ansible_architecture != 'x86_64' + +- name: Ensure temporary directory exists for external tools + ansible.builtin.file: + path: "{{ desktop_tools_tmp_dir }}" + state: directory + mode: "0755" + +- name: Download gitmux checksums + ansible.builtin.get_url: + url: "https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/checksums.txt" + dest: "{{ desktop_tools_tmp_dir }}/gitmux-checksums-{{ gitmux_version }}.txt" + mode: "0644" + +- name: Read gitmux checksums file + ansible.builtin.slurp: + src: "{{ desktop_tools_tmp_dir }}/gitmux-checksums-{{ gitmux_version }}.txt" + register: gitmux_checksums_raw + +- name: Set gitmux asset metadata + ansible.builtin.set_fact: + gitmux_asset: "gitmux_{{ gitmux_version }}_linux_{{ gitmux_arch }}.tar.gz" + gitmux_checksum: >- + {{ + (gitmux_checksums_raw.content | b64decode) + | regex_findall('([a-f0-9]{64})\\s+gitmux_' ~ gitmux_version ~ '_linux_' ~ gitmux_arch ~ '\\.tar\\.gz') + | first + | default('', true) + }} + +- name: Fail if gitmux checksum cannot be resolved + ansible.builtin.fail: + msg: "Unable to resolve gitmux checksum for architecture {{ gitmux_arch }}" + when: gitmux_checksum | length == 0 + +- name: Download gitmux release archive + ansible.builtin.get_url: + url: "https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/{{ gitmux_asset }}" + dest: "{{ desktop_tools_tmp_dir }}/{{ gitmux_asset }}" + checksum: "sha256:{{ gitmux_checksum }}" + mode: "0644" + +- name: Extract gitmux release archive + ansible.builtin.unarchive: + src: "{{ desktop_tools_tmp_dir }}/{{ gitmux_asset }}" + dest: "{{ desktop_tools_tmp_dir }}" + remote_src: true + +- name: Install gitmux binary + ansible.builtin.copy: + src: "{{ desktop_tools_tmp_dir }}/gitmux" + dest: /usr/local/bin/gitmux + remote_src: true + owner: root + group: root + mode: "0755" + +- name: Download bw checksums + ansible.builtin.get_url: + url: "https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/bw-linux-sha256-{{ bw_version }}.txt" + dest: "{{ desktop_tools_tmp_dir }}/bw-sha256-{{ bw_version }}.txt" + mode: "0644" + +- name: Read bw checksums file + ansible.builtin.slurp: + src: "{{ desktop_tools_tmp_dir }}/bw-sha256-{{ bw_version }}.txt" + register: bw_checksums_raw + +- name: Set bw asset metadata + ansible.builtin.set_fact: + bw_asset: "bw-linux-{{ bw_version }}.zip" + bw_checksum: >- + {{ + (bw_checksums_raw.content | b64decode) + | regex_findall('([a-f0-9]{64})\\s+bw-linux-' ~ bw_version ~ '\\.zip') + | first + | default('', true) + }} + +- name: Fail if bw checksum cannot be resolved + ansible.builtin.fail: + msg: "Unable to resolve checksum for bw {{ bw_version }}" + when: bw_checksum | length == 0 + +- name: Download bw release archive + ansible.builtin.get_url: + url: "https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/{{ bw_asset }}" + dest: "{{ desktop_tools_tmp_dir }}/{{ bw_asset }}" + checksum: "sha256:{{ bw_checksum }}" + mode: "0644" + +- name: Extract bw release archive + ansible.builtin.unarchive: + src: "{{ desktop_tools_tmp_dir }}/{{ bw_asset }}" + dest: "{{ desktop_tools_tmp_dir }}" + remote_src: true + +- name: Install bw binary + ansible.builtin.copy: + src: "{{ desktop_tools_tmp_dir }}/bw" + dest: /usr/local/bin/bw + remote_src: true + owner: root + group: root + mode: "0755" diff --git a/dotfiles/desktop/.config/i3/config b/dotfiles/desktop/.config/i3/config index 34d7c4c..b067615 100644 --- a/dotfiles/desktop/.config/i3/config +++ b/dotfiles/desktop/.config/i3/config @@ -53,7 +53,7 @@ set $right l bindsym $mod+Return exec --no-startup-id /usr/bin/alacritty # Emergency terminal fallback -bindsym $mod+Shift+Return exec --no-startup-id xterm +bindsym $mod+Shift+Return exec --no-startup-id st # Launcher #bindsym $mod+d exec --no-startup-id "rofi -modi drun,run -show drun"