Full Code of colemickens/nixpkgs-wayland for AI

dev 0f2e1c75ea21 cached
87 files
82.3 KB
27.9k tokens
1 requests
Download .txt
Repository: colemickens/nixpkgs-wayland
Branch: dev
Commit: 0f2e1c75ea21
Files: 87
Total size: 82.3 KB

Directory structure:
gitextract_knidfuyg/

├── .envrc
├── .git-blame-ignore-revs
├── .github/
│   ├── dependabot.yml
│   ├── init
│   └── workflows/
│       ├── advance.yaml
│       ├── build.yaml
│       ├── check.yaml
│       └── update.yaml
├── .gitignore
├── README.md
├── default.nix
├── demo/
│   ├── README.md
│   ├── configuration.nix
│   ├── flake.nix
│   ├── home/
│   │   ├── profile.nix
│   │   └── sway-config
│   ├── legacy/
│   │   └── default.nix
│   ├── profile.nix
│   ├── vm-build.sh
│   └── vm-run.sh
├── flake.nix
├── main.nu
├── overlay.nix
├── packages.nix
├── pkgs/
│   ├── aml/
│   │   └── metadata.nix
│   ├── cage/
│   │   └── metadata.nix
│   ├── drm_info/
│   │   └── metadata.nix
│   ├── dunst/
│   │   └── metadata.nix
│   ├── eww/
│   │   └── metadata.nix
│   ├── foot/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── freerdp3/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── gebaar-libinput/
│   │   └── metadata.nix
│   ├── glpaper/
│   │   └── metadata.nix
│   ├── grim/
│   │   └── metadata.nix
│   ├── gtk-layer-shell/
│   │   └── metadata.nix
│   ├── i3status-rust/
│   │   └── metadata.nix
│   ├── imv/
│   │   └── metadata.nix
│   ├── kanshi/
│   │   └── metadata.nix
│   ├── lavalauncher/
│   │   └── metadata.nix
│   ├── libvncserver_master/
│   │   ├── metadata.nix
│   │   └── pkgconfig.patch
│   ├── mako/
│   │   └── metadata.nix
│   ├── neatvnc/
│   │   └── metadata.nix
│   ├── new-wayland-protocols/
│   │   └── metadata.nix
│   ├── obs-wlrobs/
│   │   └── metadata.nix
│   ├── rootbar/
│   │   └── metadata.nix
│   ├── salut/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── shotman/
│   │   └── metadata.nix
│   ├── sirula/
│   │   └── metadata.nix
│   ├── slurp/
│   │   └── metadata.nix
│   ├── sway-unwrapped/
│   │   └── metadata.nix
│   ├── swaybg/
│   │   └── metadata.nix
│   ├── swayidle/
│   │   └── metadata.nix
│   ├── swaylock/
│   │   └── metadata.nix
│   ├── swaylock-effects/
│   │   └── metadata.nix
│   ├── swww/
│   │   └── metadata.nix
│   ├── waybar/
│   │   └── metadata.nix
│   ├── waypipe/
│   │   └── metadata.nix
│   ├── wayvnc/
│   │   └── metadata.nix
│   ├── wbg/
│   │   └── metadata.nix
│   ├── wdisplays/
│   │   └── metadata.nix
│   ├── wev/
│   │   └── metadata.nix
│   ├── wf-recorder/
│   │   └── metadata.nix
│   ├── wl-clipboard/
│   │   └── metadata.nix
│   ├── wl-gammarelay-rs/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wl-screenrec/
│   │   └── metadata.nix
│   ├── wlay/
│   │   └── metadata.nix
│   ├── wldash/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wlogout/
│   │   └── metadata.nix
│   ├── wlr-randr/
│   │   └── metadata.nix
│   ├── wlroots/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wlsunset/
│   │   └── metadata.nix
│   ├── wlvncc/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wob/
│   │   └── metadata.nix
│   ├── wofi/
│   │   └── metadata.nix
│   ├── wshowkeys/
│   │   └── metadata.nix
│   ├── wtype/
│   │   └── metadata.nix
│   └── xdg-desktop-portal-wlr/
│       └── metadata.nix
├── shell.nix
└── templates/
    └── template.nix

================================================
FILE CONTENTS
================================================

================================================
FILE: .envrc
================================================
use flake


================================================
FILE: .git-blame-ignore-revs
================================================
# format with `nixfmt-rfc-style`
1030752c7fa96902b95212d522f7ea0fe7859b95


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/init
================================================
#!/usr/bin/env bash
set -euo pipefail

git config --global user.name 'Cole Botkens'
git config --global user.email 'cole.mickens+colebot@gmail.com'
git remote update


================================================
FILE: .github/workflows/advance.yaml
================================================
name: "Advance"
concurrency: update-advance
on:
  schedule:
    - cron: '13 */6 * * *'
  workflow_dispatch:
  workflow_call:
jobs:
  advance:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: setup-nix
      uses: DeterminateSystems/nix-installer-action@main
      with:
        extra-conf: |
          accept-flake-config = true
    - name: prepare
      run: nix develop -c .github/init
    - name: advance
      env:
        CACHIX_SIGNING_KEY_NIXPKGS_WAYLAND: "${{ secrets.cachix_signing_key_nixpkgs_wayland }}"
      run: nix develop -c ./main.nu advance


================================================
FILE: .github/workflows/build.yaml
================================================
name: "Build"
on:
  push:
    branches:
    - master
  schedule:
    - cron: '17 */14 * * *'
  workflow_dispatch:
  workflow_call:
jobs:
  build:
    runs-on: ubuntu-latest
    concurrency: build-${{matrix.jobs.branch}}-${{matrix.jobs.target}}
    steps:
    - uses: actions/checkout@v4
    - name: setup-nix
      uses: DeterminateSystems/nix-installer-action@main
      with:
        extra-conf: |
          accept-flake-config = true
    - name: prepare
      run: nix develop -c .github/init
    - name: build
      env:
        CACHIX_SIGNING_KEY_NIXPKGS_WAYLAND: "${{ secrets.cachix_signing_key_nixpkgs_wayland }}"
      run: nix develop -c ./main.nu build


================================================
FILE: .github/workflows/check.yaml
================================================
name: "Check"
on:
  push:
    branches:
    - master
  schedule:
    - cron: '17 */14 * * *'
  pull_request:
  workflow_dispatch:
  workflow_call:
jobs:
  check:
    runs-on: ubuntu-latest
    concurrency: build-${{matrix.jobs.branch}}-${{matrix.jobs.target}}
    steps:
    - uses: actions/checkout@v4
    - name: setup-nix
      uses: DeterminateSystems/nix-installer-action@main
      with:
        extra-conf: |
          accept-flake-config = true
    - name: prepare
      run: nix develop -c .github/init
    - name: check
      run: nix develop -c ./main.nu check
    - name: success
      run: echo "we made it, yay"


================================================
FILE: .github/workflows/update.yaml
================================================
name: "Update"
concurrency: update-advance
on:
  schedule:
    - cron: '38 */12 * * *'
  workflow_dispatch:
  workflow_call:
jobs:
  update:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: setup-nix
      uses: DeterminateSystems/nix-installer-action@main
      with:
        extra-conf: |
          accept-flake-config = true
    - name: prepare
      run: nix develop -c .github/init
    - name: update
      env:
        CACHIX_SIGNING_KEY_NIXPKGS_WAYLAND: "${{ secrets.cachix_signing_key_nixpkgs_wayland }}"
      run: nix develop -c ./main.nu update


================================================
FILE: .gitignore
================================================
.ci/commit-message
.direnv
*.qcow2
result
result-*


================================================
FILE: README.md
================================================
# nixpkgs-wayland

[![Build](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/build.yaml/badge.svg)](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/build.yaml)
[![Update](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/update.yaml/badge.svg)](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/update.yaml)
[![Advance](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/advance.yaml/badge.svg)](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/advance.yaml)

## 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](https://matrix.to/#/#nixpkgs-wayland:matrix.org). We are not on Libera.

