Update FreeBSD profile with Niri

This commit is contained in:
Fabio Scotto di Santolo
2026-07-15 22:26:29 +02:00
parent fa39a2571b
commit 8eabc5b340
22 changed files with 317 additions and 147 deletions

View File

@@ -7,6 +7,7 @@ user_shell: /bin/bash
effective_username: "{{ username }}"
effective_user_group: "{{ user_group }}"
effective_user_home: "{{ user_home }}"
emacs_enabled: false
xdg_user_directories:
- Desktop

View File

@@ -94,10 +94,6 @@ desktop_common_dotfiles:
src: .bashrc.d/20-editor-desktop.sh
dest: .bashrc.d/20-editor-desktop.sh
mode: "0644"
- name: Bash Emacs client fragment
src: .bashrc.d/25-emacs-client-desktop.sh
dest: .bashrc.d/25-emacs-client-desktop.sh
mode: "0644"
- name: Bash VM helper fragment
src: .bashrc.d/30-runvm.sh
dest: .bashrc.d/30-runvm.sh
@@ -170,6 +166,10 @@ desktop_minimal_managed_paths:
- .local/bin/udiskie-password
desktop_emacs_dotfiles:
- name: Bash Emacs client fragment
src: .bashrc.d/25-emacs-client-desktop.sh
dest: .bashrc.d/25-emacs-client-desktop.sh
mode: "0644"
- name: Emacs config
src: .emacs.d/
dest: .emacs.d/
@@ -239,6 +239,28 @@ desktop_hyprland_dotfiles:
dest: .config/foot/
mode: preserve
desktop_niri_dotfiles:
- name: foot config
src: .config/foot/
dest: .config/foot/
mode: preserve
- name: dunst config
src: .config/dunst/
dest: .config/dunst/
mode: preserve
- name: rofi config
src: .config/rofi/
dest: .config/rofi/
mode: preserve
- name: waybar config
src: .config/waybar/
dest: .config/waybar/
mode: preserve
- name: niri config
src: .config/niri/
dest: .config/niri/
mode: preserve
desktop_xfce_dotfiles:
- name: XFCE configuration
src: .config/xfce4/

View File

@@ -0,0 +1,3 @@
---
desktop_profile: niri
desktop_default_session: niri

View File

@@ -75,6 +75,19 @@ freebsd_hyprland_packages:
- xdg-desktop-portal-hyprland
- xwayland
freebsd_niri_packages:
- cliphist
- dunst
- foot
- grim
- niri
- rofi-wayland
- seatd
- slurp
- waybar
- wl-clipboard
- xdg-desktop-portal-gtk
freebsd_lab_packages:
- lldb
- llvm

View File

@@ -38,32 +38,14 @@ mint_development_packages:
- python3-venv
mint_desktop_common_packages:
# autoconf/automake/libtool-bin build the Emacs pdf-tools (epdfinfo) and
# vterm native modules; the lib*-dev headers below are their link deps.
- autoconf
- automake
- dconf-cli
- deja-dup
- emacs
- firefox
- fonts-liberation
- fonts-noto-color-emoji
- git-delta
- gnome-keyring
# hunspell CLI + Italian dictionary for Emacs spell checking (spell.el sets
# ispell-really-hunspell); hunspell-en-us is pulled in as a dependency.
- hunspell
- hunspell-it
- libfreetype-dev
# pdf-tools epdfinfo build deps (poppler); libpng-dev/zlib1g-dev are already
# satisfied by other packages.
- libpoppler-glib-dev
- libpoppler-private-dev
- libsecret-tools
- libtool-bin
# vterm/multi-vterm native module (compiled against system libvterm).
- libvterm-dev
- libx11-dev
- mpv
- pinentry-gnome3
- pinentry-gtk2
@@ -74,6 +56,19 @@ mint_desktop_common_packages:
- xdg-user-dirs
- yt-dlp
mint_emacs_packages:
- autoconf
- automake
- emacs
- hunspell
- hunspell-it
- libfreetype-dev
- libpoppler-glib-dev
- libpoppler-private-dev
- libtool-bin
- libvterm-dev
- libx11-dev
mint_cinnamon_packages:
- cinnamon
- cinnamon-control-center
@@ -95,13 +90,11 @@ mint_flatpak_packages:
- com.spotify.Client
- org.telegram.desktop
# Nerd Fonts referenced by the desktop configs deployed on Mint (fontconfig
# symbols, Emacs UI/vterm). Debian has no equivalent of Void's nerd-fonts-ttf
# package, so they are fetched from the upstream ryanoasis/nerd-fonts release.
# Nerd Fonts referenced by the desktop configs deployed on Mint. Debian has no
# equivalent of Void's nerd-fonts-ttf package, so they are fetched from the
# upstream ryanoasis/nerd-fonts release.
mint_nerd_fonts_version: v3.3.0
mint_nerd_fonts:
- Hack
# Archive is named UbuntuSans; it ships the "UbuntuSansMono Nerd Font" faces
# referenced by the Emacs UI config.
- UbuntuSans
- NerdFontsSymbolsOnly

View File

@@ -100,13 +100,15 @@ desktop_common_packages:
- cups-pk-helper
- flatpak
- libsecret
- pinentry-emacs
- sane
- sane-airscan
- turnstile
- xdg-desktop-portal
- xdg-user-dirs
desktop_emacs_packages:
- pinentry-emacs
desktop_minimal_packages:
- alacritty
- blueman
@@ -228,7 +230,6 @@ profile_packages:
- deluge-gtk
- delve
- dnsmasq
- emacs-pgtk
- poppler-glib
- poppler-utils
- fontconfig-devel
@@ -270,3 +271,6 @@ profile_packages:
- yaru
- yaru-plus
- zstd
profile_emacs_packages:
- emacs-pgtk

