Post

My Linux desktop

My Linux desktop dotfiles and configuration for Fedora Sway

GitHub watchers GitHub stars GitHub forks

My Linux desktop setup on Fedora Sway Atomic, previously known as Sericea.

Desktop

  • Window manager: Sway via baseOS

    Setup described here.

    Only use wayland applications; xwayland apps are not properly scaled swaywm/sway#2966, drag and drop does not work swaywm/sway#6460 and have a glitched behaviour uppon minimized on system tray swaywm/sway#6905.

    All flatpak applications installed in user mode.

  • Notification daemon: SwayNotificationCenter via rpm-ostree

  • Terminal:

    TerminalStartup TimeCPU (idle)Memory (RSS)
    foot19 ms1.4%22.7 MB
    ghostty770 ms0.1%105.8 MB
    wezterm (flatpak)193 ms4.7%107.2 MB
    • Primary: Foot via baseOS

      Amazingly fast. Miss a couple of features, namely a grabbable scrollbar and ligatures support dnkl/foot#57.

    • Secondary: WezTerm via Flatpak

    • Tertiary: Ghostty đź‘»

  • IDE:
  • Browser
    • Primary: Firefox via Flatpak
    • Secondary: Chrome via Flatpak

      With flags --ozone-platform-hint=wayland and --enable-pixel-canvas-recording=enabled.

  • Messaging application: Zen via Flatpak

    Use it as client for GTranslate, GKeep, GCalendar, Gmail, Outlook, Teams, Slack, Google Chat, WhatsApp, Discord, Element, Feedly, ChatGPT and Gemini.

    Setup described here.

    Was using Ferdium via Flatpak.

  • File manager: Thunar (via baseOS) with the Papirus icon theme (via rpm-ostree)

    Would prefer Nautilus if it were available via Flatpak GNOME/nautilus#946 (with NautilusPreviewer (GNOME Sushi) via Flatpak (org.gnome.NautilusPreviewer) as well). Would consider PCMan FM but miss the preview feature.

  • Text editor: Mousepad via Flatpak

  • Images
    • Viewer: imv via baseOS
    • Basic photo editing: Drawing via Flatpak
  • PDF
    • Reader: Zathura via Flatpak
    • Editing
      • Basic editing via Evince (GNOME Document Viewer) via Flatpak and Firefox
      • Xournal++ via Flatpak for adding images, etc.
      • PDF Arranger via Flatpak for merging PDF files.
  • Video player: mpv via Flatpak

  • Torrent client: Transmission via Flatpak

  • File sync
    • Dropbox via Flatpak
    • Don’t have a good alternative for Gdrive at the moment. Celeste via Flatpak was discontinued and rclone it’s not ideal for my use case.
  • Office suite: LibreOffice via Flatpak

  • Display setup
    • wdisplays via toolbx
    • wl-mirror via toolbx
  • Screen recording: wf-recorder via toolbx. May consider wl-screenrec (with GPU support) in the future.

Tools

  • Shell: bash via baseOS
  • Prompt: starship via local install
  • Text editor: neovim via Flatpak
  • Application management: rpm-ostree and flatpak via baseOS
  • Terminal multiplexer: tmux in remote systems
  • Configuration management: ansible via toolbx
  • Containers: podman and toolbox via base OS
  • Keyboard input: wtype via rpm-ostree
  • Power management: tlp via rpm-ostree. Tried out tuned-ppd but it needs an external controller (i.e.: gnome-settings-daemon), see redhat-performance/tuned#708, or manually creating a user systemd controller service.
  • Virtualization: kcli via toolbx
  • Kubernetes: kind and kube-burner via local install