Started by: [**@colemickens**](https://github.com/colemickens)
and co-maintained by [**@Artturin**](https://github.com/Artturin) (🙏).

<!-- TOC -->
- [overview](#overview)
- [Usage](#usage)
  - [Binary Cache](#binary-cache)
  - [Continuous Integration](#continuous-integration)
  - [Flake Usage](#flake-usage)
  - [Install for NixOS (non-flakes, manual import)](#install-for-nixos-non-flakes-manual-import)
  - [Install for non-NixOS users](#install-for-non-nixos-users)
- [Packages](#packages)
- [Tips](#tips)
    - [General](#general)
    - [`sway`](#sway)
    - [Nvidia Users](#nvidia-users)
- [Development Guide](#development-guide)
<!-- /TOC -->


## Usage

### Binary Cache

The [Cachix landing page for `nixpkgs-wayland`](https://nixpkgs-wayland.cachix.org) 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](https://github.com/obsproject/obs-studio/pull/2484) version of [OBS-Studio](https://obsproject.com/):
  ```
  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:

  ```nix
  {
    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](https://nixos.wiki/wiki/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.

<details>

```nix
{ 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:

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

</details>

### 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`.

<details>

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

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

   2. Add a new file under a dir, `~/.config/nixpkgs/overlays/nixpkgs-wayland.nix`:
    ```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...)

2. Then, `nix-env` will have access to the packages:

```nix
nix-env -iA neatvnc
```

</details>


## Packages

<!--pkgs-start-->
| Package | Description |
| --- | --- |
| [aml](https://github.com/any1/aml) | Another main loop |
| [cage](https://github.com/Hjdskes/cage) | Wayland kiosk that runs a single, maximized application |
| [drm_info](https://github.com/ascent12/drm_info) | Small utility to dump info about DRM devices |
| [dunst](https://github.com/dunst-project/dunst) | Lightweight and customizable notification daemon |
| [eww](https://github.com/elkowar/eww) | Widget system made in Rust to create widgets for any WM |
| [foot](https://codeberg.org/dnkl/foot/) | Fast, lightweight and minimalistic Wayland terminal emulator |
| [freerdp3](https://www.freerdp.com/) | A Remote Desktop Protocol Client |
| [gebaar-libinput](https://github.com/Osleg/gebaar-libinput-fork) | Gebaar, A Super Simple WM Independent Touchpad Gesture Daemon for libinput |
| [glpaper](https://hg.sr.ht/~scoopta/glpaper) | Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper |
| [grim](https://github.com/emersion/grim) | Grab images from a Wayland compositor |
| [gtk-layer-shell](https://github.com/wmww/gtk-layer-shell) | Library to create panels and other desktop components for Wayland using the Layer Shell protocol |
| [i3status-rust](https://github.com/greshake/i3status-rust) | Very resource-friendly and feature-rich replacement for i3status |
| [imv](https://git.sr.ht/~exec64/imv) | Command line image viewer for tiling window managers |
| [kanshi](https://git.sr.ht/~emersion/kanshi) | Dynamic display configuration tool |
| [lavalauncher](https://git.sr.ht/~leon_plickat/lavalauncher) | Simple launcher panel for Wayland desktops |
| [libvncserver_master](https://github.com/LibVNC/libvncserver) | VNC server library |
| [mako](https://github.com/emersion/mako) | Lightweight Wayland notification daemon |
| [neatvnc](https://github.com/any1/neatvnc) | VNC server library |
| [new-wayland-protocols](https://gitlab.freedesktop.org/wayland/wayland-protocols/) | Wayland protocol extensions |
| [obs-wlrobs](https://hg.sr.ht/~scoopta/wlrobs) | Obs-studio plugin that allows you to screen capture on wlroots based wayland compositors |
| [rootbar](https://hg.sr.ht/~scoopta/rootbar) | Bar for Wayland WMs |
| [salut](https://gitlab.com/snakedye/salut) | A sleek notification daemon |
| [shotman](https://git.sr.ht/~whynothugo/shotman) | Uncompromising screenshot GUI for Wayland compositors |
| [sirula](https://github.com/DorianRudolph/sirula) | Simple app launcher for wayland written in rust |
| [slurp](https://github.com/emersion/slurp) | Select a region in a Wayland compositor |
| [sway-unwrapped](https://github.com/swaywm/sway) | I3-compatible tiling Wayland compositor |
| [swaybg](https://github.com/swaywm/swaybg) | Wallpaper tool for Wayland compositors |
| [swayidle](https://github.com/swaywm/swayidle) | Idle management daemon for Wayland |
| [swaylock](https://github.com/swaywm/swaylock) | Screen locker for Wayland |
| [swaylock-effects](https://github.com/jirutka/swaylock-effects) | Screen locker for Wayland |
| [swww](https://github.com/Horus645/swww) | Efficient animated wallpaper daemon for wayland, controlled at runtime |
| [waybar](https://github.com/Alexays/Waybar) | Highly customizable Wayland bar for Sway and Wlroots based compositors |
| [waypipe](https://gitlab.freedesktop.org/mstoeckl/waypipe/) | Network proxy for Wayland clients (applications) |
| [wayvnc](https://github.com/any1/wayvnc) | VNC server for wlroots based Wayland compositors |
| [wbg](https://codeberg.org/dnkl/wbg) | Wallpaper application for Wayland compositors |
| [wdisplays](https://github.com/artizirk/wdisplays) | Graphical application for configuring displays in Wayland compositors |
| [wev](https://git.sr.ht/~sircmpwn/wev) | Wayland event viewer |
| [wf-recorder](https://github.com/ammen99/wf-recorder) | Utility program for screen recording of wlroots-based compositors |
| [wl-clipboard](https://github.com/bugaevc/wl-clipboard) | Command-line copy/paste utilities for Wayland |
| [wl-gammarelay-rs](https://github.com/MaxVerevkin/wl-gammarelay-rs) | A simple program that provides DBus interface to control display temperature and brightness under wayland without flickering  |
| [wlay](https://github.com/atx/wlay) | Graphical output management for Wayland |
| [wldash](https://wldash.org) | Wayland launcher/dashboard |
| [wlogout](https://github.com/ArtsyMacaw/wlogout) | Wayland based logout menu |
| [wlr-randr](https://git.sr.ht/~emersion/wlr-randr) | Xrandr clone for wlroots compositors |
| [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots/) | Modular Wayland compositor library |
| [wlsunset](https://git.sr.ht/~kennylevinsen/wlsunset) | Day/night gamma adjustments for Wayland |
| [wlvncc](https://github.com/any1/wlvncc) | A Wayland Native VNC Client |
| [wob](https://github.com/francma/wob) | Lightweight overlay bar for Wayland |
| [wofi](https://hg.sr.ht/~scoopta/wofi) | Launcher/menu program for wlroots based wayland compositors such as sway |
| [wshowkeys](https://github.com/ammgws/wshowkeys) | Displays keys being pressed on a Wayland session |
| [wtype](https://github.com/atx/wtype) | xdotool type for wayland |
| [xdg-desktop-portal-wlr](https://github.com/emersion/xdg-desktop-portal-wlr) | xdg-desktop-portal backend for wlroots |
<!--pkgs-end-->

</details>

## Tips

#### General

- I recommend using [`home-manager`](https://github.com/rycee/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](https://github.com/cole-mickens/nixcfg/blob/cdd9929d5d36ce5b4d64cf80bdeb1df3f2cba332/mixins/nvidia.nix)

## 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`


================================================
FILE: default.nix
================================================
# This file provides backward compatibility to nix < 2.4 clients
let
  lock = builtins.fromJSON (builtins.readFile ./flake.lock);

  inherit (lock.nodes.flake-compat.locked)
    owner
    repo
    rev
    narHash
    ;

  flake-compat = fetchTarball {
    url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";
    sha256 = narHash;
  };

  flake = import flake-compat { src = ./.; };

  warn = msg: builtins.trace "warning: ${msg}";
  example = ''
    nixpkgs.overlays=[(import "''${builtins.fetchurl "https://github.com/nix-community/nixpkgs-wayland/archive/master.tar.gz"}/overlay.nix")];
  '';
  warning = "change your 'nixpkgs-wayland' import statement to import 'overlay.nix' directly. example:\n  ${example}";
in
warn warning flake.defaultNix


================================================
FILE: demo/README.md
================================================
# Demo

This is a WIP demo

## QEMU Demo

    ./vm-build.sh && ./vm-run.sh
    



================================================
FILE: demo/configuration.nix
================================================
{ ... }:
{
  imports = [ (import ./profile.nix { user = "demo"; }) ];

  nix.settings.trusted-users = [
    "root"
    "@wheel"
  ];

  security.sudo.enable = true;

  users.users.demo = {
    uid = 1000;
    isNormalUser = true;
    password = "demo1234";
    extraGroups = [
      # allow demo to administer the machine
      "wheel"
    ];
  };

  users.users.root = {
    password = "root1234";
  };

  services.xserver.enable = false;

  services.getty.helpLine = ''

       Welcome to the Sway demo

    login: demo
    password: demo1234

    Once logged-in, type `sway` to start the desktop environment.
  '';
}


================================================
FILE: demo/flake.nix
================================================
{
  description = "nixpkgs-wayland";

  inputs = {
    nixpkgs = {
      url = "github:nixos/nixpkgs/nixos-unstable";
    };
    lib-aggregate = {
      url = "github:nix-community/lib-aggregate";
    };
    nixpkgs-wayland = {
      url = "github:nix-community/nixpkgs-wayland";
    };
    home-manager = {
      url = "github:nix-community/home-manager";
    };
  };

  nixConfig = {
    extra-substituters = [ "https://nixpkgs-wayland.cachix.org" ];
    extra-trusted-public-keys = [
      "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
    ];
  };

  outputs =
    inputs:
    let
      inherit (inputs.lib-aggregate) lib;
      inherit (inputs) self;
    in
    lib.flake-utils.eachSystem
      [
        "aarch64-linux"
        "x86_64-linux"
        "riscv64-linux"
      ]
      (system: {
        nixosConfigurations.demo = inputs.nixpkgs.lib.nixosSystem {
          inherit system;
          specialArgs = {
            inherit inputs;
          };
          modules = [
            ./configuration.nix
            (
              { pkgs, ... }:
              {
                nixpkgs.overlays = [ inputs.nixpkgs-wayland.overlays.default ];
              }
            )

            (
              { pkgs, modulesPath, ... }:
              {
                imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];
                virtualisation = {
                  memorySize = 1024 * 8;
                  diskSize = 1024 * 2;
                  cores = 8;
                };
                # For running Sway in a QEMU VM the Arch Linux Wiki recommends to use
                # the QXL virtualized graphics card:
                # https://wiki.archlinux.org/title/sway#Virtualization
                # The screen resolution isn't automatically scaled. Full HD seems to
                # be a good default that should work on most systems well.
                virtualisation.qemu.options = [ "-device qxl-vga,xres=1920,yres=1080" ];

                # The Arch Linux Wiki suggests using the qxl and bochs_drm kernel
                # modules:
                # https://wiki.archlinux.org/title/QEMU#qxl
                boot.kernelModules = [
                  "qxl"
                  "bochs_drm"
                ];
              }
            )
          ];
        };
        packages = {
          demo-vm = self.nixosConfigurations.${system}.demo.config.system.build.vmWithBootLoader;
        };
      });
}


================================================
FILE: demo/home/profile.nix
================================================
{ pkgs, ... }:
{
  home.packages =
    with pkgs;
    [
      brightnessctl
      dmenu
      pavucontrol
      playerctl
      termite
      xdg_utils # needed for termite URL opening
      xwayland
    ]
    ++ (with waylandPkgs; [
      grim # screenshot CLI
      waybar
      kanshi # broken: display configurator
      mako # notification manager
      slurp # dimension-grabbing CLI, to use with grim
      swayidle # lock screen manager
    ]);

  programs.termite.enable = true;
  programs.termite.scrollbackLines = 10000;

  programs.firefox.enable = true;

  # FIXME: doesn't work yet
  xsession.enable = true;
  xsession.windowManager.command = "sway";

  xdg.enable = true;
  xdg.configFile."sway/config" = {
    source = pkgs.substituteAll {
      name = "sway-config";
      src = ./sway-config;
      wallpaper = ./wallpaper.jpg;
    };
  };

  xdg.configFile."chromium-flags.conf" = {
    source = pkgs.writeText "chromium-flags.conf" ''
      --force-device-scale-factor=1
    '';
  };

  gtk.enable = true;

  home.stateVersion = "23.11";
}


================================================
FILE: demo/home/sway-config
================================================
# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.

### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
#set $term urxvt
set $term termite
# alacritty
# Your preferred application launcher
# Note: it's recommended that you pass the final command to sway
set $menu dmenu_path | dmenu | xargs swaymsg exec

### Output configuration
#
# Default wallpaper (more resolutions are available in __DATADIR__/backgrounds/sway/)
output * bg @wallpaper@ fill

output eDP-1 scale 1.5

#
# Example configuration:
#
#   output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs

### Idle configuration
#
# Example configuration:
#
exec swayidle \
    timeout 500 'swaylock -c 000000' \
    timeout 600 'swaymsg "output * dpms off"' \
       resume 'swaymsg "output * dpms on"' \
    before-sleep 'swaylock -c 000000'

# Start the notification center
exec mako --default-timeout 50000

# Start one shell
exec $term

# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 600 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.

### Input configuration
#
# Example configuration:
#
#   input "2:14:SynPS/2_Synaptics_TouchPad" {
#       dwt enabled
#       tap enabled
#       natural_scroll enabled
#       middle_emulation enabled
#   }
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.

input "1386:888:Wacom_Intuos_BT_M_Pen" {
  map_to_output HDMI-A-2
  # FIXME: map BTN_0 to BTN_3, BTN_STYLUS and BTN_STYLUS2 buttons
}

### Key bindings
#
# Basics:
#
    # start a terminal
    bindsym $mod+Return exec $term

    # kill focused window
    bindsym $mod+Shift+q kill

    # start your launcher
    bindsym $mod+d exec $menu
    bindsym $mod+p exec $menu

    # Drag floating windows by holding down $mod and left mouse button.
    # Resize them with right mouse button + $mod.
    # Despite the name, also works for non-floating windows.
    # Change normal to inverse to use left mouse button for resizing and right
    # mouse button for dragging.
    floating_modifier $mod normal

    # reload the configuration file
    bindsym $mod+Shift+c reload

    # exit sway (logs you out of your Wayland session)
    bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
#
# Moving around:
#
    # Move your focus around
    bindsym $mod+$left focus left
    bindsym $mod+$down focus down
    bindsym $mod+$up focus up
    bindsym $mod+$right focus right
    # or use $mod+[up|down|left|right]
    bindsym $mod+Left focus left
    bindsym $mod+Down focus down
    bindsym $mod+Up focus up
    bindsym $mod+Right focus right

    # _move_ the focused window with the same, but add Shift
    bindsym $mod+Shift+$left move left
    bindsym $mod+Shift+$down move down
    bindsym $mod+Shift+$up move up
    bindsym $mod+Shift+$right move right
    # ditto, with arrow keys
    bindsym $mod+Shift+Left move left
    bindsym $mod+Shift+Down move down
    bindsym $mod+Shift+Up move up
    bindsym $mod+Shift+Right move right
#
# Workspaces:
#
    # switch to workspace
    bindsym $mod+1 workspace 1
    bindsym $mod+2 workspace 2
    bindsym $mod+3 workspace 3
    bindsym $mod+4 workspace 4
    bindsym $mod+5 workspace 5
    bindsym $mod+6 workspace 6
    bindsym $mod+7 workspace 7
    bindsym $mod+8 workspace 8
    bindsym $mod+9 workspace 9
    bindsym $mod+0 workspace 10
    # move focused container to workspace
    bindsym $mod+Shift+1 move container to workspace 1
    bindsym $mod+Shift+2 move container to workspace 2
    bindsym $mod+Shift+3 move container to workspace 3
    bindsym $mod+Shift+4 move container to workspace 4
    bindsym $mod+Shift+5 move container to workspace 5
    bindsym $mod+Shift+6 move container to workspace 6
    bindsym $mod+Shift+7 move container to workspace 7
    bindsym $mod+Shift+8 move container to workspace 8
    bindsym $mod+Shift+9 move container to workspace 9
    bindsym $mod+Shift+0 move container to workspace 10
    # Note: workspaces can have any name you want, not just numbers.
    # We just use 1-10 as the default.
#
# Layout stuff:
#
    # You can "split" the current object of your focus with
    # $mod+b or $mod+v, for horizontal and vertical splits
    # respectively.
    bindsym $mod+b splith
    bindsym $mod+v splitv

    # Switch the current container between different layout styles
    bindsym $mod+s layout stacking
    bindsym $mod+w layout tabbed
    bindsym $mod+e layout toggle split

    # Make the current focus fullscreen
    bindsym $mod+f fullscreen

    # Toggle the current focus between tiling and floating mode
    bindsym $mod+Shift+space floating toggle

    # Swap focus between the tiling area and the floating area
    bindsym $mod+space focus mode_toggle

    # move focus to the parent container
    bindsym $mod+a focus parent
#
# Scratchpad:
#
    # Sway has a "scratchpad", which is a bag of holding for windows.
    # You can send windows there and get them back later.

    # Move the currently focused window to the scratchpad
    bindsym $mod+Shift+minus move scratchpad

    # Show the next scratchpad window or hide the focused scratchpad window.
    # If there are multiple scratchpad windows, this command cycles through them.
    bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
    # left will shrink the containers width
    # right will grow the containers width
    # up will shrink the containers height
    # down will grow the containers height
    bindsym $left resize shrink width 10px
    bindsym $down resize grow height 10px
    bindsym $up resize shrink height 10px
    bindsym $right resize grow width 10px

    # ditto, with arrow keys
    bindsym Left resize shrink width 10px
    bindsym Down resize grow height 10px
    bindsym Up resize shrink height 10px
    bindsym Right resize grow width 10px

    # return to default mode
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"

# Media keys
bindsym XF86AudioLowerVolume exec pactl set-sink-volume $(pacmd list-sinks |awk '/* index:/{print $3}') -5%
bindsym XF86AudioMute exec pactl set-sink-mute $(pacmd list-sinks |awk '/* index:/{print $3}') toggle
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume $(pacmd list-sinks |awk '/* index:/{print $3}') +5%
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym XF86MonBrightnessUp exec brightnessctl set +5%
bindsym XF86LaunchB exec $menu
#
# Status Bar:

bar {
    swaybar_command waybar
}


================================================
FILE: demo/legacy/default.nix
================================================
let
  nixpkgs = builtins.fetchTarball {
    url = "https://github.com/nixos/nixpkgs/archive/master.tar.gz";
    sha256 = "195mgl12xa3qdxj2qnqswff4ic205442ankz0mgfrlsvp3jpm4qr";
  };

  rev = "master";
  # 'rev' could be a git rev, to pin the overla.
  # if you pin, you should use a tool like `niv` maybe, but please consider trying flakes
  url = "https://github.com/colemickens/nixpkgs-wayland/archive/${rev}.tar.gz";
  waylandOverlay = import (builtins.fetchTarball url);

  pkgs = import nixpkgs { overlays = [ waylandOverlay ]; };
in
pkgs.waylandPkgs.waybar


================================================
FILE: demo/profile.nix
================================================
{ user }:
{ pkgs, inputs, ... }@args:
let
  inherit (inputs) home-manager;
in
{
  imports = [ "${home-manager}/nixos" ];

  nixpkgs.overlays = [ (import ../overlay.nix) ];

  # When this is enabled, the QEMU VM goes blank after boot
  networking.networkmanager.enable = true;

  fonts.packages = with pkgs; [
    dejavu_fonts # just a basic good font
    font-awesome_5
  ];

  # add sound support
  hardware.pulseaudio.enable = true;

  # setup the user's  home
  home-manager.users."${user}" = (import ./home/profile.nix) args;

  # Sway
  programs.sway.enable = true;
  programs.sway.extraSessionCommands = ''
    # Tell toolkits to use wayland
    export CLUTTER_BACKEND=wayland
    #export QT_QPA_PLATFORM=wayland-egl
    export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
    export SDL_VIDEODRIVER=wayland

    # Fix krita and other Egl-using apps
    export LD_LIBRARY_PATH=/run/opengl-driver/lib

    # Disable HiDPI scaling for X apps
    # https://wiki.archlinux.org/index.php/HiDPI#GUI_toolkits
    export GDK_SCALE=1
    export QT_AUTO_SCREEN_SCALE_FACTOR=0
  '';

  # manage those with home-manager
  programs.sway.extraPackages = [ ];

  # Add the required groups for the user to get access
  users.extraUsers."${user}" = {
    extraGroups = [
      # allow sudo
      "wheel"
      "input"
      "tty"
      "audio"
      "video"
      # allow sway's setuid executable
      "sway"
      "networkmanager"
    ];
  };
}


================================================
FILE: demo/vm-build.sh
================================================
#!/usr/bin/env bash
nix build ".#packages.x86_64-linux.demo-vm"


================================================
FILE: demo/vm-run.sh
================================================
#!/usr/bin/env bash

if [[ ! -e ./result ]]; then
  echo Run ./vm-build.sh first
  exit 1
fi

exec ./result/bin/run-nixos-vm


================================================
FILE: flake.nix
================================================
{
  description = "nixpkgs-wayland";

  inputs = {
    nixpkgs = {
      url = "github:nixos/nixpkgs/nixos-unstable";
    };
    lib-aggregate = {
      url = "github:nix-community/lib-aggregate";
    };
    flake-compat = {
      url = "github:nix-community/flake-compat";
    };
  };

  nixConfig = {
    extra-substituters = [ "https://nixpkgs-wayland.cachix.org" ];
    extra-trusted-substituters = [ "https://nixpkgs-wayland.cachix.org" ];
    extra-trusted-public-keys = [
      "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
    ];
  };

  outputs =
    inputs:
    let
      inherit (inputs.lib-aggregate) lib;
      inherit (inputs) self;

      waylandOverlay =
        final: prev:
        let
          template =
            {
              attrName,
              nixpkgsAttrName ? "",
              extra ? { },
              replace ? { },
              replaceInput ? { },
              deprecationWarning ? "",
            }:
            import ./templates/template.nix {
              inherit
                prev
                attrName
                extra
                replace
                nixpkgsAttrName
                replaceInput
                deprecationWarning
                ;
            };
          checkMutuallyExclusive = lib.mutuallyExclusive (map (e: e.attrName) attrsExtraChangesNeeded) (
            map (e: e.attrName) attrsNoExtraChangesNeeded
          );
          genPackagesGH =
            if checkMutuallyExclusive then
              lib.listToAttrs (
                map (a: {
                  name = a.attrName;
                  value = template a;
                }) (attrsExtraChangesNeeded ++ attrsNoExtraChangesNeeded)
              )
            else
              throw "some 'attrName' value is in both attrsExtraChangesNeeded and attrsNoExtraChangesNeeded";

          # these need extra nativeBuildInputs or buildInputs or the patches cleared
          attrsExtraChangesNeeded = [
            {
              attrName = "drm_info";
              extra.nativeBuildInputs = [ prev.scdoc ];
            }
            {
              attrName = "swaylock";
              replace.patches = [ ];
            }
            {
              attrName = "grim";
              replace.patches = [ ];
            }
            {
              attrName = "waybar";
              deprecationWarning = "'waybar' will be removed in October 2025. Please use the flake from https://github.com/Alexays/Waybar.";
              extra.buildInputs = [ prev.gpsd ];
              replace = previousAttrs: {
                patches = [];
                postUnpack =
                  let
                    # Derived from subprojects/cava.wrap
                    libcava = rec {
                      version = "0.10.4";
                      src = prev.fetchFromGitHub {
                        owner = "LukashonakV";
                        repo = "cava";
                        rev = version;
                        hash = "sha256-9eTDqM+O1tA/3bEfd1apm8LbEcR9CVgELTIspSVPMKM=";
                      };
                    };
                    # Derived from subprojects/catch2.wrap
                    catch2 = rec {
                      version = "3.7.0";
                      src = prev.fetchFromGitHub {
                        owner = "catchorg";
                        repo = "Catch2";
                        rev = "v${version}";
                        hash = "sha256-U9hv6DaqN5eCMcAQdfFPqWpsbqDFxRQixELSGbNlc0g=";
                      };
                    };
                  in
                  ''
                    (
                      cd "$sourceRoot"
                      cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava-${libcava.version}
                      cp -R --no-preserve=mode,ownership ${catch2.src} subprojects/Catch2-${catch2.version}
                      patchShebangs .
                    )
                  '';
              };
            }
            {
              attrName = "gtk-layer-shell";
              extra.nativeBuildInputs = [ prev.vala ];
              replace.patches = [ ];
            }
            {
              attrName = "sway-unwrapped";
              extra.buildInputs = [ prev.xorg.xcbutilwm ];
              replaceInput = {
                wlroots = final.wlroots;
                wayland-protocols = final.new-wayland-protocols;
              };
              replace = previousAttrs: {
                mesonFlags = lib.remove "-Dxwayland=disabled" (
                  lib.remove "-Dxwayland=enabled" prev.sway-unwrapped.mesonFlags
                );
                patches =
                  let
                    patchesToRemove = [
                      (prev.fetchpatch {
                        name = "libinput-1.27-p1.patch";
                        url = "https://github.com/swaywm/sway/commit/bbadf9b8b10d171a6d5196da7716ea50ee7a6062.patch";
                        hash = "sha256-lA+oL1vqGQOm7K+AthzHYBzmOALrDgxzX/5Dx7naq84=";
                      })
                      (prev.fetchpatch {
                        name = "libinput-1.27-p2.patch";
                        url = "https://github.com/swaywm/sway/commit/e2409aa49611bee1e1b99033461bfab0a7550c48.patch";
                        hash = "sha256-l598qfq+rpKy3/0arQruwd+BsELx85XDjwIDkb/o6og=";
                      })
                    ];
                  in
                  (lib.filter (
                    patch: !(lib.any (rmpatch: rmpatch != patch) patchesToRemove)
                  ) previousAttrs.patches);

              };
            }
            {
              attrName = "cage";
              extra.buildInputs = [ prev.xorg.xcbutilwm ];
              replaceInput = {
                wlroots_0_18 = prev.wlroots_0_19;
              };
              # _FORTIFY_SOURCE requires compiling with optimization (-O)
              # PR https://github.com/NixOS/nixpkgs/pull/232917 added -O0
              replace.CFLAGS = "";
              # https://github.com/cage-kiosk/cage/commit/d3fb99d6654325ec46277cfdb589f89316bed701
              replace.mesonFlags = lib.remove "-Dxwayland=true" (
                lib.remove "-Dxwayland=false" prev.cage.mesonFlags
              );
            }
            {
              attrName = "wob";
              extra.buildInputs = [
                prev.pixman
                prev.cmocka
              ];
            }
            {
              attrName = "libvncserver_master";
              nixpkgsAttrName = "libvncserver";
              # The version in nixpkgs has different paths so the patch is updated here.
              replace.patches = [ ./pkgs/libvncserver_master/pkgconfig.patch ];
            }
            {
              attrName = "wayvnc";
              nixpkgsAttrName = "wayvnc";
              extra.buildInputs = [ prev.jansson ];
            }
            {
              attrName = "eww";
              nixpkgsAttrName = "eww";
              extra.buildInputs = [
                prev.libdbusmenu
                prev.libdbusmenu-gtk3
              ];
              # patch was applied upstream
              replace.cargoPatches = [ ];
              # cargoPatches is addded to patches
              replace.patches = [ ];
            }
            {
              attrName = "wf-recorder";
              replace.patches = [];
              extra.buildInputs = [
                prev.mesa
                prev.pipewire
              ];
            }
            {
              attrName = "xdg-desktop-portal-wlr";
              nixpkgsAttrName = "xdg-desktop-portal-wlr";
              replace.patches = [ ];
            }
            {
              attrName = "new-wayland-protocols";
              nixpkgsAttrName = "wayland-protocols";
            }
            # {
            #   attrName = "wl-screenrec";
            #   # soon in nixpkgs
            #   extra.buildInputs = [ prev.libdrm ];
            #   replace.doCheck = false;
            # }
            {
              attrName = "wbg";
              extra.buildInputs = [
                prev.libjxl
                prev.pixman
              ];
            }
            {
              attrName = "dunst";
              # remove once nixpkgs is above 1.11.1
              replace = previousAttrs: {
                postInstall =
                  builtins.replaceStrings
                    [
                      ''
                        substituteInPlace $out/share/zsh/site-functions/_dunstctl $out/share/fish/vendor_completions.d/{dunstctl,dunstify} \
                          --replace-fail "jq" "${lib.getExe prev.jq}"
                      ''
                    ]
                    [
                      ''
                        substituteInPlace $out/share/zsh/site-functions/_dunstctl $out/share/fish/vendor_completions.d/{dunstctl,dunstify}.fish \
                          --replace-fail "jq" "${lib.getExe prev.jq}"
                      ''
                    ]
                    previousAttrs.postInstall;
              };
            }
            {
              attrName = "neatvnc";
              replace.patches = [];
              replaceInput = {
                ffmpeg = prev.ffmpeg_7;
              };
            }
            {
              attrName = "waypipe";
              extra = {
                depsBuildBuild = [ prev.pkg-config ];
                nativeBuildInputs = [ prev.pkg-config prev.wayland-scanner ];
                buildInputs = [ prev.wayland ];
              };
            }
          ];

          # these do not need changes from the package that nixpkgs has
          attrsNoExtraChangesNeeded = lib.attrValues (
            lib.genAttrs
              [
                "gebaar-libinput"
                "glpaper"
                "imv"
                "mako"
                "slurp"
                "swaybg"
                "swayidle"
                "swaylock-effects"
                "wl-clipboard"
                "wlogout"
                "wlr-randr"
                "wofi"
                "wtype"
                "wshowkeys"
                "aml"
                "wdisplays"
                "kanshi"
                "wev"
                "lavalauncher"
                "wlsunset"
                "rootbar"
                "sirula"
                "swww"
                "wlay"
                "i3status-rust"
                "shotman"
              ]
              (s: {
                attrName = s;
              })
          );

          waylandPkgs = genPackagesGH // rec {
            # wlroots-related
            salut = prev.callPackage ./pkgs/salut { };
            wlvncc = prev.callPackage ./pkgs/wlvncc { libvncserver = final.libvncserver_master; };
            obs-wlrobs = template {
              nixpkgsAttrName = "obs-studio-plugins.wlrobs";
              attrName = "obs-wlrobs";
            };
            # the above should actually be, but there's eval error and doing
            # 'nix build -f packages.nix' would build all packages in obs-studio-plugins
            # obs-studio-plugins = prev.obs-studio-plugins // {
            #   wlrobs = template {
            #     nixpkgsAttrName = "obs-studio-plugins.wlrobs";
            #     attrName = "wlrobs";
            #   };
            # };
            wldash = prev.callPackage ./pkgs/wldash { };
            wlroots = prev.callPackage ./pkgs/wlroots {
              wlroots = prev.wlroots_0_18;
              wayland-protocols = final.new-wayland-protocols;
            };

            wl-gammarelay-rs = prev.callPackage ./pkgs/wl-gammarelay-rs { };

            freerdp3 = prev.callPackage ./pkgs/freerdp3 {
              inherit (prev.darwin.apple_sdk.frameworks)
                AudioToolbox
                AVFoundation
                Carbon
                Cocoa
                CoreMedia
                ;
              inherit (prev.gst_all_1) gstreamer gst-plugins-base gst-plugins-good;
            };

            # misc
            foot = prev.callPackage ./pkgs/foot { inherit foot; };
          };
        in
        waylandPkgs // { inherit waylandPkgs; };
    in
    lib.flake-utils.eachSystem
      [
        "aarch64-linux"
        "x86_64-linux"
        "riscv64-linux"
      ]
      (
        system:
        let
          pkgsFor =
            pkgs: overlays:
            import pkgs {
              inherit system overlays;
              config.allowUnfree = true;
              config.allowAliases = false;
            };
          pkgs_ = lib.genAttrs (builtins.attrNames inputs) (inp: pkgsFor inputs."${inp}" [ ]);
          opkgs_ = overlays: lib.genAttrs (builtins.attrNames inputs) (inp: pkgsFor inputs."${inp}" overlays);
          waypkgs = (opkgs_ [ self.overlays.default ]).nixpkgs;
        in
        rec {
          devShells.default = pkgs_.nixpkgs.mkShell {
            nativeBuildInputs = with pkgs_.nixpkgs; [
              nix
              nushell
              cachix
              cacert
              git
              mercurial
              ripgrep
              sd
            ];
          };

          formatter = pkgs_.nixpkgs.nixfmt;

          bundle = pkgs_.nixpkgs.symlinkJoin {
            name = "nixpkgs-wayland-bundle";
            paths = builtins.attrValues (
              lib.filterAttrs (_: v: lib.meta.availableOn pkgs_.nixpkgs.stdenv.hostPlatform v) waypkgs.waylandPkgs
            );
          };

          packages = waypkgs.waylandPkgs // {
            default = bundle;
          };
        }
      )
    // {
      # overlays have to be outside of eachSystem block
      overlay = waylandOverlay;

      overlays.default = waylandOverlay;
    };
}


================================================
FILE: main.nu
================================================
#!/usr/bin/env nu

let system = "x86_64-linux";
let forceCheck = false; # use for development to re-update all pkgs

$env.CACHIX_CACHE = (
  if "CACHIX_CACHE" in $env { $env.CACHIX_CACHE }
  else "nixpkgs-wayland"
)

$env.CACHIX_SIGNING_KEY = (
  if "CACHIX_SIGNING_KEY_NIXPKGS_WAYLAND" in $env { $env.CACHIX_SIGNING_KEY_NIXPKGS_WAYLAND }
  else "null"
)

def getBadHash [ attrName: string ] {
  let val = ((do -i { ^nix build --no-link $attrName }| complete)
      | get stderr
      | split row "\n"
      | where ($it | str contains "got:")
      | str replace --regex '\s+got:(.*)(sha256-.*)' '$2'
      | get 0
  )
  $val
}

def replaceHash [ packageName: string, position: string, hashName: string, oldHash: string ] {
  let fakeSha256 = "0000000000000000000000000000000000000000000000000000";

  do -c { ^sd -s $"($oldHash)" $"($fakeSha256)" $"($position)" }
  let newHash = (getBadHash $".#($packageName)")
  do -c { ^sd -s $"($fakeSha256)" $"($newHash)" $"($position)" }

  print -e {packageName: $packageName, hashName: $hashName, oldHash: $oldHash, newHash: $newHash}
}

def updatePkg [packageName: string] {
  let position = $"pkgs/($packageName)/metadata.nix"
  let verinfo = (^nix eval --json -f $position | str trim | from json)

  let skip = (("skip" in ($verinfo | transpose | get column0)) and $verinfo.skip)
  if $skip {
    print -e $"(ansi light_yellow) update ($packageName) - (ansi light_cyan_underline)skipped(ansi reset)"
  } else {
    # Try update rev
    let newrev = (
      if ("repo_git" in ($verinfo | transpose | get column0)) {
        (do -c {
          ^git ls-remote $verinfo.repo_git $"refs/heads/($verinfo.branch)"
        } | complete | get stdout | str trim | str replace --regex '(\s+)(.*)$' "")
      } else if ( "repo_hg" in ($verinfo | transpose | get column0) ) {
        (do -c {
          ^hg identify $verinfo.repo_hg -r $verinfo.branch
        } | complete | get stdout | str trim)
      } else {
        error make { msg: "unknown repo type" }
      }
    )

    let shouldUpdate = (if ($forceCheck) {
      print -e $"(ansi light_yellow) update ($packageName) - (ansi light_yellow_underline)forced(ansi reset)"
      true
    } else if ($newrev != $verinfo.rev) {
      print -e $"(ansi light_yellow) update ($packageName) - (ansi light_yellow_underline)update to ($newrev)(ansi reset)"
      true
    } else {
      print -e $"(ansi dark_gray) update ($packageName) - noop(ansi reset)"
      false
    })

    if ($shouldUpdate) {
      do -c { ^sd -s $"($verinfo.rev)" $"($newrev)" $"($position)" }
      print -e {packageName: $packageName, oldrev: $verinfo.rev, newrev: $newrev}

      replaceHash $packageName $position "sha256" $verinfo.sha256
      if "vendorSha256" in ($verinfo | transpose | get column0) {
        replaceHash $packageName $position "vendorSha256" $verinfo.vendorSha256
      }

      do -c {
        ^git commit $position -m $"auto-update: ($packageName): ($verinfo.rev) => ($newrev)"
      } | complete
    }

    null
  } # end !skip
}

def updatePkgs [] {
  let pkgs = (^nix eval --json $".#packages.($system)" --apply 'x: builtins.attrNames x' | str trim | from json)
  let pkgs = ($pkgs | where ($it != "default"))
  for pkg in $pkgs {
    updatePkg $pkg
  }
}

def "main rereadme" [] {
  let color = "yellow"
  let packageNames = (nix eval --json $".#packages.($system)" --apply 'x: builtins.attrNames x' | str trim | from json)
  let pkgList = ($packageNames | where ($it != "default"))
  let delimStart = "<!--pkgs-start-->"
  let delimEnd = "<!--pkgs-end-->"
  let pkgrows = ($pkgList | each { |packageName|
    let meta = (do -c {
      nix eval --json $".#packages.($system).($packageName).meta" | str trim | from json
    })
    let home = (if "homepage" in ($meta | transpose | get column0) {
      $meta.homepage
    } else { "__missing__" })
    ($"| [($packageName)]\(($home)\) | ($meta.description) |")
  })
  let rows = [
    $delimStart
    "| Package | Description |"
    "| --- | --- |"
    $pkgrows
    $delimEnd
  ]
  let tableText = ($rows | flatten | str join "\n")

  let regexString = ([ '(?s)(.*)' $delimStart '(.*)' $delimEnd '(.*)' ] | str join '')
  let replaceText = $"\$1($tableText)\$3"
  ^rg --multiline $regexString "README.md" --replace $replaceText | save --raw README2.md
  mv -f README2.md README.md

  do -i { ^git commit -m "auto-update: updated readme" "./README.md" }
}

def flakeAdvance [] {
  ^nix flake update --recreate-lock-file --commit-lock-file
}

def gitPush [] {
  print -e ":: git push origin HEAD"
  ^git push origin HEAD
}

def "main build" [--cache] {
  print -e ":: nix build bundle (cachix)"
  rm -rf result*
  ^nix build --keep-going '.#bundle.x86_64-linux'
  if $cache {
    ^ls -d result* | ^tee "/dev/stderr" | cachix push $"($env.CACHIX_CACHE)"
  }

  rm -rf result*
  print -e ":: nix build devshell-inputDrv (cachix)"
  ^nix build --keep-going $".#devShells.($system).default.inputDerivation"
  if $cache {
    ^ls -d result* | ^tee "/dev/stderr" | cachix push $"($env.CACHIX_CACHE)"
  }
}

def "main advance" [] {
  flakeAdvance
  main build
  gitPush
}

def "main update" [packageName?: string] {
  print -e ":: update"
  if $packageName == null {
    flakeAdvance
    updatePkgs
    main build --cache=true
    main rereadme
    gitPush
  } else {
    updatePkg $packageName
  }
}

def "main check" [packageName?: string] {
  print -e ":: ci checks"
  main build --cache=false
  main rereadme
}

def main [] {
  print -e "commands: [advance, update, build]"
}


================================================
FILE: overlay.nix
================================================
# This file provides backward compatibility to nix < 2.4 clients
let
  lock = builtins.fromJSON (builtins.readFile ./flake.lock);

  inherit (lock.nodes.flake-compat.locked)
    owner
    repo
    rev
    narHash
    ;

  flake-compat = fetchTarball {
    url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";
    sha256 = narHash;
  };

  flake = import flake-compat { src = ./.; };
in
flake.defaultNix.overlays.default


================================================
FILE: packages.nix
================================================
# This file provides backward compatibility to nix < 2.4 clients
{
  system ? builtins.currentSystem,
}:
let
  lock = builtins.fromJSON (builtins.readFile ./flake.lock);

  inherit (lock.nodes.flake-compat.locked)
    owner
    repo
    rev
    narHash
    ;

  flake-compat = fetchTarball {
    url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";
    sha256 = narHash;
  };

  flake = import flake-compat {
    inherit system;
    src = ./.;
  };
in
flake.defaultNix.packages.${builtins.currentSystem}


================================================
FILE: pkgs/aml/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "any1";
  repo = "aml";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "685035c9830aa89df02a43df89b644690bd885f5";
  sha256 = "sha256-10gm6YphZrpLShj3NUj/AG24dSVLZAZbbnXr7GiF4DI=";
}


================================================
FILE: pkgs/cage/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "Hjdskes";
  repo = "cage";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "2e593fe5a8a2186a558ceb414674775e4ba5d2b1";
  sha256 = "sha256-AgBlauOEQvLr4+LMoLRa8rcS4GDtwOFd9flBHyLUhxE=";
}


================================================
FILE: pkgs/drm_info/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "ascent12";
  repo = "drm_info";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "e9cabcd98038e4e97e4b10d20be81df0f153d793";
  sha256 = "sha256-RxT+i/syPdiOjQexY4sFKUCs10RK12AfYK8CW1woMy0=";
}


================================================
FILE: pkgs/dunst/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "dunst-project";
  repo = "dunst";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "ee63a720acad34f62567a1ae6a8e7b0636e56a50";
  sha256 = "sha256-tktbQHEl9YmuaeF+dbz8GWnjYBGwcbvrCCx03fXtZNI=";
}


================================================
FILE: pkgs/eww/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "elkowar";
  repo = "eww";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "fddb4a09b107237819e661151e007b99b5cab36d";
  sha256 = "sha256-PJW4LvW9FmkG9HyUtgXOq7MDjYtBc/iJuOxyf29nD0Y=";
}


================================================
FILE: pkgs/foot/default.nix
================================================
{
  stdenv,
  lib,
  fetchFromGitea,
  fetchurl,
  runCommand,
  fcft,
  freetype,
  pixman,
  libxkbcommon,
  fontconfig,
  wayland,
  meson,
  ninja,
  ncurses,
  scdoc,
  tllist,
  wayland-protocols,
  wayland-scanner,
  pkg-config,
  utf8proc,
  allowPgo ? !stdenv.hostPlatform.isMusl,
  python3, # for PGO
  # for clang stdenv check
  foot,
  llvmPackages,
}:

let
  metadata = import ./metadata.nix;

  pname = "foot";
  version = metadata.rev;
  src = fetchFromGitea {
    domain = "codeberg.org";
    owner = "dnkl";
    repo = pname;
    rev = version;
    inherit (metadata) sha256;
  };

  # build stimuli file for PGO build and the script to generate it
  # independently of the foot's build, so we can cache the result
  # and avoid unnecessary rebuilds as it can take relatively long
  # to generate
  #
  # For every bump, make sure that the hash is still accurate.
  stimulusGenerator = stdenv.mkDerivation {
    name = "foot-generate-alt-random-writes";

    src = "${src}/scripts/generate-alt-random-writes.py";

    dontUnpack = true;

    buildInputs = [ python3 ];

    installPhase = ''
      install -Dm755 $src $out
    '';
  };

  stimuliFile = runCommand "pgo-stimulus-file" { } ''
    ${stimulusGenerator} \
      --rows=67 --cols=135 \
      --scroll --scroll-region \
      --colors-regular --colors-bright --colors-256 --colors-rgb \
      --attr-bold --attr-italic --attr-underline \
      --sixel \
      --seed=2305843009213693951 \
      $out
  '';

  compilerName =
    if stdenv.cc.isClang then
      "clang"
    else if stdenv.cc.isGNU then
      "gcc"
    else
      "unknown";

  # https://codeberg.org/dnkl/foot/src/branch/master/INSTALL.md#performance-optimized-pgo
  pgoCflags =
    {
      "clang" = "-O3 -Wno-ignored-optimization-argument";
      "gcc" = "-O3";
    }
    ."${compilerName}";

  # ar with lto support
  ar =
    stdenv.cc.bintools.targetPrefix
    + {
      "clang" = "llvm-ar";
      "gcc" = "gcc-ar";
      "unknown" = "ar";
    }
    ."${compilerName}";

  # PGO only makes sense if we are not cross compiling and
  # using a compiler which foot's PGO build supports (clang or gcc)
  doPgo = allowPgo && (stdenv.hostPlatform == stdenv.buildPlatform) && compilerName != "unknown";

  terminfoDir = "${placeholder "terminfo"}/share/terminfo";
in
stdenv.mkDerivation {
  inherit version pname src;

  separateDebugInfo = true;

  depsBuildBuild = [
    pkg-config
  ];

  nativeBuildInputs =
    [
      wayland-scanner
      meson
      ninja
      ncurses
      scdoc
      pkg-config
    ]
    ++ lib.optionals (compilerName == "clang") [
      stdenv.cc.cc.libllvm.out
    ];

  buildInputs = [
    tllist
    wayland-protocols
    fontconfig
    freetype
    pixman
    wayland
    libxkbcommon
    fcft
    utf8proc
  ];

  # recommended build flags for performance optimized foot builds
  # https://codeberg.org/dnkl/foot/src/branch/master/INSTALL.md#release-build
  CFLAGS = if !doPgo then "-O3" else pgoCflags;

  # ar with gcc plugins for lto objects
  preConfigure = ''
    export AR="${ar}"
  '';

  mesonBuildType = "release";

  # See https://codeberg.org/dnkl/foot/src/tag/1.9.2/INSTALL.md#options
  mesonFlags = [
    # Use lto
    "-Db_lto=true"
    # “Build” and install terminfo db
    "-Dterminfo=enabled"
    # Ensure TERM=foot is used
    "-Ddefault-terminfo=foot"
    # Tell foot to set TERMINFO and where to install the terminfo files
    "-Dcustom-terminfo-install-location=${terminfoDir}"
    # Install systemd user units for foot-server
    "-Dsystemd-units-dir=${placeholder "out"}/lib/systemd/user"
    # Especially -Wunused-command-line-argument is a problem with clang
    "-Dwerror=false"
  ];

  # build and run binary generating PGO profiles,
  # then reconfigure to build the normal foot binary utilizing PGO
  preBuild =
    lib.optionalString doPgo ''
      meson configure -Db_pgo=generate
      ninja
      # make sure there is _some_ profiling data on all binaries
      meson test
      ./footclient --version
      ./foot --version
      ./utils/xtgettcap
      # generate pgo data of wayland independent code
      ./pgo ${stimuliFile} ${stimuliFile} ${stimuliFile}
      meson configure -Db_pgo=use
    ''
    + lib.optionalString (doPgo && compilerName == "clang") ''
      llvm-profdata merge default_*profraw --output=default.profdata
    '';

  # Install example themes which can be added to foot.ini via the include
  # directive to a separate output to save a bit of space
  postInstall = ''
    moveToOutput share/foot/themes "$themes"
  '';

  doCheck = true;

  strictDeps = true;

  outputs = [
    "out"
    "terminfo"
    "themes"
  ];

  passthru.tests = {
    clang-default-compilation = foot.override {
      inherit (llvmPackages) stdenv;
    };

    noPgo = foot.override {
      allowPgo = false;
    };

    # By changing name, this will get rebuilt everytime we change version,
    # even if the hash stays the same. Consequently it'll fail if we introduce
    # a hash mismatch when updating.
    stimulus-script-is-current = stimulusGenerator.src.overrideAttrs (_: {
      name = "generate-alt-random-writes-${version}.py";
    });
  };

  meta = with lib; {
    homepage = "https://codeberg.org/dnkl/foot/";
    changelog = "https://codeberg.org/dnkl/foot/releases/tag/${version}";
    description = "Fast, lightweight and minimalistic Wayland terminal emulator";
    license = licenses.mit;
    maintainers = [
      maintainers.sternenseemann
      maintainers.abbe
    ];
    platforms = platforms.linux;
    mainProgram = "foot";
  };
}


================================================
FILE: pkgs/foot/metadata.nix
================================================
rec {
  type = "gitea";
  domain = "codeberg.org";
  owner = "dnkl";
  repo = "foot";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "72d9a13c0c6b6ee4b56a38f508c2e8d5c56616b5";
  sha256 = "sha256-cUUoAVBtlhnZJWfuCYqHjjYKIpKf9JBHcE5YCi5WscI=";
}


================================================
FILE: pkgs/freerdp3/default.nix
================================================
{
  stdenv,
  lib,
  fetchFromGitHub,
  cmake,
  docbook-xsl-nons,
  libxslt,
  pkg-config,
  alsa-lib,
  faac,
  faad2,
  ffmpeg,
  glib,
  openh264,
  openssl,
  pcre2,
  zlib,
  libX11,
  libXcursor,
  libXdamage,
  libXdmcp,
  libXext,
  libXi,
  libXinerama,
  libXrandr,
  libXrender,
  libXtst,
  libXv,
  libxkbcommon,
  libxkbfile,
  libv4l,
  wayland,
  wayland-scanner,
  gstreamer,
  gst-plugins-base,
  gst-plugins-good,
  libunwind,
  orc,
  cairo,
  libusb1,
  libpulseaudio,
  cups,
  pcsclite,
  systemd,
  libjpeg_turbo,
  icu,
  SDL2,
  SDL2_ttf,
  krb5,
  cjson,
  pkcs11helper,
  webkitgtk_4_1,
  buildServer ? true,
  nocaps ? false,
  AudioToolbox,
  AVFoundation,
  Carbon,
  Cocoa,
  CoreMedia,
  fuse3,
  withUnfree ? false,
}:

let
  metadata = import ./metadata.nix;
  cmFlag = flag: if flag then "ON" else "OFF";
  disabledTests = lib.optionals stdenv.isDarwin [
    {
      dir = "winpr/libwinpr/sysinfo/test";
      file = "TestGetComputerName.c";
    }
  ];

  inherit (lib) optionals;
in
stdenv.mkDerivation rec {
  pname = "freerdp";
  version = metadata.rev;

  src = fetchFromGitHub {
    owner = "FreeRDP";
    repo = "FreeRDP";
    inherit (metadata) rev sha256;
  };

  postPatch =
    ''
      export HOME=$TMP

      # skip NIB file generation on darwin
      sed -z 's/NIB file generation.*//' -i client/Mac{,/cli}/CMakeLists.txt

      # failing test(s)
      ${lib.concatMapStringsSep "\n" (e: ''
        substituteInPlace ${e.dir}/CMakeLists.txt \
          --replace ${e.file} ""
        rm ${e.dir}/${e.file}
      '') disabledTests}

      substituteInPlace "libfreerdp/freerdp.pc.in" \
        --replace "Requires:" "Requires: @WINPR_PKG_CONFIG_FILENAME@"
    ''
    + lib.optionalString (pcsclite != null) ''
      substituteInPlace "winpr/libwinpr/smartcard/smartcard_pcsc.c" \
        --replace "libpcsclite.so" "${lib.getLib pcsclite}/lib/libpcsclite.so"
    ''
    + lib.optionalString nocaps ''
      substituteInPlace "libfreerdp/locale/keyboard_xkbfile.c" \
        --replace "RDP_SCANCODE_CAPSLOCK" "RDP_SCANCODE_LCONTROL"
    '';

  buildInputs =
    [
      cairo
      cups
      faad2
      ffmpeg
      fuse3
      glib
      gst-plugins-base
      gst-plugins-good
      gstreamer
      icu
      libX11
      libXcursor
      libXdamage
      libXdmcp
      libXext
      libXi
      libXinerama
      libXrandr
      libXrender
      libXtst
      libXv
      libjpeg_turbo
      libpulseaudio
      libunwind
      libusb1
      libxkbcommon
      libxkbfile
      openh264
      openssl
      orc
      pcre2
      pcsclite
      zlib
      SDL2
      SDL2_ttf
      krb5
      cjson
      pkcs11helper
      webkitgtk_4_1
    ]
    ++ optionals stdenv.isLinux [
      alsa-lib
      libv4l
      systemd
      wayland
    ]
    ++ optionals stdenv.isDarwin [
      AudioToolbox
      AVFoundation
      Carbon
      Cocoa
      CoreMedia
    ]
    ++ optionals withUnfree [ faac ];

  nativeBuildInputs = [
    cmake
    libxslt
    docbook-xsl-nons
    pkg-config
  ] ++ optionals stdenv.isLinux [
    wayland-scanner
  ];

  doCheck = true;

  # https://github.com/FreeRDP/FreeRDP/issues/8526#issuecomment-1357134746
  cmakeFlags =
    [
      "-Wno-dev"
      "-DCMAKE_INSTALL_LIBDIR=lib"
      "-DDOCBOOKXSL_DIR=${docbook-xsl-nons}/xml/xsl/docbook"
    ]
    ++ lib.mapAttrsToList (k: v: "-D${k}=${cmFlag v}") {
      BUILD_TESTING = false; # false is recommended by upstream
      WITH_CAIRO = cairo != null;
      WITH_CUPS = cups != null;
      WITH_FAAC = withUnfree && faac != null;
      WITH_FAAD2 = faad2 != null;
      WITH_JPEG = libjpeg_turbo != null;
      WITH_OPENH264 = openh264 != null;
      WITH_OSS = false;
      WITH_PCSC = pcsclite != null;
      WITH_PULSE = libpulseaudio != null;
      WITH_SERVER = buildServer;
      WITH_VAAPI = false; # false is recommended by upstream
      WITH_X11 = true;
    };

  env = {
    NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-DTARGET_OS_IPHONE=0 -DTARGET_OS_WATCH=0 -include AudioToolbox/AudioToolbox.h";

    NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AudioToolbox";
  };

  meta = with lib; {
    description = "A Remote Desktop Protocol Client";
    longDescription = ''
      FreeRDP is a client-side implementation of the Remote Desktop Protocol (RDP)
      following the Microsoft Open Specifications.
    '';
    homepage = "https://www.freerdp.com/";
    license = licenses.asl20;
    maintainers = with maintainers; [ peterhoeg ];
    platforms = platforms.unix;
  };
}


================================================
FILE: pkgs/freerdp3/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "FreeRDP";
  repo = "FreeRDP";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "6111ac458c041e7d21d88910deb2f061317a743f";
  sha256 = "sha256-yOkJ1uT8CwnhsjAR2E9nD2F+FXFm3ZbZFVY4913rVI4=";
  # Can't find SDL2 started in https://github.com/FreeRDP/FreeRDP/pull/10996 probably
  skip = true;
}


================================================
FILE: pkgs/gebaar-libinput/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "Osleg";
  repo = "gebaar-libinput-fork";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "6ce14eb64a9f4bb8201bae26052521ae5e64f553";
  sha256 = "sha256-NwF9TOJ6SzJJBa7mrUOCLEhz2xf0it7rVuOzhqvDwt0=";
}


================================================
FILE: pkgs/glpaper/metadata.nix
================================================
rec {
  type = "hgsourcehut";
  domain = "hg.sr.ht";
  owner = "~scoopta";
  repo = "glpaper";
  repo_hg = "https://${domain}/${owner}/${repo}";
  branch = "default";
  rev = "af9827d20bfe";
  sha256 = "sha256-zgvnWqsw243jZ9e6fG6L0hDfRRHwzmIdsxwnnWhimu0=";
}


================================================
FILE: pkgs/grim/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "emersion";
  repo = "grim";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "47e2658619c6b5a790732c5876fb84e8273f08a9";
  sha256 = "sha256-X3NHAFe27hnjM6YQ5YsFJWkGYe+mRAFUjiR20R5tTAQ=";
}


================================================
FILE: pkgs/gtk-layer-shell/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "wmww";
  repo = "gtk-layer-shell";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "2a8ddaa09844ba78783c95d288300a1d8a93e429";
  sha256 = "sha256-+vJouQEauTe/dp2WdOJcc2Byv1+Hb0iaUgwBPnV9g48=";
}


================================================
FILE: pkgs/i3status-rust/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "greshake";
  repo = "i3status-rust";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "bb1a479bbb77cf6b390be87f948a3b4f756fa8c0";
  sha256 = "sha256-utEFjWCyCbp5Jw1+NP4abaCuEGGKXrjZhSWqdTaxYHI=";
}


================================================
FILE: pkgs/imv/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~exec64";
  repo = "imv";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "8f36d35ff6a844de7d338a4e9b34bc98f114014b";
  sha256 = "sha256-aJ2EXgsS0WUTxMqC1Q+uOWLG8BeuwAyXPmJB/9/NCCU=";
}


================================================
FILE: pkgs/kanshi/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~emersion";
  repo = "kanshi";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "00a653a9c5172a7fe97c4669f63703ac4a681007";
  sha256 = "sha256-14n7k3GWghRfqjA7BwRofkUeajo2XH0fWAaICSc7pAM=";
}


================================================
FILE: pkgs/lavalauncher/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~leon_plickat";
  repo = "lavalauncher";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "da17d8a29bfc6b78280242b8fdbcb1b6df4f8aff";
  sha256 = "sha256-hobhZ6s9m2xCdAurdj0EF1BeS88j96133zu+2jb1FMM=";
}


================================================
FILE: pkgs/libvncserver_master/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "LibVNC";
  repo = "libvncserver";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "4c15a85d448c33f08ddd3d713672c70ea507f5ee";
  sha256 = "sha256-YHe4DYlYNy1L7KzfvdVlLDxEi8we3UezEAaMSBfIhhc=";
}


================================================
FILE: pkgs/libvncserver_master/pkgconfig.patch
================================================
diff --git a/src/libvncclient/libvncclient.pc.cmakein b/src/libvncclient/libvncclient.pc.cmakein
index ceeda39d..2516e643 100644
--- a/src/libvncclient/libvncclient.pc.cmakein
+++ b/src/libvncclient/libvncclient.pc.cmakein
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
 exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
-includedir=@CMAKE_INSTALL_PREFIX@/include
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@

 Name: LibVNCClient
 Description: A library for easy implementation of a VNC client.
diff --git a/src/libvncserver/libvncserver.pc.cmakein b/src/libvncserver/libvncserver.pc.cmakein
index 33ec6685..57244742 100644
--- a/src/libvncserver/libvncserver.pc.cmakein
+++ b/src/libvncserver/libvncserver.pc.cmakein
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
 exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
-includedir=@CMAKE_INSTALL_PREFIX@/include
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@

 Name: LibVNCServer
 Description: A library for easy implementation of a VNC server.


================================================
FILE: pkgs/mako/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "emersion";
  repo = "mako";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "84637d1cb42def0ef74d6ec961e05c3900b4c23f";
  sha256 = "sha256-5Mv0P/SoUiJIiYvGm5wvNZhtz2ytwsqqRc3Pk3ju0WA=";
}


