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) (🙏). - [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) ## 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.
```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 ]; } ```
### Install for non-NixOS users Non-NixOS users have many options, but here are two explicitly: 1. Activate flakes mode, then just run them outright like the first example in this README. 2. See the following details block for an example of how to add `nixpkgs-wayland` as a user-level overlay and then install a package with `nix-env`.
1. There are two ways to activate an overlay for just your user: 1. Add a new entry in ``~/.config/nixpkgs/overlays.nix`: ```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 ```
## Packages | 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 | ## 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 = "" let delimEnd = "" 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 ) )