├── LICENSE ├── README.md ├── fingerprint-reader.md ├── framework-related-changes.md ├── hardware-interaction.md ├── installation-instructions.md ├── kde-xorg.yml └── roles ├── amd └── tasks │ └── main.yml ├── framework └── tasks │ └── main.yml ├── gnome └── tasks │ └── main.yml ├── i3 └── tasks │ └── main.yml ├── intel └── tasks │ └── main.yml ├── kde └── tasks │ └── main.yml └── xorg ├── files ├── 20-intel.conf └── 40-libinput.conf └── tasks └── main.yml /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) 2024, Framework Computer Inc 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in the 13 | documentation and/or other materials provided with the distribution. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 | POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FreeBSD on Framework 2 | 3 | FreeBSD is not currently an officially supported Operating System on Framework 4 | Computer systems. This repository documents the current state of how well 5 | FreeBSD works on our systems and helps you set it up. 6 | 7 | ## Systems 8 | 9 | | System | Mainboard | Status | 10 | |-------------------| --------------------------|-------------------------------------| 11 | | Framework 12 | Intel 13th Gen | Working well | 12 | | Framework 13 | Intel 11th Gen | Working well | 13 | | Framework 13 | Intel 12th Gen | Working well | 14 | | Framework 13 | Intel 13th Gen | Working well | 15 | | Framework 13 | Intel Core Ultra Series 1 | Working with DRM 6.6 (FreeBSD 15) | 16 | | Framework 13 | AMD 7040 Series | Working with DRM 6.2 (FreeBSD 14.2) | 17 | | Framework 13 | AMD AI 300 Series | Working, no GUI yet | 18 | | Framework 16 | AMD 7040 Series | Working with DRM 6.2 (FreeBSD 14.2) | 19 | | Framework Desktop | AMD AI Max 300 Series | Working, no GUI yet | 20 | 21 | ## Preparation 22 | 23 | 1. [Install latest FreeBSD from installer](installation-instructions.md) 24 | 2. Create your user, adding it to the `wheel` group 25 | 3. Reboot into installed system 26 | 4. Log into root 27 | 5. Install sudo: `pkg install sudo` 28 | 6. Run `visudo` and remove `#` from infront of the line with `wheel` 29 | 7. Log out and log into your user 30 | 8. `sudo pkg install git py311-ansible` 31 | 9. `git clone https://github.com/FrameworkComputer/freebsd-on-framework` 32 | 10. `cd freebsd-on-framework` 33 | 11. Run `sudo ls` and type your password to unlock passwordless sudo 34 | 12. Run your desired Playbook, e.g. `ansible-playbook kde-xorg.yml` 35 | 36 | ## Playbooks 37 | 38 | - `kde-xorg.yml` KDE on Xorg 39 | 40 | TODO: KDE on Wayland 41 | 42 | ## Hardware Support 43 | 44 | ### Generic 45 | 46 | - [x] Framework 12 Touchpad 47 | - [x] Framework 13 Touchpad 48 | - [x] Framework 16 Touchpad 49 | - [x] Fingerprint Reader ([Fixes contributed by Framework](fingerprint-reader.md)) 50 | - [ ] Ambient Light Sensor (I2C HID) 51 | - Work-in-progress by Framework 52 | - [x] Display Brightness control 53 | - [x] Built-in Speakers 54 | - [x] Built-in Camera 55 | - [x] Built-in Microphone 56 | - [x] Headset Speaker 57 | - [ ] Headset Microphone 58 | - [ ] AMD Ryzen 7040 13in/16in (Realtek ALC295) 59 | - [ ] Intel 11th Gen (Realtek ALC295) 60 | - [x] Intel 11th-13th Gen (Tempo 92HD95B) 61 | - [ ] Intel Core Ultra Series 1 (Realtek ALC285) 62 | - [ ] AMD Ryzen AI 300 (Realtek ALC295) 63 | - [ ] Framework 12 Intel 13th Gen (Realtek ALC295) 64 | - [ ] Framework Desktop - Back (Realtek ALC ALC623) 65 | - [ ] Framework Desktop - Front (Realtek ALC ALC623) 66 | 67 | ### Intel Mainboards 68 | 69 | - [x] UEFI Framebuffer (SCFB) 70 | - [x] Intel GPU driver (11th-13th Gen) 71 | - Working with `drm-61-kmod` on 12th Gen 72 | - [ ] Intel GPU driver (Intel Core Ultra) 73 | - Needs at least 6.6, not in FreeBSD yet, see below for details 74 | - [x] Intel AX210 WiFi 75 | - Only 802.22g support in FreeBSD, up to 54Mbit 76 | - [ ] Intel AX210 Bluetooth 77 | - Not supported in FreeBSD kernel yet, see below 78 | - [x] Suspend (S3) on 11th-13th Gen 79 | - Works with Intel GPU driver, not with SCFB 80 | - Wakes up only on power button, or lid, not keyboard press 81 | - [ ] Suspend (S0ix) on Intel Core Ultra 82 | - Not supported yet by FreeBSD, see below 83 | - [ ] Intel P-State power measurements 84 | - Work-in-progress by Framework 85 | 86 | ### AMD Mainboards 87 | 88 | - [x] AMD GPU driver (Ryzen 7040 Series) 89 | - Working with `drm-61-kmod` 90 | - [ ] AMD GPU driver (Ryzen AI 300/Max) 91 | - Not working with `drm-66-kmod` 92 | - [ ] Suspend (S0ix) 93 | - Not supported yet by FreeBSD, see below 94 | 95 | ### Expansion Cards 96 | 97 | - [x] USB-C 98 | - [x] USB-A 99 | - [x] MicroSD 100 | - [x] SD 101 | - [x] SSD 102 | - [x] Audio 103 | - [x] Ethernet (`ure` by default and `cdce` driver) 104 | - [x] HDMI 105 | - Works with Intel GPU driver, does not work with SCFB 106 | - [x] DisplayPort 107 | - Works with Intel GPU driver, does not work with SCFB 108 | 109 | ### Framework 13 - Intel Core Ultra Series 1 110 | 111 | The graphics driver in FreeBSD 14.1 does not work on this Intel CPU generation. 112 | At least DRM 6.6 is needed, which can be built with FreeBSD 15-CURRENT and [drm-kmod PR #283](https://github.com/freebsd/drm-kmod/pull/283). 113 | 114 | ### Framework Desktop (AMD Ryzen AI Max 300) 115 | 116 | - [x] USB-A 117 | - [x] USB-C USB3.2 118 | - [ ] USB-C USB4 119 | - [x] SSD 120 | - [x] Ethernet (RealTek NIC, RTL8126) 121 | - In-tree driver does not attach 122 | - Port `realtek-re-kmod` version `1100` works 123 | - [ ] AMD GPU 124 | - [ ] amdgpu 6.6 fails to attach, "Fatal error during GPU init" 125 | - [ ] USB-C DisplayPort Alt-Mode 126 | - [ ] RZ717 MediaTek WiFi 127 | - [ ] AMD HDA audio controller 128 | - Driver attaches, untested 129 | - [ ] SOC Serial Console 130 | - Can work with userspace (`cu`) 131 | - Can't boot if trying to make kernel print to id 132 | 133 | ``` 134 | uart2: <16950 or compatible> iomem 0xfedc9000-0xfedc9fff,0xfedc7000-0xfedc7fff irq11 on acpi0 135 | ``` 136 | 137 | ### Framework 12 - Intel 13th Gen 138 | 139 | - [x] Touchscreen 140 | - [x] Touchscreen - Stylus 141 | - [ ] G-Sensor (Screen Rotation) 142 | - No driver yet 143 | - [ ] Tablet Mode 144 | - No driver yet - WIP by Framework 145 | - [ ] Suspend 146 | - Can suspend 147 | - But won't wake from keyboard, touchpad or touchscreen, only power button 148 | - And then after resume, immediately powers off 149 | - [x] Built-in Speaker 150 | - [x] Built-in Mic 151 | - [x] Audio jack speaker 152 | - [ ] Audio jack mic -> not showing up 153 | - [x] DRM driver (6.1, 6.6) 154 | - [ ] AX211 WiFi 155 | - [x] Can scan with iwlwifi 156 | - [ ] Not able to connect to networks 157 | - [ ] AX211 Bluetooth 158 | 159 | ## Interacting with the hardware 160 | 161 | Please refer to [Hardware Interaction](hardware-interaction.md) for details. 162 | The commands there are especially useful for Linux users coming to FreeBSD. 163 | 164 | ## Known issues 165 | 166 | - WiFi Driver (iwlwifi) sometimes crashes on shutdown or resume from S3) 167 | - [Workaround](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263632) 168 | - iwlwifi limited to 802.11g speed 169 | - [Workaround](https://github.com/pgj/freebsd-wifibox) by using a Linux virtual machine 170 | - AX210 Bluetooth not supported yet 171 | - https://reviews.freebsd.org/D44861 172 | - RZ616, RZ717 not supported yet 173 | - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264300 174 | - S0ix and s2idle not supported yet 175 | - https://reviews.freebsd.org/D17675 176 | - https://reviews.freebsd.org/D17676 177 | - AMD IOMMU Driver WIP 178 | - https://reviews.freebsd.org/D47256 179 | -------------------------------------------------------------------------------- /fingerprint-reader.md: -------------------------------------------------------------------------------- 1 | # Fingerprint Reader 2 | 3 | ## Installing 4 | 5 | Install the fprintd package: 6 | ``` 7 | sudo pkg install fprintd 8 | ``` 9 | 10 | ## Configuring 11 | 12 | Once you have installed fprintd, you can set up your Login Manager, lockscreen and so on, to use it. 13 | The Arch Wiki has detailed instructions: https://wiki.archlinux.org/title/Fprint 14 | Note that on FreeBSD the etc files are in `/usr/local/etc/`, not in `/etc`. 15 | 16 | Add the following as the first line to: 17 | 18 | - `/usr/local/etc/pam.d/kde` 19 | - `/usr/local/etc/pam.d/sudo` 20 | 21 | ``` 22 | auth sufficient pam_fprintd.so 23 | ``` 24 | 25 | ## Enrolling and testing 26 | 27 | ``` 28 | fprintd-enroll 29 | fprintd-verify 30 | ``` 31 | 32 | ## Upstreaming effort 33 | 34 | The following is no longer needed as the FreeBSD port / package has been updated to the latest version and patches were upstreamed. 35 | 36 | - freebsd-ports 37 | - [branch with all changes](https://github.com/FrameworkComputer/freebsd-ports/tree/fprint) 38 | - libfprint 39 | - [branch with all changes](https://gitlab.freedesktop.org/JohnAZoidberg/libfprint/-/tree/freebsd-usb?ref_type=heads) 40 | - Merge requests 41 | - [Allow build on non-Linux systems (disable SPI)](https://gitlab.freedesktop.org/libfprint/libfprint/-/merge_requests/499) 42 | - fprintd 43 | - [branch with all changes](https://gitlab.freedesktop.org/JohnAZoidberg/fprintd/-/tree/freebsd?ref_type=heads) 44 | - Merge Requests 45 | - [freebsd: Fix building on FreeBSD](https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/210) 46 | - [pam: Allow build with OpenPAM instead of linux-pam](https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/211) 47 | - [pam: Allow build with basu instead of libsystemd](https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/212) 48 | 49 | ### Manually building forks 50 | 51 | ``` 52 | git clone https://gitlab.freedesktop.org/JohnAZoidberg/libfprint 53 | cd libfprint 54 | git checkout freebsd-usb 55 | meson -Dudev_rules=disabled -Dudev_hwdb=disabled build 56 | ninja -C build 57 | 58 | git clone https://gitlab.freedesktop.org/JohnAZoidberg/fprintd 59 | cd fprintd 60 | git checkout freebsd 61 | meson -Dlibsystemd=basu -Dsystemd=false -Dopenpam=true -Dpam_modules_dir=/usr/local/lib build 62 | ninja -C build 63 | ``` 64 | -------------------------------------------------------------------------------- /framework-related-changes.md: -------------------------------------------------------------------------------- 1 | # Framework Computer Related Changes 2 | 3 | - Framework Ethernet Expansion Card 4 | - Use Realtek URE Driver instead of generic USB CDCE: https://reviews.freebsd.org/D45088 5 | - AX210 Bluetooth 6 | - https://reviews.freebsd.org/D44861 7 | - RZ616 8 | - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264300 9 | - Framework 16 10 | - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282592 11 | - https://cgit.freebsd.org/src/commit/?id=38b67578fb4bbf568f7012ca3921a4d15cfe7c5d 12 | - AMD Ryzen 7040 Series (Phoenix, Zen 4) 13 | - hwpstate: https://reviews.freebsd.org/D47985 14 | 15 | 16 | ## Building a custom kernel and world 17 | 18 | ``` 19 | > git clone https://github.com/freebsd/freebsd-src 20 | > sudo chmod 775 /usr/obj 21 | > make buildworld buildkernel config=GENERIC-NODEBUG -j(nproc) 22 | > sudo make installworld installkernel config=GENERIC-NODEBUG 23 | > sudo reboot 24 | > sudo pkg update 25 | > sudo pkg upgrade 26 | ``` 27 | -------------------------------------------------------------------------------- /hardware-interaction.md: -------------------------------------------------------------------------------- 1 | # Hardware Interaction 2 | 3 | ## Battery Info 4 | 5 | ``` 6 | > acpiconf -i 0 7 | Design capacity: 3572 mAh 8 | Last full capacity: 2973 mAh 9 | Technology: secondary (rechargeable) 10 | Design voltage: 15400 mV 11 | Capacity (warn): 290 mAh 12 | Capacity (low): 87 mAh 13 | Cycle Count: 240 14 | Measurement Accuracy: 0% 15 | Max Sampling Time: 0 ms 16 | Min Sampling Time: 0 ms 17 | Max Average Interval: 0 ms 18 | Min Average Interval: 0 ms 19 | Low/warn granularity: 264 mAh 20 | Warn/full granularity: 3780 mAh 21 | Model number: Framewo 22 | Serial number: 027B 23 | Type: LION 24 | OEM info: NVT 25 | State: discharging 26 | Remaining capacity: 59% 27 | Remaining time: 1:32 28 | Present rate: 1141 mA (17238 mW) 29 | Present voltage: 15108 mV 30 | ``` 31 | 32 | ## Lid, power button and suspending 33 | 34 | ``` 35 | # Current lid state 36 | > sysctl dev.acpi_lid.0.state 37 | dev.acpi_lid.0.state: 1 38 | 39 | # Make system power off when pressing power button (add it to `/etc/sysctl.conf` to make the change permanent) 40 | > sudo sysctl hw.acpi.power_button_state=S5 41 | 42 | # Make system sleep when pressing power button 43 | > sudo sysctl hw.acpi.power_button_state=S3 44 | 45 | # Ignore lid event (might be overridden by 46 | > sudo sysctl hw.acpi.power_button_state=None 47 | 48 | # Suspend via zzz 49 | > zzz 50 | 51 | # Manually suspend to S3 via acpiconf 52 | > acpiconf -s 3 53 | ``` 54 | 55 | Custom actions on lid close: https://hauweele.net/~gawen/blog/?p=1420 56 | 57 | ## Temperature Sensors 58 | 59 | ``` 60 | > sysctl -a | grep temperature 61 | hw.acpi.thermal.tz4.temperature: 38.9C 62 | hw.acpi.thermal.tz3.temperature: 52.9C 63 | hw.acpi.thermal.tz2.temperature: 57.9C 64 | hw.acpi.thermal.tz1.temperature: 54.9C 65 | hw.acpi.thermal.tz0.temperature: 64.9C 66 | dev.cpu.19.temperature: 56.0C 67 | dev.cpu.18.temperature: 58.0C 68 | dev.cpu.17.temperature: 59.0C 69 | dev.cpu.16.temperature: 59.0C 70 | dev.cpu.15.temperature: 60.0C 71 | dev.cpu.14.temperature: 61.0C 72 | dev.cpu.13.temperature: 60.0C 73 | dev.cpu.12.temperature: 62.0C 74 | dev.cpu.11.temperature: 56.0C 75 | dev.cpu.10.temperature: 57.0C 76 | dev.cpu.9.temperature: 66.0C 77 | dev.cpu.8.temperature: 66.0C 78 | dev.cpu.7.temperature: 56.0C 79 | dev.cpu.6.temperature: 57.0C 80 | dev.cpu.5.temperature: 64.0C 81 | dev.cpu.4.temperature: 62.0C 82 | dev.cpu.3.temperature: 59.0C 83 | dev.cpu.2.temperature: 58.0C 84 | dev.cpu.1.temperature: 56.0C 85 | dev.cpu.0.temperature: 57.0C 86 | ``` 87 | -------------------------------------------------------------------------------- /installation-instructions.md: -------------------------------------------------------------------------------- 1 | # Detailed Installation Instructions 2 | 3 | ## Download and burn ISO 4 | 5 | For the following systems, please use the latest development snapshot: [FreeBSD 15-CURRENT](https://download.freebsd.org/snapshots/amd64/amd64/ISO-IMAGES/15.0/). 6 | 7 | - Framework 13 - Intel Core Ultra Series 1 (Released Summer 2024) 8 | - Framework 13 - AMD Ryzen AI 300 (Released Spring 2025) 9 | - Framework Desktop - AMD Ryzen AI Max 300 (Released Spring 2025) 10 | 11 | All other systems can use the latest stable release 12 | [FreeBSD 14.1](https://download.freebsd.org/ftp/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso). 13 | 14 | Burn the ISO to a USB thumb drive using your favorite imager. 15 | For example dd, [Rufus](https://rufus.ie/en/), or [balena etcher](https://etcher.balena.io/). 16 | 17 | ## Instructions 18 | 19 | 1. Download and burn ISO 20 | 1. Boot Installer 21 | 1. Select Install 22 | 1. Select Keymap 23 | 1. Set hostname 24 | 1. Select distribution 25 | - Defaults are okay 26 | 1. Set up Internet connection 27 | 1. Select partitioning 28 | - The default, ZFS is ok, confirm all default options 29 | 1. Choose a password 30 | 1. Is CMOS Timezone UTC? 31 | - Yes, unless the previous OS on this system was Windows 32 | 1. Select timezone, confirm date and time 33 | 1. Choose services 34 | 1. `moused` 35 | 1. `ntpd` 36 | 1. ~~`ntpd_sync_on_start`~~ 37 | 1. ~~`powerd`~~ 38 | 1. Choose system hardening options (default nothing is fine) 39 | 1. Add user 40 | - Keep defaults (press enter) for 41 | - `Uid` 42 | - `Login Group` 43 | - `Login class` 44 | - `Shell` 45 | - `Home directory` 46 | - `Home directory permissions` 47 | - `ZFS Encryption` 48 | - Other groups: `wheel video` 49 | 1. No final modifications 50 | 1. Reboot into installed system 51 | -------------------------------------------------------------------------------- /kde-xorg.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: localhost 3 | roles: 4 | - framework 5 | - intel 6 | - xorg 7 | - kde 8 | # - i3 9 | # - gnome 10 | -------------------------------------------------------------------------------- /roles/amd/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # AMD 3 | - name: Load CPU kernel modules 4 | become: yes 5 | community.general.sysrc: 6 | name: kld_list 7 | value: "{{ item }}" 8 | state: value_present 9 | with_items: 10 | - amdtemp 11 | - cpuctl 12 | 13 | # TODO: Is there a custom driver for AMD? 14 | # Intel has hwpstate_intel 15 | # - name: Don't enable powerd 16 | # become: yes 17 | # community.general.sysrc: 18 | # name: powerd_enable 19 | # value: "YES" 20 | # state: present 21 | 22 | - name: Install Linux GPU drivers 23 | become: yes 24 | package: 25 | name: "{{ item }}" 26 | state: present 27 | with_items: 28 | - drm-61-kmod 29 | - gpu-firmware-kmod 30 | # - libva-intel-driver mesa-libs mesa-dri 31 | 32 | - name: Configure AMD DRM driver 33 | become: yes 34 | community.general.sysrc: 35 | name: kld_list 36 | value: "amdgpu" 37 | state: value_present 38 | -------------------------------------------------------------------------------- /roles/framework/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Framework Generic 3 | - name: Make power button suspend instead of turning off 4 | become: yes 5 | ansible.posix.sysctl: 6 | name: hw.acpi.power_button_state 7 | value: "S3" 8 | state: present 9 | 10 | - name: Configure Ethernet Expansion Card IPv4 DHCP 11 | become: yes 12 | community.general.sysrc: 13 | name: ifconfig_ue0 14 | value: "DHCP" 15 | state: present 16 | 17 | - name: Configure Ethernet Expansion Card IPv6 DHCP 18 | become: yes 19 | community.general.sysrc: 20 | name: ifconfig_ue0_ipv6 21 | value: "inet6 accept_rtadv" 22 | state: present 23 | 24 | - name: Install webcamd related packages 25 | become: yes 26 | package: 27 | name: "{{ item }}" 28 | state: present 29 | with_items: 30 | - webcamd 31 | - v4l-utils 32 | - v4l_compat 33 | 34 | - name: Load cuse driver 35 | become: yes 36 | community.general.sysrc: 37 | name: kld_list 38 | value: "cuse" 39 | state: value_present 40 | 41 | - name: Add user to webcamd group 42 | become: yes 43 | user: 44 | name: '{{ ansible_user_id }}' 45 | groups: webcamd 46 | append: yes 47 | 48 | - name: Enable webcamd service 49 | become: yes 50 | community.general.sysrc: 51 | name: webcamd_enable 52 | value: "YES" 53 | state: present 54 | 55 | # Xorg 56 | - name: Add user to video group 57 | become: yes 58 | user: 59 | name: '{{ ansible_user_id }}' 60 | groups: video 61 | append: yes 62 | 63 | - name: Install Xorg packages 64 | become: yes 65 | package: 66 | name: "{{ item }}" 67 | state: present 68 | with_items: 69 | - xorg 70 | 71 | # GUI 72 | - name: Install GUI packages 73 | become: yes 74 | package: 75 | name: "{{ item }}" 76 | state: present 77 | with_items: 78 | - firefox 79 | - flameshot 80 | - noto-emoji 81 | - noto-tc 82 | - urwfonts 83 | # TODO: Need to run this or add to config 84 | # > xset fp+ /usr/local/share/fonts/urwfonts 85 | # > xset fp rehash 86 | -------------------------------------------------------------------------------- /roles/gnome/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # GNOME 3 | - name: Install GNOME packages 4 | become: yes 5 | package: 6 | name: "{{ item }}" 7 | state: present 8 | with_items: 9 | - gnome 10 | - gdm 11 | 12 | # TODO: Should enable GDM, but can't do GDM and SDDM at the same gime 13 | - name: Enable GDM 14 | become: yes 15 | community.general.sysrc: 16 | name: gdm_enable 17 | value: "NO" 18 | state: present 19 | 20 | - name: Enable DBUS 21 | become: yes 22 | community.general.sysrc: 23 | name: dbus_enable 24 | value: "YES" 25 | state: present 26 | 27 | - name: Mount procfs 28 | become: true 29 | ansible.posix.mount: 30 | src: proc 31 | path: /proc 32 | fstype: procfs 33 | opts: rw 34 | state: mounted 35 | -------------------------------------------------------------------------------- /roles/i3/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # i3 3 | - name: Install i3 packages 4 | become: yes 5 | package: 6 | name: "{{ item }}" 7 | state: present 8 | with_items: 9 | - i3 10 | - i3lock 11 | - arandr 12 | - dmenu 13 | - i3status 14 | - xfce4-terminal 15 | 16 | # i3 config 17 | # F1 XF86AudioMute 18 | # F2 XF86AudioLowerVolume 19 | # F3 XF86AudioRaiseVolume 20 | # F4 XF86AudioPrev 21 | # F5 XF86AudioPause, Play? 22 | # F6 XF86AudioNext 23 | # F7 XF86MonBrightnessDown 24 | # F8 XF86MonBrightnessDown 25 | # F9 WIN+P 26 | # F10 TODO 27 | # F11 Print 28 | # F12 XF86AudioMedia 29 | 30 | -------------------------------------------------------------------------------- /roles/intel/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Intel 3 | - name: Load Intel CPU kernel modules 4 | become: yes 5 | community.general.sysrc: 6 | name: kld_list 7 | value: "{{ item }}" 8 | state: value_present 9 | with_items: 10 | - coretemp 11 | - cpuctl 12 | 13 | # All Framework Systems support hwpstate_intel, 14 | # which supercedes powerd 15 | - name: Don't enable powerd 16 | become: yes 17 | community.general.sysrc: 18 | name: powerd_enable 19 | value: "NO" 20 | state: present 21 | 22 | - name: Install Intel drivers 23 | become: yes 24 | package: 25 | name: "{{ item }}" 26 | state: present 27 | with_items: 28 | - drm-61-kmod 29 | - gpu-firmware-kmod 30 | # - libva-intel-driver mesa-libs mesa-dri 31 | 32 | - name: Configure Intel DRM driver 33 | become: yes 34 | community.general.sysrc: 35 | name: kld_list 36 | value: "i915kms" 37 | state: value_present 38 | -------------------------------------------------------------------------------- /roles/kde/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # KDE 3 | - name: Install KDE packages 4 | become: yes 5 | package: 6 | name: "{{ item }}" 7 | state: present 8 | with_items: 9 | - kde 10 | - plasma6-sddm-kcm 11 | - sddm 12 | - networkmgr 13 | 14 | - name: Enable DBUS 15 | become: yes 16 | community.general.sysrc: 17 | name: dbus_enable 18 | value: "YES" 19 | state: present 20 | 21 | - name: Enable SDDM 22 | become: yes 23 | community.general.sysrc: 24 | name: sddm_enable 25 | value: "YES" 26 | state: present 27 | 28 | - name: Increase message size for KDE 29 | become: yes 30 | ansible.posix.sysctl: 31 | name: "{{ item }}" 32 | value: "65536" 33 | state: present 34 | with_items: 35 | - net.local.stream.recvspace 36 | - net.local.stream.sendspace 37 | -------------------------------------------------------------------------------- /roles/xorg/files/20-intel.conf: -------------------------------------------------------------------------------- 1 | Section "Device" 2 | Identifier "Card0" 3 | Driver "scfb" 4 | EndSection 5 | -------------------------------------------------------------------------------- /roles/xorg/files/40-libinput.conf: -------------------------------------------------------------------------------- 1 | Section "InputClass" 2 | Identifier "libinput touchpad catchall" 3 | MatchIsTouchpad "on" 4 | Option "Tapping" "True" 5 | MatchDevicePath "dev/input/events*" 6 | Driver "libinput" 7 | EndSection 8 | -------------------------------------------------------------------------------- /roles/xorg/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # - name: Configure Xorg to use Intel SCFB driver 3 | # become: yes 4 | # ansible.builtin.copy: 5 | # src: "{{ role_path }}/files/20-intel.conf" 6 | # dest: /usr/local/etc/X11/xorg.conf.d/20-intel.conf 7 | 8 | # DRM driver does not need any config 9 | - name: Don't use any Xorg Intel config 10 | become: yes 11 | file: 12 | dest: /usr/local/etc/X11/xorg.conf.d/20-intel.conf 13 | state: absent 14 | 15 | - name: Configure Xorg to enable libinput touchpad tapping 16 | become: yes 17 | ansible.builtin.copy: 18 | src: "{{ role_path }}/files/40-libinput.conf" 19 | dest: /usr/local/etc/X11/xorg.conf.d/40-libinput.conf 20 | 21 | # Workaround for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263632 22 | - name: Stop WiFi after suspending 23 | become: yes 24 | ansible.builtin.lineinfile: 25 | regexp: 'stop wlan0$' 26 | insertafter: '^# kldunload usb' 27 | path: /etc/rc.suspend 28 | line: /usr/sbin/service netif stop wlan0 29 | 30 | - name: Restart WiFi when resuming 31 | become: yes 32 | ansible.builtin.lineinfile: 33 | regexp: 'start wlan0$' 34 | insertafter: '^# kldload usb' 35 | path: /etc/rc.resume 36 | line: /usr/sbin/service netif start wlan0 37 | --------------------------------------------------------------------------------