================================================
FILE: pkgs/neatvnc/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "any1";
  repo = "neatvnc";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "4962e0af5d550b2c4fd34c79dbdca543f233d87c";
  sha256 = "sha256-6xHasCH27useFWYPzDlUe0eaZ81WZu4JtftPb+ks+kk=";
}


================================================
FILE: pkgs/new-wayland-protocols/metadata.nix
================================================
rec {
  type = "gitlab";
  domain = "gitlab.freedesktop.org";
  owner = "wayland";
  repo = "wayland-protocols";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "main";
  rev = "6a73aacd7c04a1e40d64ce28d48fe10df550b6fb";
  sha256 = "sha256-ykzFUVSg8kCkhYwO8IBiwiCAURumU5bQqqjn2gHi1sA=";
}


================================================
FILE: pkgs/obs-wlrobs/metadata.nix
================================================
rec {
  type = "hgsourcehut";
  domain = "hg.sr.ht";
  owner = "~scoopta";
  repo = "wlrobs";
  repo_hg = "https://${domain}/${owner}/${repo}";
  branch = "default";
  rev = "b8668b4d6d6d";
  sha256 = "sha256-gqGnDrfID5hTcpX3EkSGg4yDwa/ZKCQCqJ3feq44I1I=";
}


================================================
FILE: pkgs/rootbar/metadata.nix
================================================
rec {
  type = "hgsourcehut";
  domain = "hg.sr.ht";
  owner = "~scoopta";
  repo = "rootbar";
  repo_hg = "https://${domain}/${owner}/${repo}";
  branch = "default";
  rev = "36333af9fd8d";
  sha256 = "sha256-CpORCSJyHZhcK14EhjxoPt/h0026NU5J/kicL1dX96o=";
}