Tricks

  • For ovn-kubernetes:

    1
    
     $ sudo modprobe openvswitch
    
  • For KubeVirt:
    • Create the kind cluster as root
    • The following command will allow the installation of KubeVirt in a rootless cluster but then the VMs won’t be created because rootless podman is unable to create pods in kind with ephemeral storage requests kubernetes-sigs/kind#3359:

      1
      
       $ sudo chown $USER /dev/kvm
      
  • For running kind clusters locally:

    1
    
     $ sudo sysctl -w kernel.keys.maxkeys=5000
    
  • Create a kind cluster using rootless podman as provider without the need of setting systemd property Delegate=yes (see https://kind.sigs.k8s.io/docs/user/rootless/):

    1
    
     KIND_EXPERIMENTAL_PROVIDER=podman systemd-run --scope --user ~/go/bin/kind create cluster
    
  • Add kernel boot parameters:

    1
    
     rpm-ostree kargs --editor
    

Issues

If you have managed to get working any of the following please let me know:

  • Claude Code
  • CRC
    • [RFE] CRC libvirt related resources should be in the user namespace, not root crc-org/crc#3541
  • Dropbox
    • Tray icon not working [flathub/com.dropbox.Client#265](https://github.com/flathub/com.dropbox.Client/issues/265)
  • Emacs
  • Flatpak
    • Firefox/Zen Flatpaks don’t trust host CA certificates (e.g. corporate/enterprise CAs). The p11-kit client-server plumbing works (trust list inside the sandbox shows host CAs), but Firefox’s NSS doesn’t use it for TLS verification flatpak/flatpak#2721, Mozilla Bug 1762854, zen-browser/desktop#7202. Workaround: import the CA cert into each browser profile with certutil -A -d sql:<profile> -n "<CA name>" -t "CT,C,C" -i <cert.pem>
    • flatpak-spawn --host doesn't work with apps requiring tty/pty [flatpak/flatpak-xdg-utils#57](https://github.com/flatpak/flatpak-xdg-utils/issues/57)
    • [Feature request]: Support applications with internal sandboxes flatpak/flatpak#5921
  • Ferdium
    • Allow setting default zoom level per service [ferdium/ferdium-app#1556](https://github.com/ferdium/ferdium-app/issues/1556)
    • Credentials autocomplete ferdium/ferdium-app#1425
    • Feature: Ability to add Chrome extensions like password managers ferdium/ferdium-app#135
    • Unable to print from Gmail view [ferdium/ferdium-app#1573](https://github.com/ferdium/ferdium-app/issues/1573)
    • Stuck in purple screen in Linux with Wayland [ferdium/ferdium-app#1551](https://github.com/ferdium/ferdium-app/issues/1551)
    • Zoom resets after service change [ferdium/ferdium-app#1419](https://github.com/ferdium/ferdium-app/issues/1419)
  • Firefox
    • Slack huddles are not available webcompat/web-bugs#82623
    • Prime Video does not work (neither Chrome nor Firefox) https://www.primevideo.com/region/na/help?nodeId=GU85HKX66NVFNQ9Y
  • Foot
  • Ghostty
  • GNOME
  • Helix
  • Kind
    • Unable to create pods in rootless mode with ephemeral storage requests [kubernetes-sigs/kind#3359](https://github.com/kubernetes-sigs/kind/issues/3359)
  • Nautilus
  • NeoVim
    • [NeoVim lsp] Unable to find root directory [ocaml/ocaml-lsp#1050](https://github.com/ocaml/ocaml-lsp/issues/1050)
  • Papirus icon theme
  • Starship
  • Sway
    • Allow all glob patterns in output configs swaywm/sway#5629
    • Drag & Drop from XWayland apps to Wayland ones: it only works occasionally [swaywm/sway#6460](https://github.com/swaywm/sway/issues/6460)
    • Differentiate between *app_ids* that start the same [swaywm/sway#7838](https://github.com/swaywm/sway/issues/7838)
    • Fast scroll using $mod + ScrollWheel. Tried with:
      1
      2
      
       bindsym --whole-window $mod+button4 exec "wtype -M shift -k Prior"
       bindsym --whole-window $mod+button5 exec "wtype -M shift -k Next"
      
      • Problem 1: Only works the first wheel turn, then need to relase and press again $mod
      • Problem 2: Different apps use different combinations, i.e.: just ScrollWheel or Shift+ScrollWheel
    • Persistent workspaces swaywm/sway#7631
    • Share a specific window on Google Meet swaywm/sway#3282
    • XWayland windows gets tiled uppong being reopened from system tray [swaywm/sway#6905](https://github.com/swaywm/sway/issues/6905)
  • Toolbx
    • Is there a way to preserve toolbox PWD upon exit? [containers/toolbox#1604](https://github.com/containers/toolbox/issues/1604)
    • Load completions from the host [containers/toolbox#1302](https://github.com/containers/toolbox/issues/1472)
    • Support for custom commands upon entering container containers/toolbox#1302
    • Optionally make exec session terminate with parent containers/toolbox#1204
    • podman run/exec should not ignore the SIGHUP signal containers/toolbox#1400
  • Transmission
  • Vim Flatpak
  • Visual Studio Code
    • Add optional Wayland support [flathub/com.visualstudio.code#471](https://github.com/flathub/com.visualstudio.code/issues/471)
    • Crash when rebuilding application menu on wayland [microsoft/vscode#184124](https://github.com/microsoft/vscode/issues/184124)
    • Exit Vim Insert Mode on Save VSCodeVim/Vim#2411
    • JetBrains Mono font ligatures not working [JetBrains/JetBrainsMono#655](https://github.com/JetBrains/JetBrainsMono/issues/655)
    • Paste through mouse middle button does not insert text at cursor position VSCodeVim/Vim#5065
    • Reset to normal mode when leaving file focus VSCodeVim/Vim#7553
    • Small/giant mouse cursor [microsoft/vscode#136390](https://github.com/microsoft/vscode/issues/136390)
  • Watch (procps-ng)
    • watch does not handle terminal resize correctly, output stays wrapped/garbled at the old size until the command is restarted procps-ng/procps#417
  • Wezterm
    • Fix crash on hidpi with wayland wezterm/wezterm#6508: this is preventing front_end="WebGpu" to work on fractional scaled monitors
    • Wezterm sometimes including ending “)” with url wezterm/wezterm#7454
  • Zathura
    • Publish on Flathub? [pwmt/zathura#655](https://github.com/pwmt/zathura/issues/655)

Lenovo ThinkPad P1 Gen 4i

  • GPU: Intel TigerLake-H UHD Graphics (9a60).

    • Atomic (rpm-ostree): forced the newer xe driver instead of i915 via kernel args (see apply/rpm-ostree.sh):

      1
      
       rpm-ostree kargs --append="i915.force_probe=!9a60" --append="xe.force_probe=9a60"
      
    • Workstation (dnf): staying on i915 with GuC/SLPC enabled for better GPU power management. GuC offloads frequency scaling to firmware (SLPC) and enables Render C-states (RC), reducing power at idle and light loads. Set via kernel args (see scripts/workstation-to-sway.sh):

      1
      
       grubby --update-kernel=ALL --args="i915.enable_guc=3"
      

      Verify after reboot: sudo dmesg | grep -iE 'guc|slpc' should show “SLPC enabled”.

  • Btrfs compression: With composefs (Fedora 42+), root mount options from /etc/fstab are ignored, disabling compress=zstd:1. Workaround: move compression to kernel args and comment the / entry in /etc/fstab (atomic-desktops/tracker#72):

    1
    
     rpm-ostree kargs --delete=rootflags=subvol=root --append=rootflags=subvol=root,compress=zstd:1
    
  • Suspend: Set BIOS sleep state to S3 (deep) for better battery life during suspend. In BIOS: Config → Power → Sleep State → Linux. Verify with:

    1
    2
    
     $ cat /sys/power/mem_sleep
     s2idle [deep]
    
  • Audio: Tiger Lake speaker profile configured in wireplumber/wireplumber.conf.d/50-tiger-lake-speaker-profile.conf

  • Backlight: Using intel_backlight device for brightness control (see swaync/config.json)

TODO

GitHub followers

This post is licensed under CC BY 4.0 by the author.