Skip to content

Latest commit

 

History

History
280 lines (224 loc) · 12.9 KB

README.md

File metadata and controls

280 lines (224 loc) · 12.9 KB

nixpkgs-wayland

Build Update Advance

overview

Automated, pre-built, (potentially) pre-release packages for Wayland (sway/wlroots) tools for NixOS (nixos-unstable channel).

These packages are auto-updated to the latest version available from their upstream source control. This means this overlay and package set will often contain unreleased versions.

Community chat is on Matrix: #nixpkgs-wayland:matrix.org. We are not on Libera.

Started by: @colemickens and co-maintained by @Artturin (🙏).

Usage

Binary Cache

The Cachix landing page for nixpkgs-wayland shows how to utilize the binary cache.

Packages from this overlay are regularly built against nixos-unstable and pushed to this cache.

Continuous Integration

We have multiple CI jobs:

  1. Update - this tries to advance nixpkgs and upgrade all packages. If it can successfully build them, the updates are push to master.
  2. Advance - this tries to advance nixpkgs without touching the packages. This can help show when nixpkgs upgrades via nixos-unstable has advanced into a state where we are broken building against it.
  3. Build - this just proves that master was working against nixos-unstable at the point in time captured by whatever is in flake.lock on master.

We don't have CI on Pull Requests, but I keep an eye on it after merging external contributions.

Flake Usage

  • Build and run the Wayland-fixed up version of OBS-Studio:
    nix shell "github:nix-community/nixpkgs-wayland#obs-studio" --command obs
    
  • Build and run waybar:
    nix run "github:nix-community/nixpkgs-wayland#waybar"
    
  • Use as an overlay or package set via flakes:

    {
      inputs = {
        nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
    
        # only needed if you use as a package set:
        nixpkgs-wayland.inputs.nixpkgs.follows = "nixpkgs";
      };
    
      outputs = inputs: {
        nixosConfigurations."my-laptop-hostname" =
        let system = "x86_64-linux";
        in nixpkgs.lib.nixosSystem {
          inherit system;
          modules = [({pkgs, config, ... }: {
            config = {
              nix.settings = {
                # add binary caches
                trusted-public-keys = [
                  "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
                  "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
                ];
                substituters = [
                  "https://cache.nixos.org"
                  "https://nixpkgs-wayland.cachix.org"
                ];
              };
    
              # use it as an overlay
              nixpkgs.overlays = [ inputs.nixpkgs-wayland.overlay ];
    
              # or, pull specific packages (built against inputs.nixpkgs, usually `nixos-unstable`)
              environment.systemPackages = [
                inputs.nixpkgs-wayland.packages.${system}.waybar
              ];
            };
          })];
        };
      };
    }

Install for NixOS (non-flakes, manual import)

If you are not using Flakes, then consult the NixOS Wiki page on Overlays. Also, you can expand this section for a more literal, direct example. If you do pin, use a tool like niv to do the pinning so that you don't forget and wind up stuck on an old version.

{ config, lib, pkgs, ... }:
let
  rev = "master"; # 'rev' could be a git rev, to pin the overlay.
  url = "https://github.com/nix-community/nixpkgs-wayland/archive/${rev}.tar.gz";
  waylandOverlay = (import "${builtins.fetchTarball url}/overlay.nix");
in
  {
    nixpkgs.overlays = [ waylandOverlay ];
    environment.systemPackages = with pkgs; [ wayvnc ];
    # ...
  }

You could write that to a file ./wayland.nix next to your configuration.nix and then use it like so:

{ config, lib, pkgs, ... }:
  {
    # ...
    imports = [
      # ...
      ./wayland.nix
    ];
  }

Install for non-NixOS users