================================================
FILE: pkgs/salut/default.nix
================================================
{
  lib,
  rustPlatform,
  fetchFromGitLab,
  pkg-config,
  libxkbcommon,
  fontconfig,
}:

let
  metadata = import ./metadata.nix;
in
rustPlatform.buildRustPackage rec {
  pname = "salut";
  version = metadata.rev;

  src = fetchFromGitLab {
    inherit (metadata)
      owner
      repo
      rev
      sha256
      ;
  };

  cargoLock = {
    lockFile = src + "/Cargo.lock";
    allowBuiltinFetchGit = true;
  };

  nativeBuildInputs = [ pkg-config ];

  buildInputs = [
    libxkbcommon
    fontconfig
  ];

  meta = with lib; {
    description = "A sleek notification daemon";
    homepage = "https://gitlab.com/snakedye/salut";
    license = licenses.mpl20;
  };
}


================================================
FILE: pkgs/salut/metadata.nix
================================================
rec {
  owner = "snakedye";
  repo = "salut";
  repo_git = "https://gitlab.com/${owner}/${repo}";
  branch = "master";
  rev = "aa57c4d190812908a9c32cd49cff14390c6dfdcb";
  sha256 = "sha256-W0lhhImSXtYJDeMbxyEioYu/Bh7ZclwR1/5DzNbxM8o=";
}