View File

@@ -1,44 +1,7 @@
---
hostname: nymph
desktop_emptty_session_error_logging: rotate
host_packages:
- nvidia580
- linux-mainline-headers
- mesa-dri
- vulkan-loader
- mesa-vulkan-intel
- intel-video-accel
- power-profiles-daemon
- tlp
- tlp-rdw
- upower
host_enabled_services:
- tlp
host_sway_dotfiles:
- src: .config/sway/host.conf
dest: .config/sway/host.conf
mode: "0644"
- src: .config/sway/session-env
dest: .config/sway/session-env
mode: "0644"
- src: .config/kanshi/
dest: .config/kanshi/
mode: preserve
- src: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
dest: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
mode: "0644"
host_hyprland_dotfiles:
- src: .config/hypr/host.conf
dest: .config/hypr/host.conf
mode: "0644"
- src: .config/hypr/session-env
dest: .config/hypr/session-env
mode: "0644"
- src: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
dest: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
mode: "0644"
# FreeBSD/Niri laptop target. Keep host-specific packages empty until hardware
# support is verified on the installed system.
host_packages: []
host_enabled_services: []

View File

@@ -10,7 +10,9 @@ all:
ansible_connection: local
platform_freebsd:
hosts: {}
hosts:
nymph:
ansible_connection: local
void:
children:
@@ -43,8 +45,13 @@ all:
desktop_hyprland:
hosts: {}
desktop_niri:
hosts:
nymph:
ansible_connection: local
desktop_cinnamon:
hosts:
hosts:
ikaros:
ansible_connection: local

View File

@@ -17,6 +17,11 @@
if 'desktop_hyprland' in group_names
else []
)
+ (
(freebsd_niri_packages | default([]))
if 'desktop_niri' in group_names
else []
)
+ (
(freebsd_lab_packages | default([]))
if 'role_lab' in group_names

View File

@@ -19,6 +19,14 @@
if 'graphical_desktop' in group_names
else []
)
+ (
(mint_emacs_packages | default([]))
if (
'graphical_desktop' in group_names
and (emacs_enabled | default(false) | bool)
)
else []
)
+ (
(mint_cinnamon_packages | default([]))
if 'desktop_cinnamon' in group_names

View File

@@ -105,7 +105,9 @@
(common_packages | default([]))
+ (void_packages_base | default([]))
+ (profile_packages | default([]))
+ ((profile_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else [])
+ (desktop_common_packages | default([]))
+ ((desktop_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else [])
+ (packages_void_selected_desktop_packages | default([]))
+ (host_packages | default([]))
)

View File

@@ -40,6 +40,7 @@
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
when: emacs_enabled | default(false) | bool
- name: Ensure GnuPG directory exists
tags: [dotfiles, dotfiles:desktop, git]
@@ -71,6 +72,7 @@
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_emacs_dotfiles | default([]) }}"
when: emacs_enabled | default(false) | bool
loop_control:
label: "{{ item.dest }}"

View File

@@ -315,6 +315,7 @@
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_emacs_dotfiles | default([]) }}"
when: emacs_enabled | default(false) | bool
loop_control:
label: "{{ item.dest }}"
@@ -564,7 +565,7 @@
label: "{{ item.name }}"
- name: Install desktop Python tools with uv
tags: [packages, emacs]
tags: [packages]
ansible.builtin.command:
cmd: "uv tool install --upgrade {{ item }}"
become: true

View File

@@ -0,0 +1,41 @@
---
- name: Ensure FreeBSD Niri user config directories exist
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/foot"
- "{{ user_home }}/.config/niri"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/waybar"
- "{{ user_home }}/.local"
- "{{ user_home }}/.local/bin"
- "{{ user_home }}/.local/state"
- "{{ user_home }}/.local/state/ssh-agent"
- name: Copy common Niri desktop dotfiles on FreeBSD
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_niri_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
- name: Render FreeBSD Niri session launcher
tags: [packages, services, niri]
ansible.builtin.template:
src: start-niri-session.j2
dest: /usr/local/bin/start-niri-session
owner: root
group: wheel
mode: "0755"

View File

@@ -0,0 +1,24 @@
#!/bin/sh
[ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
export XDG_CURRENT_DESKTOP=niri
export XDG_SESSION_DESKTOP=niri
export XDG_SESSION_TYPE=wayland
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM='wayland;xcb'
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
export GDK_BACKEND='wayland,x11'
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
[ -r "$HOME/.config/niri/session-env" ] && . "$HOME/.config/niri/session-env"
if command -v dbus-run-session >/dev/null 2>&1; then
exec dbus-run-session niri --session
fi
exec niri --session

View File

@@ -79,12 +79,12 @@
roles:
- profile_lab
- name: Configure Hyprland desktop on FreeBSD
hosts: platform_freebsd:&desktop_hyprland
- name: Configure Niri desktop on FreeBSD
hosts: platform_freebsd:&desktop_niri
become: true
roles:
- profile_desktop_hyprland_freebsd
- profile_desktop_niri_freebsd
- name: Configure Fedora workstation development layer
hosts: workstation_dev_fedora

View File

@@ -29,9 +29,19 @@
[mergetool]
prompt = false
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
trustExitCode = false
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[color]
ui = always