Non-NixOS users have many options, but here are two explicitly:

  1. Activate flakes mode, then just run them outright like the first example in this README.

  2. See the following details block for an example of how to add nixpkgs-wayland as a user-level overlay and then install a package with nix-env.

  1. There are two ways to activate an overlay for just your user:

    1. Add a new entry in ``~/.config/nixpkgs/overlays.nix`:
    let
      url = "https://github.com/nix-community/nixpkgs-wayland/archive/master.tar.gz";
    in
    [
      (import "${builtins.fetchTarball url}/overlay.nix")
    ]
    1. Add a new file under a dir, ~/.config/nixpkgs/overlays/nixpkgs-wayland.nix:
    let
      url = "https://github.com/nix-community/nixpkgs-wayland/archive/master.tar.gz";
    in
      (import "${builtins.fetchTarball url}/overlay.nix")

Note, this method does not pin nixpkgs-wayland. That's left to the reader. (Just use flakes...)

  1. Then, nix-env will have access to the packages:
nix-env -iA neatvnc

Packages

Package Description
aml Another main loop
cage Wayland kiosk that runs a single, maximized application
drm_info Small utility to dump info about DRM devices
dunst Lightweight and customizable notification daemon
eww Widget system made in Rust to create widgets for any WM
foot A fast, lightweight and minimalistic Wayland terminal emulator
freerdp3 A Remote Desktop Protocol Client
gebaar-libinput Gebaar, A Super Simple WM Independent Touchpad Gesture Daemon for libinput
glpaper Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper
grim Grab images from a Wayland compositor
gtk-layer-shell Library to create panels and other desktop components for Wayland using the Layer Shell protocol
i3status-rust Very resource-friendly and feature-rich replacement for i3status
imv Command line image viewer for tiling window managers
kanshi Dynamic display configuration tool
lavalauncher Simple launcher panel for Wayland desktops
libvncserver_master VNC server library
mako Lightweight Wayland notification daemon
neatvnc VNC server library
new-wayland-protocols Wayland protocol extensions
obs-wlrobs Obs-studio plugin that allows you to screen capture on wlroots based wayland compositors
rootbar Bar for Wayland WMs
salut A sleek notification daemon
shotman Uncompromising screenshot GUI for Wayland compositors
sirula Simple app launcher for wayland written in rust
slurp Select a region in a Wayland compositor
sway-unwrapped I3-compatible tiling Wayland compositor
swaybg Wallpaper tool for Wayland compositors
swayidle Idle management daemon for Wayland
swaylock Screen locker for Wayland
swaylock-effects Screen locker for Wayland
swww Efficient animated wallpaper daemon for wayland, controlled at runtime
waybar Highly customizable Wayland bar for Sway and Wlroots based compositors
waypipe Network proxy for Wayland clients (applications)
wayprompt multi-purpose prompt tool for Wayland
wayvnc VNC server for wlroots based Wayland compositors
wbg Wallpaper application for Wayland compositors
wdisplays Graphical application for configuring displays in Wayland compositors
wev Wayland event viewer
wf-recorder Utility program for screen recording of wlroots-based compositors
wl-clipboard Command-line copy/paste utilities for Wayland
wl-gammarelay-rs A simple program that provides DBus interface to control display temperature and brightness under wayland without flickering
wlay Graphical output management for Wayland
wldash Wayland launcher/dashboard
wlogout Wayland based logout menu
wlr-randr Xrandr clone for wlroots compositors
wlroots Modular Wayland compositor library
wlsunset Day/night gamma adjustments for Wayland
wlvncc A Wayland Native VNC Client
wob Lightweight overlay bar for Wayland
wofi Launcher/menu program for wlroots based wayland compositors such as sway
wshowkeys Displays keys being pressed on a Wayland session
wtype xdotool type for wayland
xdg-desktop-portal-wlr xdg-desktop-portal backend for wlroots

Tips

General

  • I recommend using home-manager!
  • It has modules and options for:
    • sway
    • waybar
    • obs and plugins!
    • more!

sway

  • You will likely want a default config file to place at $HOME/.config/sway/config. You can use the upstream default as a starting point: https://github.com/swaywm/sway/blob/master/config.in
  • If you start sway from a raw TTY, make sure you use exec sway so that if sway crashes, an unlocked TTY is not exposed.

Nvidia Users

  • Everything should just work now (aka, wlroots/sway don't need patching).
  • This is a known-good working config, at least at one point in time: mixins/nvidia.nix@ccd992

Development Guide

  • Use nix develop
  • ./main.nu:
    • ./main.nu build - builds and caches derivations that don't exist in the cache, use nix-eval-jobs
    • ./main.nu advance - advances the flake inputs, runs main build
    • ./main.nu update - advances the flake inputs, updates pkg revs, runs main build
  • build pushes to the nixpkgs-wayland cachix

If for some reason the overlay isn't progressing and you want to help, just clone the repo, run nix develop -c ./main.nu update