================================================
FILE: pkgs/shotman/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~whynothugo";
  repo = "shotman";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "main";
  rev = "da244d40ac8e60b37c77ecef4fde053cfbb6b82d";
  sha256 = "sha256-j9HNqRJnGiy720uS0zC6Tt1WjF4b6+XqPEMTqTEOD6w=";
}


================================================
FILE: pkgs/sirula/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "DorianRudolph";
  repo = "sirula";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "83efe28847060c30be311f6861e71bef6a407718";
  sha256 = "sha256-njXsPgagJwpuqYQ2QxmOQS5SWElouwh1pomf52dYeG4=";
}


================================================
FILE: pkgs/slurp/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "emersion";
  repo = "slurp";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "1de937788344c0c2beafd4a264fd8bfcf919bd93";
  sha256 = "sha256-ywQwXK+1B6/TknkRDhOR0rTtQcLn35JK27UM/Ez4aF0=";
}


================================================
FILE: pkgs/sway-unwrapped/metadata.nix
================================================
rec {
  upattr = "sway-unwrapped";
  domain = "github.com";
  owner = "swaywm";
  repo = "sway";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "340505bb6f6ad2418448445fa7e5d58f771c3b4d";
  sha256 = "sha256-AdggynGr51YRzrro1723JTASQJhtUY2hoZLhSLEUppE=";
}


================================================
FILE: pkgs/swaybg/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "swaywm";
  repo = "swaybg";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "1bf721fcb61a7c78cc618868640a3ab24c5a3077";
  sha256 = "sha256-AYZGM8EDQvpyv+vVHzihakltSWapSvnxio9yJcBWvRo=";
}


================================================
FILE: pkgs/swayidle/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "swaywm";
  repo = "swayidle";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "c5e0e1fd11677b7732c073e1709cf92be9184c04";
  sha256 = "sha256-CWp7YVG1qedSzZR3bO19Ppn1ojKpaB5xRYFw4rdAPUM=";
}


================================================
FILE: pkgs/swaylock/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "swaywm";
  repo = "swaylock";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "b0f417c488fd12b1ac9f7c3eea9b49d6221b761d";
  sha256 = "sha256-5JAA8mCY3vOsauvRK2zquBrzA2ROakEfahzp4a6j/Ac=";
}


================================================
FILE: pkgs/swaylock-effects/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "jirutka";
  repo = "swaylock-effects";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "496059a8565c2d5eed672c2e5bc5e1edd14b3de8";
  sha256 = "sha256-8RDaa7IvMpG3GK6wd0EPO+lLeQlr5ioVa5oyR9wct1U=";
}


================================================
FILE: pkgs/swww/metadata.nix
================================================
rec {
  owner = "Horus645";
  repo = "swww";
  repo_git = "https://github.com/${owner}/${repo}";
  branch = "main";
  rev = "63d71f2b8c6d1533b5fef748dfc490dd461e343c";
  sha256 = "sha256-KzuedC2yJU56sRBeMlndPuXK6UWHxSUtgAmJ/+Gww6I=";
}


================================================
FILE: pkgs/waybar/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "Alexays";
  repo = "Waybar";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "0776e694df56c2c849b682369148210d81324e93";
  sha256 = "sha256-rwN74KZdAQVLdengxHpUwkyaZTdoRzFjJ3SSr6rx2/o=";
}


================================================
FILE: pkgs/waypipe/metadata.nix
================================================
rec {
  type = "gitlab";
  domain = "gitlab.freedesktop.org";
  owner = "mstoeckl";
  repo = "waypipe";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "21639c783328e22faadeb1de8fab5b17b8d36abb";
  sha256 = "sha256-BlKhtnhJkvVHxwW9UNDK7eCda2Awp2+h2TEuTpSWHtA=";
}


================================================
FILE: pkgs/wayvnc/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "any1";
  repo = "wayvnc";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "1f7d299a318abd60af29c37b04175429f7a6c060";
  sha256 = "sha256-FC3JT6G+8exK3WT+EmweOf/vrwmARiMnBh3zEuT2ZJs=";
}


================================================
FILE: pkgs/wbg/metadata.nix
================================================
rec {
  type = "gitea";
  domain = "codeberg.org";
  owner = "dnkl";
  repo = "wbg";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "bc00df2244a0d8f88d4051f505ef9aebb51447ca";
  sha256 = "sha256-L+20795gILq4ClmKQFwBd2QJAJdH1sG2YXiTDMEVi7s=";
}


================================================
FILE: pkgs/wdisplays/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "artizirk";
  repo = "wdisplays";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "157b8c51e850dc5f6b490f56f35cb101a9054e4c";
  sha256 = "sha256-KabaW2BH4zAS0xWkzCM8YaAnP/hkZL7Wq3EARantRis=";
}


================================================
FILE: pkgs/wev/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~sircmpwn";
  repo = "wev";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "2a46014ec5e375139f91aed456d5f01065964f86";
  sha256 = "sha256-0ZA44dMDuVYfplfutOfI2EdPNakE9KnOuRfk+CEDCRk=";
}


================================================
FILE: pkgs/wf-recorder/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "ammen99";
  repo = "wf-recorder";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "664fc451caa7559a39c2cdd70ff02ea781e2d4b3";
  sha256 = "sha256-poQ8Fe5cjpuf2t9OMI05PmCcFlium+cCiJB55x9jHvs=";
}


================================================
FILE: pkgs/wl-clipboard/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "bugaevc";
  repo = "wl-clipboard";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "aaa927ee7f7d91bcc25a3b68f60d01005d3b0f7f";
  sha256 = "sha256-V8JAai4gZ1nzia4kmQVeBwidQ+Sx5A5on3SJGSevrUU=";
}


================================================
FILE: pkgs/wl-gammarelay-rs/default.nix
================================================
{
  lib,
  fetchFromGitHub,
  rustPlatform,
}:

let
  metadata = import ./metadata.nix;
in
rustPlatform.buildRustPackage rec {
  pname = "wl-gammarelay-rs";
  version = metadata.rev;

  src = fetchFromGitHub {
    inherit (metadata)
      owner
      repo
      rev
      sha256
      ;
  };

  cargoLock = {
    lockFile = src + "/Cargo.lock";
    allowBuiltinFetchGit = true;
  };

  meta = with lib; {
    description = "A simple program that provides DBus interface to control display temperature and brightness under wayland without flickering ";
    homepage = "https://github.com/MaxVerevkin/wl-gammarelay-rs";
    license = licenses.gpl3;
    maintainers = with maintainers; [ artturin ];
  };
}


================================================
FILE: pkgs/wl-gammarelay-rs/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "MaxVerevkin";
  repo = "wl-gammarelay-rs";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "main";
  rev = "1dde760b03a5afd4761af17d8c49b7058cbd800d";
  sha256 = "sha256-WdY90CUtphtUUFAh+daSQGmlWTn28Qc79A5yHTV3IOY=";
}


================================================
FILE: pkgs/wl-screenrec/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "russelltg";
  repo = "wl-screenrec";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "main";
  rev = "a3d0b5da69487441ce81ebfc3be8ba8d2255c714";
  sha256 = "sha256-DE0Olwc2hYuGjkA1p1kbEXxMmoWOH7PTrne6pm1z97s=";
}


================================================
FILE: pkgs/wlay/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "atx";
  repo = "wlay";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "ed316060ac3ac122c0d3d8918293e19dfe9a6c90";
  sha256 = "sha256-Lu+EyoDHiXK9QzD4jdwbllCOCl2aEU+uK6/KxC2AUGQ=";
}


================================================
FILE: pkgs/wldash/default.nix
================================================
{
  lib,
  rustPlatform,
  fetchFromGitHub,
  pkg-config,
  dbus,
  libpulseaudio,
  alsa-lib,
  libxkbcommon,
  wayland,
  fontconfig,
}:

let
  metadata = import ./metadata.nix;
  libraryPath = lib.makeLibraryPath [
    wayland
  ];
in
rustPlatform.buildRustPackage rec {
  pname = "wldash";
  version = metadata.rev;

  src = fetchFromGitHub {
    owner = "kennylevinsen";
    repo = "wldash";
    inherit (metadata) rev;
    inherit (metadata) sha256;
  };

  cargoLock = {
    lockFile = src + "/Cargo.lock";
    allowBuiltinFetchGit = true;
  };

  nativeBuildInputs = [ pkg-config ];

  buildInputs = [
    dbus
    libpulseaudio
    alsa-lib
    fontconfig
    libxkbcommon
  ];

  dontPatchELF = true;

  postInstall = ''
    patchelf --set-rpath ${libraryPath}:$(patchelf --print-rpath $out/bin/wldash) $out/bin/wldash
  '';

  meta = with lib; {
    description = "Wayland launcher/dashboard";
    homepage = "https://wldash.org";
    license = licenses.gpl3;
    maintainers = with maintainers; [ alexarice ];
    platforms = [
      "x86_64-linux"
      "i686-linux"
    ];
  };
}


================================================
FILE: pkgs/wldash/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "kennylevinsen";
  repo = "wldash";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "1156b3503a04780bbdcb6a781cce87281b8bf87d";
  sha256 = "sha256-1MKZByK2afNHvd2h4ISb2ON6O0XCegBJ+xX3C223PY0=";
}


================================================
FILE: pkgs/wlogout/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "ArtsyMacaw";
  repo = "wlogout";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "350fe88bd5fe818b386d503d766fe34b6ba0f87d";
  sha256 = "sha256-/JEuFRKvtXiQPWswbXzFuqivNifP8VVfSKJQWZNbDlw=";
}


================================================
FILE: pkgs/wlr-randr/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~emersion";
  repo = "wlr-randr";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "3eac217684b8d9da2f9d4ab1784d0227dd04aa4a";
  sha256 = "sha256-ncIUhePR/Njxti2OZU77umNgk60YVGhhOLETpHZgrcI=";
}


================================================
FILE: pkgs/wlroots/default.nix
================================================
args_@{
  lib,
  fetchFromGitLab,
  wlroots,
  libdisplay-info,
  hwdata,
  lcms2,
  ...
}:

let
  metadata = import ./metadata.nix;
  ignore = [
    "wlroots"
    "hwdata"
    "libdisplay-info"
    "lcms2"
  ];
  args = lib.filterAttrs (n: _v: (!builtins.elem n ignore)) args_;
in
(wlroots.override args).overrideAttrs (old: {
  version = "${metadata.rev}";
  buildInputs = old.buildInputs ++ [
    hwdata
    libdisplay-info
    lcms2
  ];
  src = fetchFromGitLab {
    inherit (metadata)
      domain
      owner
      repo
      rev
      sha256
      ;
  };
})


================================================
FILE: pkgs/wlroots/metadata.nix
================================================
rec {
  domain = "gitlab.freedesktop.org";
  owner = "wlroots";
  repo = "wlroots";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "12316417b033465114705430105785e72dfe345d";
  sha256 = "sha256-o0a0GBlKnDNZL/vAZN/a+QbZ8NWjD4F2bcQLAaPvkoY=";
}


================================================
FILE: pkgs/wlsunset/metadata.nix
================================================
rec {
  type = "gitsourcehut";
  domain = "git.sr.ht";
  owner = "~kennylevinsen";
  repo = "wlsunset";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "c056294f0f6022abec4eeab2fb7a1732f5a20f08";
  sha256 = "sha256-GhU27nmE6FEDhU1GT1xN6bB7MXePAVK8ZPFlEbHG8VQ=";
}


================================================
FILE: pkgs/wlvncc/default.nix
================================================
{
  stdenv,
  lib,
  fetchFromGitHub,
  pkg-config,
  meson,
  ninja,
  wayland,
  wayland-protocols,
  wayland-scanner,
  libxkbcommon,
  libvncserver,
  libpthreadstubs,
  lzo,
  pixman,
  libuv,
  libglvnd,
  libjpeg,
  libpng,
  neatvnc,
  libX11,
  libdrm,
  aml,
  libgbm,
  ffmpeg,
  openssl,
}:

let
  metadata = import ./metadata.nix;
in
stdenv.mkDerivation rec {
  pname = "wlvncc";
  version = metadata.rev;

  src = fetchFromGitHub {
    owner = "any1";
    repo = "wlvncc";
    inherit (metadata) rev;
    inherit (metadata) sha256;
  };

  nativeBuildInputs = [
    pkg-config
    wayland-scanner
    meson
    ninja
  ];
  buildInputs = [
    wayland
    wayland-protocols
    libxkbcommon
    libvncserver
    libpthreadstubs
    lzo
    pixman
    libuv
    libglvnd
    libjpeg
    libpng
    neatvnc
    libX11
    libdrm
    aml
    libgbm
    ffmpeg
    openssl
  ];

  enableParallelBuilding = true;

  meta = with lib; {
    description = "A Wayland Native VNC Client";
    homepage = "https://github.com/any1/wlvncc";
    license = licenses.isc;
    platforms = platforms.linux;
    maintainers = with maintainers; [ colemickens ];
  };
}


================================================
FILE: pkgs/wlvncc/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "any1";
  repo = "wlvncc";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "860232f34a77837915a94078efe8cd527fa582e3";
  sha256 = "sha256-4VaBvocqnDf58RlIgCYwSy1YKlnKmzGU9kTYsxd4y98=";
}


================================================
FILE: pkgs/wob/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "francma";
  repo = "wob";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "f7668d9715256a9d0dd05bc9eba7799d5ab2ce2d";
  sha256 = "sha256-tLz2A/RLHkA7iEfCLr22rVcTmnWLVp8BM58MuJ/NGEI=";
}


================================================
FILE: pkgs/wofi/metadata.nix
================================================
rec {
  type = "hgsourcehut";
  domain = "hg.sr.ht";
  owner = "~scoopta";
  repo = "wofi";
  repo_hg = "https://${domain}/${owner}/${repo}";
  branch = "default";
  rev = "ab9ba6305016";
  sha256 = "sha256-XNM1vbdQOcm3pC6wgbTJeBxUqtGGnEi4ljZ6AQEkQ6o=";
}


================================================
FILE: pkgs/wshowkeys/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "ammgws";
  repo = "wshowkeys";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "main";
  rev = "e8bfc78f08ebdd1316daae59ecc77e62bba68b2b";
  sha256 = "sha256-/HvNCQWsXOJZeCxHWmsLlbBDhBzF7XP/SPLdDiWMDC4=";
}


================================================
FILE: pkgs/wtype/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "atx";
  repo = "wtype";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "d71be3a7b3f93b534a2823fd68cabd7ac2a02359";
  sha256 = "sha256-TfpzAi0mkXugQn70MISyNFOXIJpDwvgh3enGv0Xq8S4=";
}


================================================
FILE: pkgs/xdg-desktop-portal-wlr/metadata.nix
================================================
rec {
  domain = "github.com";
  owner = "emersion";
  repo = "xdg-desktop-portal-wlr";
  repo_git = "https://${domain}/${owner}/${repo}";
  branch = "master";
  rev = "e471c3dfe5fe03921fd7109e6affe7740f9503c3";
  sha256 = "sha256-9T73obDmx4gsGo6KdaQHoBqOCig4/6TVJWhx7tOpym4=";
}


================================================
FILE: shell.nix
================================================
# This file provides backward compatibility to nix < 2.4 clients
{
  system ? builtins.currentSystem,
}:
let
  lock = builtins.fromJSON (builtins.readFile ./flake.lock);

  inherit (lock.nodes.flake-compat.locked)
    owner
    repo
    rev
    narHash
    ;

  flake-compat = fetchTarball {
    url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";
    sha256 = narHash;
  };

  flake = import flake-compat {
    inherit system;
    src = ./.;
  };
in
flake.shellNix


================================================
FILE: templates/template.nix
================================================
args_@{
  attrName,
  # the attr in nixpkgs could be different from what we want to provide
  # example: us libvncserver_master nixpkgs libvncserver
  nixpkgsAttrName,
  prev,
  extra,
  replace,
  replaceInput,
  deprecationWarning,
  ...
}:

let
  inherit (prev) lib;
  metadata = import ../pkgs/${attrName}/metadata.nix;
  ignore = [
    "attrName"
    "nixpkgsAttrName"
    "prev"
    "extra"
    "replace"
    "replaceInput"
    "deprecationWarning"
  ];
  args = builtins.removeAttrs (args_ // replaceInput) ignore;
  nixpkgsAttr = if nixpkgsAttrName != "" then nixpkgsAttrName else attrName;
  overridenAttr =
    (lib.attrByPath (lib.splitString "." nixpkgsAttr)
      (throw "attr ${attrName} does not exist in nixpkgs")
      prev
    ).override
      args;
  overridenAttr' = lib.warnIf (
    deprecationWarning != ""
  ) "nixpkgs-wayland: ${deprecationWarning}" overridenAttr;

  fetchers =
    let
      fetchSubmodules = metadata.fetchSubmodules or overridenAttr.src.fetchSubmodules or false;
    in
    {
      github = prev.fetchFromGitHub {
        inherit (metadata)
          owner
          repo
          rev
          sha256
          ;
        inherit fetchSubmodules;
      };
      gitlab = prev.fetchFromGitLab {
        inherit (metadata)
          owner
          repo
          rev
          sha256
          ;
        domain = metadata.domain or "gitlab.com";
        # uncomment after https://github.com/NixOS/nixpkgs/pull/198489
        #inherit fetchSubmodules;
      };
      gitea = prev.fetchFromGitea {
        inherit (metadata)
          owner
          repo
          rev
          sha256
          domain
          ;
        inherit fetchSubmodules;
      };
      gitsourcehut = prev.fetchFromSourcehut {
        inherit (metadata)
          owner
          repo
          rev
          sha256
          ;
        inherit fetchSubmodules;
      };
      hgsourcehut = prev.fetchFromSourcehut {
        inherit (metadata)
          owner
          repo
          rev
          sha256
          ;
        vc = "hg";
      };
    };

  src = fetchers.${metadata.type or "github"};

  cargoLock = {
    lockFile = src + "/Cargo.lock";
    allowBuiltinFetchGit = true;
  };

  replace' = previousAttrs: if builtins.isFunction replace then replace previousAttrs else replace;
in
overridenAttr'.overrideAttrs (
  previousAttrs:
  (
    {
      pname = attrName;
      version = "+${lib.substring 0 7 metadata.rev}";
      inherit src;
      # `--version` will be different than the version above
      dontVersionCheck = true;
    }
    // lib.optionalAttrs (src ? meta.homepage) {
      meta = previousAttrs.meta // {
        inherit (src.meta) homepage;
        # null changelog as it may use `finalAttrs.src.tag` while we use `rev`
        changelog = null;
      };
    }
    // lib.optionalAttrs (extra ? depsBuildBuild) {
      depsBuildBuild = extra.depsBuildBuild ++ previousAttrs.depsBuildBuild;
    }
    // lib.optionalAttrs (extra ? nativeBuildInputs) {
      nativeBuildInputs = extra.nativeBuildInputs ++ previousAttrs.nativeBuildInputs;
    }
    // lib.optionalAttrs (extra ? mesonFlags) {
      mesonFlags = previousAttrs.mesonFlags ++ extra.mesonFlags;
    }
    // lib.optionalAttrs (extra ? buildInputs) {
      buildInputs = extra.buildInputs ++ previousAttrs.buildInputs;
    }
    // lib.optionalAttrs (previousAttrs ? cargoDeps) {
      cargoDeps = prev.rustPlatform.importCargoLock cargoLock;
      cargoHash = null;
    }
    // replace' previousAttrs
  )
)
Download .txt
gitextract_knidfuyg/

├── .envrc
├── .git-blame-ignore-revs
├── .github/
│   ├── dependabot.yml
│   ├── init
│   └── workflows/
│       ├── advance.yaml
│       ├── build.yaml
│       ├── check.yaml
│       └── update.yaml
├── .gitignore
├── README.md
├── default.nix
├── demo/
│   ├── README.md
│   ├── configuration.nix
│   ├── flake.nix
│   ├── home/
│   │   ├── profile.nix
│   │   └── sway-config
│   ├── legacy/
│   │   └── default.nix
│   ├── profile.nix
│   ├── vm-build.sh
│   └── vm-run.sh
├── flake.nix
├── main.nu
├── overlay.nix
├── packages.nix
├── pkgs/
│   ├── aml/
│   │   └── metadata.nix
│   ├── cage/
│   │   └── metadata.nix
│   ├── drm_info/
│   │   └── metadata.nix
│   ├── dunst/
│   │   └── metadata.nix
│   ├── eww/
│   │   └── metadata.nix
│   ├── foot/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── freerdp3/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── gebaar-libinput/
│   │   └── metadata.nix
│   ├── glpaper/
│   │   └── metadata.nix
│   ├── grim/
│   │   └── metadata.nix
│   ├── gtk-layer-shell/
│   │   └── metadata.nix
│   ├── i3status-rust/
│   │   └── metadata.nix
│   ├── imv/
│   │   └── metadata.nix
│   ├── kanshi/
│   │   └── metadata.nix
│   ├── lavalauncher/
│   │   └── metadata.nix
│   ├── libvncserver_master/
│   │   ├── metadata.nix
│   │   └── pkgconfig.patch
│   ├── mako/
│   │   └── metadata.nix
│   ├── neatvnc/
│   │   └── metadata.nix
│   ├── new-wayland-protocols/
│   │   └── metadata.nix
│   ├── obs-wlrobs/
│   │   └── metadata.nix
│   ├── rootbar/
│   │   └── metadata.nix
│   ├── salut/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── shotman/
│   │   └── metadata.nix
│   ├── sirula/
│   │   └── metadata.nix
│   ├── slurp/
│   │   └── metadata.nix
│   ├── sway-unwrapped/
│   │   └── metadata.nix
│   ├── swaybg/
│   │   └── metadata.nix
│   ├── swayidle/
│   │   └── metadata.nix
│   ├── swaylock/
│   │   └── metadata.nix
│   ├── swaylock-effects/
│   │   └── metadata.nix
│   ├── swww/
│   │   └── metadata.nix
│   ├── waybar/
│   │   └── metadata.nix
│   ├── waypipe/
│   │   └── metadata.nix
│   ├── wayvnc/
│   │   └── metadata.nix
│   ├── wbg/
│   │   └── metadata.nix
│   ├── wdisplays/
│   │   └── metadata.nix
│   ├── wev/
│   │   └── metadata.nix
│   ├── wf-recorder/
│   │   └── metadata.nix
│   ├── wl-clipboard/
│   │   └── metadata.nix
│   ├── wl-gammarelay-rs/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wl-screenrec/
│   │   └── metadata.nix
│   ├── wlay/
│   │   └── metadata.nix
│   ├── wldash/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wlogout/
│   │   └── metadata.nix
│   ├── wlr-randr/
│   │   └── metadata.nix
│   ├── wlroots/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wlsunset/
│   │   └── metadata.nix
│   ├── wlvncc/
│   │   ├── default.nix
│   │   └── metadata.nix
│   ├── wob/
│   │   └── metadata.nix
│   ├── wofi/
│   │   └── metadata.nix
│   ├── wshowkeys/
│   │   └── metadata.nix
│   ├── wtype/
│   │   └── metadata.nix
│   └── xdg-desktop-portal-wlr/
│       └── metadata.nix
├── shell.nix
└── templates/
    └── template.nix
Condensed preview — 87 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (93K chars).
[
  {
    "path": ".envrc",
    "chars": 10,
    "preview": "use flake\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 74,
    "preview": "# format with `nixfmt-rfc-style`\n1030752c7fa96902b95212d522f7ea0fe7859b95\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 118,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/init",
    "chars": 166,
    "preview": "#!/usr/bin/env bash\nset -euo pipefail\n\ngit config --global user.name 'Cole Botkens'\ngit config --global user.email 'cole"
  },
  {
    "path": ".github/workflows/advance.yaml",
    "chars": 592,
    "preview": "name: \"Advance\"\nconcurrency: update-advance\non:\n  schedule:\n    - cron: '13 */6 * * *'\n  workflow_dispatch:\n  workflow_c"
  },
  {
    "path": ".github/workflows/build.yaml",
    "chars": 663,
    "preview": "name: \"Build\"\non:\n  push:\n    branches:\n    - master\n  schedule:\n    - cron: '17 */14 * * *'\n  workflow_dispatch:\n  work"
  },
  {
    "path": ".github/workflows/check.yaml",
    "chars": 626,
    "preview": "name: \"Check\"\non:\n  push:\n    branches:\n    - master\n  schedule:\n    - cron: '17 */14 * * *'\n  pull_request:\n  workflow_"
  },
  {
    "path": ".github/workflows/update.yaml",
    "chars": 589,
    "preview": "name: \"Update\"\nconcurrency: update-advance\non:\n  schedule:\n    - cron: '38 */12 * * *'\n  workflow_dispatch:\n  workflow_c"
  },
  {
    "path": ".gitignore",
    "chars": 51,
    "preview": ".ci/commit-message\n.direnv\n*.qcow2\nresult\nresult-*\n"
  },
  {
    "path": "README.md",
    "chars": 13060,
    "preview": "# nixpkgs-wayland\n\n[![Build](https://github.com/nix-community/nixpkgs-wayland/actions/workflows/build.yaml/badge.svg)](h"
  },
  {
    "path": "default.nix",
    "chars": 773,
    "preview": "# This file provides backward compatibility to nix < 2.4 clients\nlet\n  lock = builtins.fromJSON (builtins.readFile ./fla"
  },
  {
    "path": "demo/README.md",
    "chars": 81,
    "preview": "# Demo\n\nThis is a WIP demo\n\n## QEMU Demo\n\n    ./vm-build.sh && ./vm-run.sh\n    \n\n"
  },
  {
    "path": "demo/configuration.nix",
    "chars": 620,
    "preview": "{ ... }:\n{\n  imports = [ (import ./profile.nix { user = \"demo\"; }) ];\n\n  nix.settings.trusted-users = [\n    \"root\"\n    \""
  },
  {
    "path": "demo/flake.nix",
    "chars": 2461,
    "preview": "{\n  description = \"nixpkgs-wayland\";\n\n  inputs = {\n    nixpkgs = {\n      url = \"github:nixos/nixpkgs/nixos-unstable\";\n  "
  },
  {
    "path": "demo/home/profile.nix",
    "chars": 1060,
    "preview": "{ pkgs, ... }:\n{\n  home.packages =\n    with pkgs;\n    [\n      brightnessctl\n      dmenu\n      pavucontrol\n      playerct"
  },
  {
    "path": "demo/home/sway-config",
    "chars": 7155,
    "preview": "# Default config for sway\n#\n# Copy this to ~/.config/sway/config and edit it to your liking.\n#\n# Read `man 5 sway` for a"
  },
  {
    "path": "demo/legacy/default.nix",
    "chars": 563,
    "preview": "let\n  nixpkgs = builtins.fetchTarball {\n    url = \"https://github.com/nixos/nixpkgs/archive/master.tar.gz\";\n    sha256 ="
  },
  {
    "path": "demo/profile.nix",
    "chars": 1429,
    "preview": "{ user }:\n{ pkgs, inputs, ... }@args:\nlet\n  inherit (inputs) home-manager;\nin\n{\n  imports = [ \"${home-manager}/nixos\" ];"
  },
  {
    "path": "demo/vm-build.sh",
    "chars": 64,
    "preview": "#!/usr/bin/env bash\nnix build \".#packages.x86_64-linux.demo-vm\"\n"
  },
  {
    "path": "demo/vm-run.sh",
    "chars": 125,
    "preview": "#!/usr/bin/env bash\n\nif [[ ! -e ./result ]]; then\n  echo Run ./vm-build.sh first\n  exit 1\nfi\n\nexec ./result/bin/run-nixo"
  },
  {
    "path": "flake.nix",
    "chars": 13671,
    "preview": "{\n  description = \"nixpkgs-wayland\";\n\n  inputs = {\n    nixpkgs = {\n      url = \"github:nixos/nixpkgs/nixos-unstable\";\n  "
  },
  {
    "path": "main.nu",
    "chars": 5509,
    "preview": "#!/usr/bin/env nu\n\nlet system = \"x86_64-linux\";\nlet forceCheck = false; # use for development to re-update all pkgs\n\n$en"
  },
  {
    "path": "overlay.nix",
    "chars": 434,
    "preview": "# This file provides backward compatibility to nix < 2.4 clients\nlet\n  lock = builtins.fromJSON (builtins.readFile ./fla"
  },
  {
    "path": "packages.nix",
    "chars": 518,
    "preview": "# This file provides backward compatibility to nix < 2.4 clients\n{\n  system ? builtins.currentSystem,\n}:\nlet\n  lock = bu"
  },
  {
    "path": "pkgs/aml/metadata.nix",
    "chars": 257,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"any1\";\n  repo = \"aml\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n  br"
  },
  {
    "path": "pkgs/cage/metadata.nix",
    "chars": 261,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"Hjdskes\";\n  repo = \"cage\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n"
  },
  {
    "path": "pkgs/drm_info/metadata.nix",
    "chars": 266,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"ascent12\";\n  repo = \"drm_info\";\n  repo_git = \"https://${domain}/${owner}/${rep"
  },
  {
    "path": "pkgs/dunst/metadata.nix",
    "chars": 268,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"dunst-project\";\n  repo = \"dunst\";\n  repo_git = \"https://${domain}/${owner}/${r"
  },
  {
    "path": "pkgs/eww/metadata.nix",
    "chars": 260,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"elkowar\";\n  repo = \"eww\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n "
  },
  {
    "path": "pkgs/foot/default.nix",
    "chars": 5568,
    "preview": "{\n  stdenv,\n  lib,\n  fetchFromGitea,\n  fetchurl,\n  runCommand,\n  fcft,\n  freetype,\n  pixman,\n  libxkbcommon,\n  fontconfi"
  },
  {
    "path": "pkgs/foot/metadata.nix",
    "chars": 278,
    "preview": "rec {\n  type = \"gitea\";\n  domain = \"codeberg.org\";\n  owner = \"dnkl\";\n  repo = \"foot\";\n  repo_git = \"https://${domain}/${"
  },
  {
    "path": "pkgs/freerdp3/default.nix",
    "chars": 4546,
    "preview": "{\n  stdenv,\n  lib,\n  fetchFromGitHub,\n  cmake,\n  docbook-xsl-nons,\n  libxslt,\n  pkg-config,\n  alsa-lib,\n  faac,\n  faad2,"
  },
  {
    "path": "pkgs/freerdp3/metadata.nix",
    "chars": 365,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"FreeRDP\";\n  repo = \"FreeRDP\";\n  repo_git = \"https://${domain}/${owner}/${repo}"
  },
  {
    "path": "pkgs/gebaar-libinput/metadata.nix",
    "chars": 275,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"Osleg\";\n  repo = \"gebaar-libinput-fork\";\n  repo_git = \"https://${domain}/${own"
  },
  {
    "path": "pkgs/glpaper/metadata.nix",
    "chars": 259,
    "preview": "rec {\n  type = \"hgsourcehut\";\n  domain = \"hg.sr.ht\";\n  owner = \"~scoopta\";\n  repo = \"glpaper\";\n  repo_hg = \"https://${do"
  },
  {
    "path": "pkgs/grim/metadata.nix",
    "chars": 262,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"emersion\";\n  repo = \"grim\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";"
  },
  {
    "path": "pkgs/gtk-layer-shell/metadata.nix",
    "chars": 269,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"wmww\";\n  repo = \"gtk-layer-shell\";\n  repo_git = \"https://${domain}/${owner}/${"
  },
  {
    "path": "pkgs/i3status-rust/metadata.nix",
    "chars": 271,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"greshake\";\n  repo = \"i3status-rust\";\n  repo_git = \"https://${domain}/${owner}/"
  },
  {
    "path": "pkgs/imv/metadata.nix",
    "chars": 284,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~exec64\";\n  repo = \"imv\";\n  repo_git = \"https://${doma"
  },
  {
    "path": "pkgs/kanshi/metadata.nix",
    "chars": 289,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~emersion\";\n  repo = \"kanshi\";\n  repo_git = \"https://$"
  },
  {
    "path": "pkgs/lavalauncher/metadata.nix",
    "chars": 299,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~leon_plickat\";\n  repo = \"lavalauncher\";\n  repo_git = "
  },
  {
    "path": "pkgs/libvncserver_master/metadata.nix",
    "chars": 268,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"LibVNC\";\n  repo = \"libvncserver\";\n  repo_git = \"https://${domain}/${owner}/${r"
  },
  {
    "path": "pkgs/libvncserver_master/pkgconfig.patch",
    "chars": 1138,
    "preview": "diff --git a/src/libvncclient/libvncclient.pc.cmakein b/src/libvncclient/libvncclient.pc.cmakein\nindex ceeda39d..2516e64"
  },
  {
    "path": "pkgs/mako/metadata.nix",
    "chars": 262,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"emersion\";\n  repo = \"mako\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";"
  },
  {
    "path": "pkgs/neatvnc/metadata.nix",
    "chars": 261,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"any1\";\n  repo = \"neatvnc\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n"
  },
  {
    "path": "pkgs/new-wayland-protocols/metadata.nix",
    "chars": 303,
    "preview": "rec {\n  type = \"gitlab\";\n  domain = \"gitlab.freedesktop.org\";\n  owner = \"wayland\";\n  repo = \"wayland-protocols\";\n  repo_"
  },
  {
    "path": "pkgs/obs-wlrobs/metadata.nix",
    "chars": 258,
    "preview": "rec {\n  type = \"hgsourcehut\";\n  domain = \"hg.sr.ht\";\n  owner = \"~scoopta\";\n  repo = \"wlrobs\";\n  repo_hg = \"https://${dom"
  },
  {
    "path": "pkgs/rootbar/metadata.nix",
    "chars": 259,
    "preview": "rec {\n  type = \"hgsourcehut\";\n  domain = \"hg.sr.ht\";\n  owner = \"~scoopta\";\n  repo = \"rootbar\";\n  repo_hg = \"https://${do"
  },
  {
    "path": "pkgs/salut/default.nix",
    "chars": 671,
    "preview": "{\n  lib,\n  rustPlatform,\n  fetchFromGitLab,\n  pkg-config,\n  libxkbcommon,\n  fontconfig,\n}:\n\nlet\n  metadata = import ./me"
  },
  {
    "path": "pkgs/salut/metadata.nix",
    "chars": 239,
    "preview": "rec {\n  owner = \"snakedye\";\n  repo = \"salut\";\n  repo_git = \"https://gitlab.com/${owner}/${repo}\";\n  branch = \"master\";\n "
  },
  {
    "path": "pkgs/shotman/metadata.nix",
    "chars": 290,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~whynothugo\";\n  repo = \"shotman\";\n  repo_git = \"https:"
  },
  {
    "path": "pkgs/sirula/metadata.nix",
    "chars": 269,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"DorianRudolph\";\n  repo = \"sirula\";\n  repo_git = \"https://${domain}/${owner}/${"
  },
  {
    "path": "pkgs/slurp/metadata.nix",
    "chars": 263,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"emersion\";\n  repo = \"slurp\";\n  repo_git = \"https://${domain}/${owner}/${repo}\""
  },
  {
    "path": "pkgs/sway-unwrapped/metadata.nix",
    "chars": 289,
    "preview": "rec {\n  upattr = \"sway-unwrapped\";\n  domain = \"github.com\";\n  owner = \"swaywm\";\n  repo = \"sway\";\n  repo_git = \"https://$"
  },
  {
    "path": "pkgs/swaybg/metadata.nix",
    "chars": 262,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"swaywm\";\n  repo = \"swaybg\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";"
  },
  {
    "path": "pkgs/swayidle/metadata.nix",
    "chars": 264,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"swaywm\";\n  repo = \"swayidle\";\n  repo_git = \"https://${domain}/${owner}/${repo}"
  },
  {
    "path": "pkgs/swaylock/metadata.nix",
    "chars": 264,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"swaywm\";\n  repo = \"swaylock\";\n  repo_git = \"https://${domain}/${owner}/${repo}"
  },
  {
    "path": "pkgs/swaylock-effects/metadata.nix",
    "chars": 273,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"jirutka\";\n  repo = \"swaylock-effects\";\n  repo_git = \"https://${domain}/${owner"
  },
  {
    "path": "pkgs/swww/metadata.nix",
    "chars": 236,
    "preview": "rec {\n  owner = \"Horus645\";\n  repo = \"swww\";\n  repo_git = \"https://github.com/${owner}/${repo}\";\n  branch = \"main\";\n  re"
  },
  {
    "path": "pkgs/waybar/metadata.nix",
    "chars": 263,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"Alexays\";\n  repo = \"Waybar\";\n  repo_git = \"https://${domain}/${owner}/${repo}\""
  },
  {
    "path": "pkgs/waypipe/metadata.nix",
    "chars": 296,
    "preview": "rec {\n  type = \"gitlab\";\n  domain = \"gitlab.freedesktop.org\";\n  owner = \"mstoeckl\";\n  repo = \"waypipe\";\n  repo_git = \"ht"
  },
  {
    "path": "pkgs/wayvnc/metadata.nix",
    "chars": 260,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"any1\";\n  repo = \"wayvnc\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n "
  },
  {
    "path": "pkgs/wbg/metadata.nix",
    "chars": 277,
    "preview": "rec {\n  type = \"gitea\";\n  domain = \"codeberg.org\";\n  owner = \"dnkl\";\n  repo = \"wbg\";\n  repo_git = \"https://${domain}/${o"
  },
  {
    "path": "pkgs/wdisplays/metadata.nix",
    "chars": 267,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"artizirk\";\n  repo = \"wdisplays\";\n  repo_git = \"https://${domain}/${owner}/${re"
  },
  {
    "path": "pkgs/wev/metadata.nix",
    "chars": 286,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~sircmpwn\";\n  repo = \"wev\";\n  repo_git = \"https://${do"
  },
  {
    "path": "pkgs/wf-recorder/metadata.nix",
    "chars": 268,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"ammen99\";\n  repo = \"wf-recorder\";\n  repo_git = \"https://${domain}/${owner}/${r"
  },
  {
    "path": "pkgs/wl-clipboard/metadata.nix",
    "chars": 269,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"bugaevc\";\n  repo = \"wl-clipboard\";\n  repo_git = \"https://${domain}/${owner}/${"
  },
  {
    "path": "pkgs/wl-gammarelay-rs/default.nix",
    "chars": 704,
    "preview": "{\n  lib,\n  fetchFromGitHub,\n  rustPlatform,\n}:\n\nlet\n  metadata = import ./metadata.nix;\nin\nrustPlatform.buildRustPackage"
  },
  {
    "path": "pkgs/wl-gammarelay-rs/metadata.nix",
    "chars": 275,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"MaxVerevkin\";\n  repo = \"wl-gammarelay-rs\";\n  repo_git = \"https://${domain}/${o"
  },
  {
    "path": "pkgs/wl-screenrec/metadata.nix",
    "chars": 269,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"russelltg\";\n  repo = \"wl-screenrec\";\n  repo_git = \"https://${domain}/${owner}/"
  },
  {
    "path": "pkgs/wlay/metadata.nix",
    "chars": 257,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"atx\";\n  repo = \"wlay\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n  br"
  },
  {
    "path": "pkgs/wldash/default.nix",
    "chars": 1094,
    "preview": "{\n  lib,\n  rustPlatform,\n  fetchFromGitHub,\n  pkg-config,\n  dbus,\n  libpulseaudio,\n  alsa-lib,\n  libxkbcommon,\n  wayland"
  },
  {
    "path": "pkgs/wldash/metadata.nix",
    "chars": 269,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"kennylevinsen\";\n  repo = \"wldash\";\n  repo_git = \"https://${domain}/${owner}/${"
  },
  {
    "path": "pkgs/wlogout/metadata.nix",
    "chars": 267,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"ArtsyMacaw\";\n  repo = \"wlogout\";\n  repo_git = \"https://${domain}/${owner}/${re"
  },
  {
    "path": "pkgs/wlr-randr/metadata.nix",
    "chars": 292,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~emersion\";\n  repo = \"wlr-randr\";\n  repo_git = \"https:"
  },
  {
    "path": "pkgs/wlroots/default.nix",
    "chars": 566,
    "preview": "args_@{\n  lib,\n  fetchFromGitLab,\n  wlroots,\n  libdisplay-info,\n  hwdata,\n  lcms2,\n  ...\n}:\n\nlet\n  metadata = import ./m"
  },
  {
    "path": "pkgs/wlroots/metadata.nix",
    "chars": 276,
    "preview": "rec {\n  domain = \"gitlab.freedesktop.org\";\n  owner = \"wlroots\";\n  repo = \"wlroots\";\n  repo_git = \"https://${domain}/${ow"
  },
  {
    "path": "pkgs/wlsunset/metadata.nix",
    "chars": 296,
    "preview": "rec {\n  type = \"gitsourcehut\";\n  domain = \"git.sr.ht\";\n  owner = \"~kennylevinsen\";\n  repo = \"wlsunset\";\n  repo_git = \"ht"
  },
  {
    "path": "pkgs/wlvncc/default.nix",
    "chars": 1163,
    "preview": "{\n  stdenv,\n  lib,\n  fetchFromGitHub,\n  pkg-config,\n  meson,\n  ninja,\n  wayland,\n  wayland-protocols,\n  wayland-scanner,"
  },
  {
    "path": "pkgs/wlvncc/metadata.nix",
    "chars": 260,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"any1\";\n  repo = \"wlvncc\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n "
  },
  {
    "path": "pkgs/wob/metadata.nix",
    "chars": 260,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"francma\";\n  repo = \"wob\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n "
  },
  {
    "path": "pkgs/wofi/metadata.nix",
    "chars": 256,
    "preview": "rec {\n  type = \"hgsourcehut\";\n  domain = \"hg.sr.ht\";\n  owner = \"~scoopta\";\n  repo = \"wofi\";\n  repo_hg = \"https://${domai"
  },
  {
    "path": "pkgs/wshowkeys/metadata.nix",
    "chars": 263,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"ammgws\";\n  repo = \"wshowkeys\";\n  repo_git = \"https://${domain}/${owner}/${repo"
  },
  {
    "path": "pkgs/wtype/metadata.nix",
    "chars": 258,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"atx\";\n  repo = \"wtype\";\n  repo_git = \"https://${domain}/${owner}/${repo}\";\n  b"
  },
  {
    "path": "pkgs/xdg-desktop-portal-wlr/metadata.nix",
    "chars": 280,
    "preview": "rec {\n  domain = \"github.com\";\n  owner = \"emersion\";\n  repo = \"xdg-desktop-portal-wlr\";\n  repo_git = \"https://${domain}/"
  },
  {
    "path": "shell.nix",
    "chars": 481,
    "preview": "# This file provides backward compatibility to nix < 2.4 clients\n{\n  system ? builtins.currentSystem,\n}:\nlet\n  lock = bu"
  },
  {
    "path": "templates/template.nix",
    "chars": 3519,
    "preview": "args_@{\n  attrName,\n  # the attr in nixpkgs could be different from what we want to provide\n  # example: us libvncserver"
  }
]

About this extraction

This page contains the full source code of the colemickens/nixpkgs-wayland GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 87 files (82.3 KB), approximately 27.9k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!