chore(*): drop everything that is not required for Tvix

Co-Authored-By: edef <edef@edef.eu>
Co-Authored-By: Ryan Lahfa <raito@lix.systems>
Change-Id: I9817214c3122e49d694c5e41818622a08d9dfe45
This commit is contained in:
Florian Klink 2025-01-05 17:12:30 +01:00
parent bd91cac1f3
commit df4500ea2b
2905 changed files with 34 additions and 493328 deletions

View file

@ -1,3 +1 @@
set noparent
flokli

View file

@ -1,21 +0,0 @@
From 9414e9bfe9aad3a87d34cb8e1cdbef081d38a37c Mon Sep 17 00:00:00 2001
From: Florian Klink <flokli@flokli.de>
Date: Fri, 15 Nov 2024 16:29:17 +0200
Subject: [PATCH] custom_config: #define MIRYOKU_KLUDGE_MOUSEKEYSPR
---
miryoku/custom_config.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/miryoku/custom_config.h b/miryoku/custom_config.h
index 1097bcb..48a1b5f 100644
--- a/miryoku/custom_config.h
+++ b/miryoku/custom_config.h
@@ -1,3 +1,4 @@
// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
+#define MIRYOKU_KLUDGE_MOUSEKEYSPR
--
2.46.1

View file

@ -1,25 +0,0 @@
From 9ed3e8ee2aad704fcfef2490617e2fd22902b2c4 Mon Sep 17 00:00:00 2001
From: Florian Klink <flokli@flokli.de>
Date: Sun, 27 Oct 2024 12:01:13 +0100
Subject: [PATCH] miryoku_behaviors: add quick-tap-ms, require-prior-idle-ms
---
miryoku/miryoku_behaviors.dtsi | 2 ++
1 file changed, 2 insertions(+)
diff --git a/miryoku/miryoku_behaviors.dtsi b/miryoku/miryoku_behaviors.dtsi
index 473df49..73211da 100644
--- a/miryoku/miryoku_behaviors.dtsi
+++ b/miryoku/miryoku_behaviors.dtsi
@@ -14,6 +14,8 @@
compatible = "zmk,behavior-hold-tap";
#binding-cells = <2>;
tapping-term-ms = <U_TAPPING_TERM>;
+ quick-tap-ms = <200>;
+ require-prior-idle-ms = <125>;
flavor = "tap-preferred";
bindings = <&mo>, <&kp>;
};
--
2.46.1

View file

@ -1,25 +0,0 @@
From a852a9738cc7510f6d3b80d1befb3c88ef8f08f7 Mon Sep 17 00:00:00 2001
From: Florian Klink <flokli@flokli.de>
Date: Sun, 27 Oct 2024 11:14:30 +0100
Subject: [PATCH] miryoku_layer_alternatives.h: expose alt-gr on G and M
---
miryoku/miryoku_babel/miryoku_layer_alternatives.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/miryoku/miryoku_babel/miryoku_layer_alternatives.h b/miryoku/miryoku_babel/miryoku_layer_alternatives.h
index 8044fdd..07ed9b6 100644
--- a/miryoku/miryoku_babel/miryoku_layer_alternatives.h
+++ b/miryoku/miryoku_babel/miryoku_layer_alternatives.h
@@ -86,7 +86,7 @@ U_NP, U_NP, U_LT(U_MEDIA, ESC),U_LT(U_NAV, SPACE),U_LT
#define MIRYOKU_ALTERNATIVES_BASE_COLEMAKDH \
&kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, \
-U_MT(LGUI, A), U_MT(LALT, R), U_MT(LCTRL, S), U_MT(LSHFT, T), &kp G, &kp M, U_MT(LSHFT, N), U_MT(LCTRL, E), U_MT(LALT, I), U_MT(LGUI, O), \
+U_MT(LGUI, A), U_MT(LALT, R), U_MT(LCTRL, S), U_MT(LSHFT, T), U_MT(RALT, G), U_MT(RALT, M), U_MT(LSHFT, N), U_MT(LCTRL, E), U_MT(LALT, I), U_MT(LGUI, O), \
U_LT(U_BUTTON, Z), U_MT(RALT, X), &kp C, &kp D, &kp V, &kp K, &kp H, &kp COMMA, U_MT(RALT, DOT), U_LT(U_BUTTON, SLASH),\
U_NP, U_NP, U_LT(U_MEDIA, ESC),U_LT(U_NAV, SPACE),U_LT(U_MOUSE, TAB),U_LT(U_SYM, RET), U_LT(U_NUM, BSPC), U_LT(U_FUN, DEL), U_NP, U_NP
--
2.46.1

View file

@ -1,29 +0,0 @@
{ pkgs, depot, ... }:
rec {
firmware = depot.users.flokli.keyboards.buildSplitKeyboard {
name = "nice_nano_v2";
board = "nice_nano_v2";
shield = "corne_%PART% nice_view_adapter nice_view";
zephyrDepsHash = "sha256:1hr304xhj596a85mmy3zl2y0bl9w143h9bj5qk7wmqx46mbs4kb0";
src = depot.users.flokli.keyboards.miryoku_config;
extraCmakeFlags = [
"-DCONFIG_ZMK_POINTING=y"
"-DCONFIG_ZMK_POINTING_SMOOTH_SCROLLING=y"
];
};
config-flat = depot.users.flokli.keyboards.mkFlatConfig "corne";
flash-left = pkgs.writeShellScript "flash.sh" ''
cp ${firmware}/zmk_left.uf2 /run/media/$USER/NICENANO/
'';
flash-right = pkgs.writeShellScript "flash.sh" ''
cp ${firmware}/zmk_right.uf2 /run/media/$USER/NICENANO/
'';
meta.ci.targets = [
"config-flat"
"firmware"
];
}

View file

@ -1,28 +0,0 @@
{ pkgs, depot, ... }:
rec {
firmware = depot.users.flokli.keyboards.buildSplitKeyboard {
name = "corneish_zen_v1";
board = "corneish_zen_v1_%PART%";
zephyrDepsHash = "sha256-Qe9G5YLEi9iG5QdmJCxcmQTpzUCBYkfa84zk7SVRSgQ=";
src = depot.users.flokli.keyboards.miryoku_config;
extraCmakeFlags = [
"-DCONFIG_ZMK_MOUSE=y"
"-DCONFIG_ZMK_MOUSE_SMOOTH_SCROLLING=y"
];
};
config-flat = depot.users.flokli.keyboards.mkFlatConfig "corneish_zen";
flash-left = pkgs.writeShellScript "flash.sh" ''
cp ${firmware}/zmk_left.uf2 /run/media/$USER/CORNEISHZEN/
'';
flash-right = pkgs.writeShellScript "flash.sh" ''
cp ${firmware}/zmk_right.uf2 /run/media/$USER/CORNEISHZEN/
'';
meta.ci.targets = [
"config-flat"
"firmware"
];
}

View file

@ -1,54 +0,0 @@
{ pkgs, ... }:
let
zmk-nix = pkgs.fetchFromGitHub {
owner = "lilyinstarlight";
repo = "zmk-nix";
rev = "1d7d7aeef7c62d3a80a688b26c6484123c26cde6";
hash = "sha256-7W+slivoV0zSfDxXlhMVL3yPodrhCiYQiFbtbco1r5U=";
};
zmk_builders = pkgs.callPackage (import (zmk-nix + "/nix/builders.nix")) { };
miryoku_zmk = pkgs.fetchFromGitHub {
owner = "manna-harbour";
repo = "miryoku_zmk";
rev = "a1f1eae0666b7b33ad789b10822297169754a349";
hash = "sha256-4jYz5fudTW45hbwhRRGBdiAbu596X9zSiCio/tS85d0=";
};
miryoku_zmk_patched = pkgs.runCommand "miryoku_zmk_patched" { } ''
mkdir -p $out
cp -r ${miryoku_zmk}/. $out/
cd $out
chmod -R +w $out
patch -p1 < ${./0001-miryoku_layer_alternatives.h-expose-alt-gr-on-G-and-.patch}
patch -p1 < ${./0001-miryoku_behaviors-add-quick-tap-ms-require-prior-idl.patch}
patch -p1 < ${./0001-custom_config-define-MIRYOKU_KLUDGE_MOUSEKEYSPR.patch}
'';
miryoku_config = pkgs.runCommand "config" { } ''
mkdir -p $out/config
cp -r ${miryoku_zmk_patched}/miryoku $out/
cp ${./west.yml} $out/config/west.yml
cp ${miryoku_zmk_patched}/config/*.keymap $out/config/
'';
# helpful for debugging a resulting keymap config
mkFlatConfig = name: pkgs.runCommand "config-flat"
{
nativeBuildInputs = [ pkgs.python3.pkgs.pcpp ];
} ''
mkdir -p $out/config
cp ${./west.yml} $out/config/west.yml
pcpp --passthru-unfound-includes -o $out/config/${name}.keymap ${miryoku_zmk_patched}/config/${name}.keymap
'';
in
{
miryoku_zmk = miryoku_zmk_patched;
inherit (zmk_builders) buildSplitKeyboard;
inherit miryoku_config mkFlatConfig;
}

View file

@ -1,71 +0,0 @@
{ pkgs, ... }:
rec {
qmk_firmware_src = pkgs.fetchFromGitHub {
owner = "bastardkb";
repo = "bastardkb-qmk";
rev = "60f5e5ae3da7cbc724a587642b2ad36fe5fcb591"; # bkb-develop
hash = "sha256-FRlxOdxxNAf7QYlAnD4OJ68k04oog0r9UYBmaANDFsU=";
fetchSubmodules = true;
};
qmk_userspace = pkgs.fetchFromGitHub {
owner = "bastardkb";
repo = "qmk_userspace";
rev = "722fe10ae9f1249245af4852209694749207eb70"; # develop
hash = "sha256-FY5zyM6G6DEdSWowNADrHr9P5G4mqioTDK/KM10z6t0=";
fetchSubmodules = true;
};
firmware = pkgs.stdenv.mkDerivation {
name = "bastardkb-dilemma-firmware";
src = qmk_firmware_src;
patches = [ ./enable-taps.patch ];
postPatch = ''
patchShebangs util/uf2conv.py
'';
nativeBuildInputs = [
pkgs.python3
pkgs.qmk
];
env.QMK_HOME = qmk_firmware_src;
env.QMK_USERSPACE = "/tmp/qmk_userspace";
env.HOME = "/tmp/qmk";
env.SKIP_GIT = "true";
buildPhase = ''
mkdir -p /tmp/qmk_userspace
cp -r ${qmk_userspace}/. /tmp/qmk_userspace/
chmod +w /tmp/qmk_userspace/ --recursive
mkdir -p /tmp/qmk_userspace/keyboards/bastardkb/dilemma/3x5_3{,_procyon}/keymaps/flokli
cp ${./keymap.c} /tmp/qmk_userspace/keyboards/bastardkb/dilemma/3x5_3/keymaps/flokli/keymap.c
cp ${./rules.mk} /tmp/qmk_userspace/keyboards/bastardkb/dilemma/3x5_3/keymaps/flokli/rules.mk
cp ${./keymap.c} /tmp/qmk_userspace/keyboards/bastardkb/dilemma/3x5_3_procyon/keymaps/flokli/keymap.c
cp ${./rules.mk} /tmp/qmk_userspace/keyboards/bastardkb/dilemma/3x5_3_procyon/keymaps/flokli/rules.mk
qmk compile -c -kb bastardkb/dilemma/3x5_3 -km flokli
qmk compile -c -kb bastardkb/dilemma/3x5_3_procyon -km flokli
'';
installPhase = ''
mkdir -p $out
cp bastardkb_dilemma_*.uf2 $out/
'';
};
flash-v2 = pkgs.writeShellScript "flash.sh" ''
QMK_HOME=${qmk_firmware_src} ${pkgs.qmk}/bin/qmk flash ${firmware}/bastardkb_dilemma_3x5_3_flokli.uf2
'';
flash-v3 = pkgs.writeShellScript "flash.sh" ''
QMK_HOME=${qmk_firmware_src} ${pkgs.qmk}/bin/qmk flash ${firmware}/bastardkb_dilemma_3x5_3_procyon_flokli.uf2
'';
meta.ci.skip = true;
meta.ci.targets = [ "firmware" ];
}

View file

@ -1,24 +0,0 @@
From 32a1b9a189c13bec03c6b0f258121c47185db0ad Mon Sep 17 00:00:00 2001
From: Florian Klink <flokli@flokli.de>
Date: Tue, 23 Jan 2024 11:26:10 +0200
Subject: [PATCH] bastardkb dilemma: enable taps
---
keyboards/bastardkb/dilemma/3x5_3/config.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/keyboards/bastardkb/dilemma/3x5_3/config.h b/keyboards/bastardkb/dilemma/3x5_3/config.h
index ccbc4e2f58..bf17dc7e02 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/config.h
@@ -42,6 +42,7 @@
#define POINTING_DEVICE_CS_PIN GP21
#undef CIRQUE_PINNACLE_DIAMETER_MM
#define CIRQUE_PINNACLE_DIAMETER_MM 40
+#define CIRQUE_PINNACLE_TAP_ENABLE 1
/* Reset. */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
--
2.43.0

View file

@ -1,172 +0,0 @@
/**
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum dilemma_keymap_layers {
LAYER_BASE = 0,
LAYER_FUNCTION,
LAYER_NAVIGATION,
LAYER_MEDIA,
LAYER_POINTER,
LAYER_NUMERAL,
LAYER_SYMBOLS,
};
// Automatically enable sniping-mode on the pointer layer.
// #define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
#define ESC_MED LT(LAYER_MEDIA, KC_ESC)
#define SPC_NAV LT(LAYER_NAVIGATION, KC_SPC)
#define TAB_POI LT(LAYER_POINTER, KC_TAB)
#define ENT_SYM LT(LAYER_SYMBOLS, KC_ENT)
#define BSP_NUM LT(LAYER_NUMERAL, KC_BSPC)
#define DEL_FUN LT(LAYER_FUNCTION, KC_DEL)
#define PT_Z LT(LAYER_POINTER, KC_Z)
#define PT_SLSH LT(LAYER_POINTER, KC_SLSH)
#ifndef POINTING_DEVICE_ENABLE
# define DRGSCRL KC_NO
# define DPI_MOD KC_NO
# define S_D_MOD KC_NO
# define SNIPING KC_NO
#endif // !POINTING_DEVICE_ENABLE
// clang-format off
/** \brief QWERTY layout (3 rows, 10 columns). */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
LGUI_T(KC_A), LALT_T(KC_R), LCTL_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O),
PT_Z, RALT_T(KC_X), KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, RALT_T(KC_DOT), PT_SLSH,
ESC_MED, SPC_NAV, TAB_POI, ENT_SYM, BSP_NUM, DEL_FUN
),
/*
* Layers used on the Dilemma.
*
* These layers started off heavily inspired by the Miryoku layout, but trimmed
* down and tailored for a stock experience that is meant to be fundation for
* further personalization.
*
* See https://github.com/manna-harbour/miryoku for the original layout.
*/
/**
* \brief Function layer.
*
* Secondary right-hand layer has function keys mirroring the numerals on the
* primary layer with extras on the pinkie column, plus system keys on the inner
* column. App is on the tertiary thumb key and other thumb keys are duplicated
* from the base layer to enable auto-repeat.
*/
[LAYER_FUNCTION] = LAYOUT_split_3x5_3(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F12,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_SCRL, KC_F4, KC_F5, KC_F6, KC_F11,
XXXXXXX, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F10,
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
/**
* \brief Navigation layer.
*
* Primary right-hand layer (left home thumb) is navigation and editing. Cursor
* keys are on the home position, line and page movement below, clipboard above,
* caps lock and insert on the inner column. Thumb keys are duplicated from the
* base layer to avoid having to layer change mid edit and to enable auto-repeat.
*/
[LAYER_NAVIGATION] = LAYOUT_split_3x5_3(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
XXXXXXX, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
XXXXXXX, XXXXXXX, _______, KC_ENT, KC_BSPC, KC_DEL
),
/**
* \brief Media layer.
*
* Tertiary left- and right-hand layer is media and RGB control. This layer is
* symmetrical to accomodate the left- and right-hand trackball.
*/
[LAYER_MEDIA] = LAYOUT_split_3x5_3(
XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX,
KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT, KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, KC_MPLY, KC_MSTP, KC_MSTP, KC_MPLY, KC_MUTE
),
/** \brief Mouse emulation and pointer functions. */
[LAYER_POINTER] = LAYOUT_split_3x5_3(
QK_BOOT, EE_CLR, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, EE_CLR, QK_BOOT,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
_______, DRGSCRL, SNIPING, KC_BTN3, XXXXXXX, XXXXXXX, KC_BTN3, SNIPING, DRGSCRL, _______,
KC_BTN3, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, KC_BTN3
),
/**
* \brief Numeral layout.
*
* Primary left-hand layer (right home thumb) is numerals and symbols. Numerals
* are in the standard numpad locations with symbols in the remaining positions.
* `KC_DOT` is duplicated from the base layer.
*/
[LAYER_NUMERAL] = LAYOUT_split_3x5_3(
KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_DOT, KC_1, KC_2, KC_3, KC_BSLS, XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, XXXXXXX,
KC_DOT, KC_0, KC_MINS, XXXXXXX, _______, XXXXXXX
),
/**
* \brief Symbols layer.
*
* Secondary left-hand layer has shifted symbols in the same locations to reduce
* chording when using mods with shifted symbols. `KC_LPRN` is duplicated next to
* `KC_RPRN`.
*/
[LAYER_SYMBOLS] = LAYOUT_split_3x5_3(
KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, XXXXXXX,
KC_LPRN, KC_GRV, KC_UNDS, _______, XXXXXXX, XXXXXXX
),
};
// clang-format on
#ifdef POINTING_DEVICE_ENABLE
# ifdef DILEMMA_AUTO_SNIPING_ON_LAYER
layer_state_t layer_state_set_user(layer_state_t state) {
dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
return state;
}
# endif // DILEMMA_AUTO_SNIPING_ON_LAYER
#endif // POINTING_DEVICE_ENABLE
#ifdef ENCODER_MAP_ENABLE
// clang-format off
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[LAYER_BASE] = {ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[LAYER_FUNCTION] = {ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
[LAYER_NAVIGATION] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[LAYER_MEDIA] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[LAYER_POINTER] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI)},
[LAYER_NUMERAL] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI)},
[LAYER_SYMBOLS] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
};
// clang-format on
#endif // ENCODER_MAP_ENABLE

View file

@ -1,3 +0,0 @@
ENCODER_MAP_ENABLE = yes
MAXTOUCH_DEBUG = no
OPT_DEFS += -DMK_KINETIC_SPEED=1

View file

@ -1,34 +0,0 @@
manifest:
remotes:
- name: zmkfirmware
url-base: https://github.com/zmkfirmware
projects:
- name: zephyr
remote: zmkfirmware
revision: f8e4d15791602c67405c0fd2651167a895939565 # v3.5.0+zmk-fixes
import:
name-blocklist:
- ci-tools
- hal_altera
- hal_cypress
- hal_infineon
- hal_microchip
- hal_nxp
- hal_openisa
- hal_silabs
- hal_xtensa
- hal_st
- hal_ti
- loramac-node
- mcuboot
- mcumgr
- net-tools
- openthread
- edtt
- trusted-firmware-m
- name: zmk
remote: zmkfirmware
revision: refs/pull/2477/head # mouse move and scroll support PR
import: app/west.yml
self:
path: config

View file

@ -1,3 +0,0 @@
source_up
PATH_add $(nix-build ../../.. -A users.flokli.nixos.deps --no-out-link)/bin

View file

@ -1,8 +1,6 @@
{ depot, pkgs, lib, ... }:
let
systemFor = sys: (depot.ops.nixos.nixosFor sys).system;
# assumes `name` is configured appropriately in your .ssh/config
deployScript = name: sys: pkgs.writeShellScriptBin "deploy-${name}" ''
set -eo pipefail

View file

@ -1,11 +1,8 @@
# Set of unconditional config options applicable to all archeology machines.
{ depot, pkgs, ... }:
{ pkgs, ... }:
{
# Use the TVL binary cache
tvl.cache.enable = true;
# Start clickhose as a system service.
services.clickhouse.enable = true;

View file

@ -1 +0,0 @@
*.log

View file

@ -1,5 +0,0 @@
digraph {
Builder
Store
Evaluator
}

View file

@ -1,13 +0,0 @@
attrpath
: attrpath '.' attr {
$$ = $1; $1->push_back(AttrName(data->symbols.create($3)));
}
| attrpath '.' string_attr
{ $$ = $1;
ExprString * str = dynamic_cast<ExprString *>($3);
if (str) {
$$->push_back(AttrName(data->symbols.create(str->s)));
delete str;
} else
$$->push_back(AttrName($3));
}

View file

@ -1,19 +0,0 @@
digraph {
bgcolor="transparent"
node [fillcolor="lightgrey",style="filled"]
tvix_cli
tvix_eval
nix_compat
tvix_serde
tvix_store
tvix_cli -> tvix_store
tvix_cli -> nix_compat
tvix_cli -> tvix_eval
tvix_store -> nix_compat
tvix_eval -> nix_compat
tvix_serde -> tvix_eval
}

View file

@ -1,41 +0,0 @@
{ depot, pkgs, ... }:
let
inherit (pkgs)
fontconfig qrencode runCommand stdenv;
mkQr = url: runCommand "qrcode.png" { } ''
${qrencode}/bin/qrencode -o $out -t SVG -s 5 \
--background=fafafa \
--foreground=000000 \
${url}
'';
in
stdenv.mkDerivation {
name = "2023-nixcon-tvix";
src = ./.;
FONTCONFIG_FILE = pkgs.makeFontsConf {
fontDirectories = with pkgs; [ jetbrains-mono fira fira-code fira-mono lato ];
};
nativeBuildInputs = [ pkgs.reveal-md pkgs.graphviz ];
buildPhase = ''
cp ${depot.tvix.logo}/logo.png tvix-logo.png
dot -Tsvg crate-deps.dot > crate-deps.svg
cp ${mkQr "https://flokli.de"} qrcode-flokli.svg
cp ${mkQr "https://tvix.dev"} qrcode-tvix.svg
mkdir -p $out
reveal-md --static $out presentation.md
cp tvixbolt.webm $out
CHROME_CONFIG_HOME=/build/.config reveal-md presentation.md --print $out/slides.pdf --puppeteer-chromium-executable="${pkgs.chromium}/bin/chromium"
# Above command doesn't fail on error, ensure file has been created
[[ -f "$out/slides.pdf" ]] || exit 1
'';
# reveal-md presentation.md --print started timing out possibly due to
# chromium: 133.0.6943.141 -> 134.0.6998.35
meta.ci.skip = true;
}

View file

@ -1,294 +0,0 @@
---
author:
- Florian Klink
date: 2023-09-09
title: "Tvix: Status update"
theme: moon
revealOptions:
transition: 'fade'
---
# Tvix: Status update
![Tvix Logo](tvix-logo.png)
2023-09-09
Florian Klink
---
## Whoami
- flokli
- nixpkgs contributor since 2018, maintaining systemd, nsncd and some
more stuff
- Freelance Nix/DevOps consultant
- I spend too much time on computers :-)
---
## What is Tvix?
- A new implementation of Nix
- modular
- written in Rust
- developed in the [TVL](https://tvl.fyi) monorepo
- subtree exported to [github:tvlfyi/tvix](https://github.com/tvlfyi/tvix)
---
## Structure
- strong separation between **Evaluator**, **Store** and **Builder**
- Defined interfaces between different components (Protobuf/gRPC) <!-- .element: class="fragment" -->
- Allows adding to/combining with your own components <!-- .element: class="fragment" -->
- <!-- .element: class="fragment" --> A lot of helper code for some of the Nix internals in the `nix-compat` crate
Note: Derivation types, serializers. NAR writers, nixbase32 enc/dec, Nix Hash function, stringparsing etc.
----
![crate-deps.svg](crate-deps.svg)
---
## Evaluator: Design
- <!-- .element: class="fragment" -->
Nix code is parsed via [rnix](https://github.com/nix-community/rnix-parser)
- <!-- .element: class="fragment" -->
AST traversal, generate bytecode (with some transformations)
- <!-- .element: class="fragment" -->
Bytecode is executed by an abstract machine with a Nix-specific instruction set
----
## Evaluator: Design
- <!-- .element: class="fragment" -->
Builtins are separate from the "evaluator core"
- <!-- .element: class="fragment" -->
inject your own builtins
- <!-- .element: class="fragment" -->
this includes `builtins.derivation`!
- <!-- .element: class="fragment" -->
IO is nicely abstracted away
- <!-- .element: class="fragment" -->
We can run a Nixlang subset without IO in wasm (see [tvixbolt](https://bolt.tvix.dev/)),
or parse Nix into a config struct with `tvix-serde`
----
<!-- <video class="r-stretch" src="./tvixbolt.webm"></video> -->
<a href="./tvixbolt.webm">Tvixbolt Demo</a>
----
### Evaluator: Current Work
- <!-- .element: class="fragment" -->
Current goal: **evaluate nixpkgs the same way as Nix does**
- <!-- .element: class="fragment" -->
Checked by comparing the calculated output paths, which checks correctness of all \"parent\" output paths too.
- <!-- .element: class="fragment" -->
Required implementing a lot of Nix internals in `nix-compat`, and `tvix-store` (A-Term, hash modulo, NAR writer/hasher)
Note: Getting output hashing correct, and exposing this in a re-usable fashion took quite some iterations to get right.
----
### Evaluator: Current Work (cont.)
- <!-- .element: class="fragment" -->
🎉 Already correct for (and continously checked by CI on every commit):
- <!-- .element: class="fragment" -->
`stdenv`, `hello`
- <!-- .element: class="fragment" -->
`pkgsCross.aarch64-multiplatform.stdenv`, `pkgsCross.aarch64-multiplatform.hello`
- <!-- .element: class="fragment" -->
Some work left for more complicated expressions
- <!-- .element: class="fragment" -->
infinite recursion [when inheriting from a `builtins.tryEval` multiple times](https://b.tvl.fyi/281)
- <!-- .element: class="fragment" -->
small details around file imports
- <!-- .element: class="fragment" -->
Not too much performance finetuning until we're correct first.
----
### Evaluator: Demo
[![asciicast](https://asciinema.org/a/MH4tuVPLsKewJSGJUYEyIKUpj.svg)](https://asciinema.org/a/MH4tuVPLsKewJSGJUYEyIKUpj)
---
## Store: Design
- <!-- .element: class="fragment" -->
Uses a very different underlying data model:
- <!-- .element: class="fragment" -->
Nix stores on a per- `StorePath` granularity
- <!-- .element: class="fragment" -->
tvix-store uses a Merkle DAG of directories, similar to git trees, but with [BLAKE3](https://github.com/BLAKE3-team/BLAKE3) digests as pointers.
- <!-- .element: class="fragment" -->
Compat layer in front to still render/calculate NAR on demand where needed
- <!-- .element: class="fragment" -->
Substitution, caching, ... possible to describe via composition/layering
----
![tvix-store graph](tvix-store-graph.svg)
----
### Store: Advantages
- <!-- .element: class="fragment" -->
Less downloading of data that didn't change
- <!-- .element: class="fragment" -->
Less duplicate data on disk/storage
- <!-- .element: class="fragment" -->
Inherently content-addressed, so P2P substitution possible
- <!-- .element: class="fragment" -->
Allows doing verified blob streaming ([BAO](https://github.com/oconnor663/bao), [bao-tree](https://github.com/n0-computer/bao-tree))
- <!-- .element: class="fragment" -->
Protocol has some \"smarter\" methods to avoid roundtrips, but could all be statically pre-rendered
- <!-- .element: class="fragment" -->
Very little data that needs to be fetched from a trusted party (or be signed)
Note: Our way of addressing blobs by their raw blake3 digest is natively compatible with iroh, the IPFS Re-implementation in Rust
----
### Store: Status
- <!-- .element: class="fragment" -->
Whole Merkle-based store implementation (and Nix NAR compat layer) is there
- <!-- .element: class="fragment" -->
exercised by the output path CI tests, and a test suite.
- <!-- .element: class="fragment" -->
three backends (Sled, in-memory, gRPC client)
- <!-- .element: class="fragment" -->
more backends and more test suites planned.
- <!-- .element: class="fragment" -->
FUSE filesystem to expose the store (to Tvix Builders, \"appliances\") <!-- .element: class="fragment" -->
Note: backends: RocksDB, sqlite, s3. fuse: lazy fetching of build input files | think about a minimal initrd to bring up network and mount the store, then run any closure.
----
### Store: Demo
[![asciicast](https://asciinema.org/a/YFB9yycHdx0OUH9N0WdAkIYua.svg)](https://asciinema.org/a/YFB9yycHdx0OUH9N0WdAkIYua)
----
### Store: Status (cont.)
- <!-- .element: class="fragment" -->
More work on store composition needed (necessary for substition and caching)
- <!-- .element: class="fragment" -->
More work on more granular blob substititon needed.
- <!-- .element: class="fragment" -->
More work on bridges with Nix needed
- <!-- .element: class="fragment" -->
Get Nix to talk to a tvix-store
- <!-- .element: class="fragment" -->
Expose existing binary caches to tvix-store
---
### Builder: Design
- <!-- .element: class="fragment" -->
Build requests/Build protocol is less Nix-specific
- <!-- .element: class="fragment" -->
allows reusing builders for other usages (non-sandboxed builds, other build systems, playing with other addressing mechanisms)
- <!-- .element: class="fragment" -->
Distinction between a **specific build attempt** and the **general build recipe**
- <!-- .element: class="fragment" -->
allows keeping metadata about failed builds
- <!-- .element: class="fragment" -->
stats (memory/cpu consumption)
- <!-- .element: class="fragment" -->
comparing different produced binary outputs (r11y)
----
### Builder: Design
- <!-- .element: class="fragment" -->
Invididual builds can be run in your desired container/virt engine/scheduler, as long as it speaks the same Build API
- <!-- .element: class="fragment" -->
Build API composition/proxying, similar to Store composition
- <!-- .element: class="fragment" -->
allows "unattended building" (evaluate nixpkgs locally and send all build requests to a remote builder)
- <!-- .element: class="fragment" -->
allows tailing logs from currently/already running builds
----
### Builder: Status
- <!-- .element: class="fragment" -->
Dummy Builder implementation in `go-nix` (using OCI)
- <!-- .element: class="fragment" -->
Some scribble notes on the Build Protocol
- <!-- .element: class="fragment" -->
Glue code to trigger builds from inside `builtins.derivation` needs to be written
- <!-- .element: class="fragment" -->
Builder implementation (using `systemd-nspwan` or some container engine needs to be written.
- <!-- .element: class="fragment" -->
Web interface to visualize store contents and build graphs/builds/logs
---
## Contributing
- <!-- .element: class="fragment" -->
Join the IRC channel (`#tvl` on `hackint`), bridged to Matrix and XMPP
- <!-- .element: class="fragment" -->
Check our issue tracker
- <!-- .element: class="fragment" -->
Try to use it and tell us how you broke it!
- <!-- .element: class="fragment" -->
Add various Nix bits to `nix-compat`
Note: or if you like what you seeing and want to sponsor parts, that's also cool :-)
---
# Thanks to...
- <!-- .element: class="fragment" -->
all TVL contributors (some drive-by, some long-term contributors)
- <!-- .element: class="fragment" -->
countless Nix community members for their input on the architecture and rubberducking
- <!-- .element: class="fragment" -->
NLNET and others to sponsor parts of this
----
# Questions?
<style>
.container{
display: flex;
}
.col{
flex: 1;
}
</style>
<div class="container">
<div class="col">
Florian Klink / <a href="https://flokli.de">flokli.de</a><br />
<img src="qrcode-flokli.svg" />
</div>
<div class="col">
Tvix / <a href="https://tvix.dev">tvix.dev</a><br />
<img src="qrcode-tvix.svg" />
</div>
</div>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 126 KiB

View file

@ -1,36 +0,0 @@
{ depot, pkgs, ... }:
let
inherit (pkgs)
fontconfig qrencode runCommand stdenv;
mkQr = url: runCommand "qrcode.png" { } ''
${qrencode}/bin/qrencode -o $out -t SVG -s 5 \
--background=fafafa \
--foreground=000000 \
${url}
'';
in
stdenv.mkDerivation {
name = "2023-asg-tvix-store";
src = ./.;
FONTCONFIG_FILE = pkgs.makeFontsConf {
fontDirectories = with pkgs; [ jetbrains-mono fira fira-code fira-mono lato ];
};
nativeBuildInputs = [ pkgs.reveal-md pkgs.graphviz ];
buildPhase = ''
cp ${depot.tvix.logo}/logo.png tvix-logo.png
cp ${mkQr "https://flokli.de"} qrcode-flokli.svg
cp ${mkQr "https://tvix.dev"} qrcode-tvix.svg
mkdir -p $out
cp tvix-store-graph-blob-directory.svg $out/
reveal-md --static $out presentation.md
CHROME_CONFIG_HOME=/build/.config reveal-md presentation.md --print $out/slides.pdf --puppeteer-chromium-executable="${pkgs.chromium}/bin/chromium"
# Above command doesn't fail on error, ensure file has been created
[[ -f "$out/slides.pdf" ]] || exit 1
'';
}

View file

@ -1,138 +0,0 @@
---
author:
- Florian Klink
date: 2023-09-09
title: "tvix-store: A content-addressed file system and sync protocol"
theme: moon
revealOptions:
transition: 'fade'
---
## tvix-store
### A content-addressed file system and sync protocol
2023-09-13
Florian Klink / flokli
---
## Whoami
- <!-- .element: class="fragment" -->
flokli
- <!-- .element: class="fragment" -->
Nix/NixOS contributor
- maintain systemd, nss and more low-level stuff there
- <!-- .element: class="fragment" -->
Freelance Nix/DevOps consultant
Note: more Kubernetes/DevOps exposure with work
---
## What is tvix-store?
- <!-- .element: class="fragment" -->
A new implementation of a content-addressed "storage system"
- <!-- .element: class="fragment" -->
part of the Tvix Project, a (WIP) reimplementation of Nix and auxillary components in Rust
- <!-- .element: class="fragment" -->
Storage model: think about git trees and its Merkle DAG…
- <!-- .element: class="fragment" -->
… but with nicer wire format (`.proto`) and hash function (blake3)
---
## Storage model
- <!-- .element: class="fragment" -->
Once you know the root: everything else is content-addressed
- <!-- .element: class="fragment" -->
No timestamps, no uid/gid, no xattrs, only one way to represent the same tree
- <!-- .element: class="fragment" -->
Automatic dedup of identical subtrees in different file system trees
- <!-- .element: class="fragment" -->
Automatic dedup of identical blobs (and you can do more chunking underneath too)
---
## Storage model (cont.)
- <!-- .element: class="fragment" -->
Granular seekable access into blobs
- <!-- .element: class="fragment" -->
verified streaming thanks to BLAKE3 and Bao, faulty data is detected early on
- <!-- .element: class="fragment" -->
Everything below can be retrieved from anyone without having to trust (P2P substitution, CDNs, …)
---
## Usecases
- <!-- .element: class="fragment" -->
File system tree delivery
- <!-- .element: class="fragment" -->
Container image delivery
- <!-- .element: class="fragment" -->
Backing store for VCS
- <!-- .element: class="fragment" -->
Granular access into large datasets
---
## Status
- <!-- .element: class="fragment" -->
In-memory backend, a local K/V backend (Sled)
- <!-- .element: class="fragment" -->
FUSE filesystem
- <!-- .element: class="fragment" -->
A gRPC API to transfer things, bindings for golang and rust
- <!-- .element: class="fragment" -->
some object storage backends in development (GCS, NATS)
- <!-- .element: class="fragment" -->
FUTUREWORK: more storage backends / store composition / in-kernel module?
Notes: of course you can use your own network protocol too, like HTTP CAS or iroh....plug different stores together to represent caches, blobfs
---
## Contributing
- <!-- .element: class="fragment" -->
Join the IRC channel (`#tvl` on `hackint`), bridged to Matrix and XMPP
- <!-- .element: class="fragment" -->
Check our issue tracker
- <!-- .element: class="fragment" -->
Try to use it and tell us how you broke it!
Note: if this sounds useful to you, reach out!
---
# Thanks!
<style>
.container{
display: flex;
}
.col{
flex: 1;
}
</style>
<div class="container">
<div class="col">
Florian Klink / <a href="https://flokli.de">flokli.de</a><br />
<img src="qrcode-flokli.svg" />
</div>
<div class="col">
Tvix / <a href="https://tvix.dev">tvix.dev</a><br />
<img src="qrcode-tvix.svg" />
</div>
</div>
---
## Structure
[tvix-store graph](tvix-store-graph-blob-directory.svg)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 67 KiB

View file

@ -1 +0,0 @@
*.log

View file

@ -1,39 +0,0 @@
{ depot, pkgs, ... }:
let
inherit (pkgs)
fontconfig qrencode runCommand stdenv;
mkQr = url: runCommand "qrcode.png" { } ''
${qrencode}/bin/qrencode -o $out -t SVG -s 5 \
--background=fafafa \
--foreground=000000 \
${url}
'';
in
stdenv.mkDerivation {
name = "2024-nixcon-tvix";
src = ./.;
FONTCONFIG_FILE = pkgs.makeFontsConf {
fontDirectories = with pkgs; [ jetbrains-mono fira fira-code fira-mono lato ];
};
nativeBuildInputs = [ pkgs.reveal-md pkgs.graphviz ];
buildPhase = ''
cp ${depot.tvix.logo}/logo.png tvix-logo.png
cp ${mkQr "https://flokli.de"} qrcode-flokli.svg
cp ${mkQr "https://tvix.dev"} qrcode-tvix.svg
mkdir -p $out
reveal-md --static $out presentation.md
CHROME_CONFIG_HOME=/build/.config reveal-md presentation.md --print $out/slides.pdf --puppeteer-chromium-executable="${pkgs.chromium}/bin/chromium"
# Above command doesn't fail on error, ensure file has been created
[[ -f "$out/slides.pdf" ]] || exit 1
'';
# reveal-md presentation.md --print started timing out possibly due to
# chromium: 133.0.6943.141 -> 134.0.6998.35
meta.ci.skip = true;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 KiB

View file

@ -1,261 +0,0 @@
---
author:
- Florian Klink
date: 2024-10-25
title: "Tvix: Status update"
theme: solarized
revealOptions:
transition: 'fade'
---
# Tvix: Status update
![Tvix Logo](tvix-logo.png)
2024-10-25
Florian Klink (flokli)
---
## Whoami
- flokli<!-- .element: class="fragment" -->
- nixpkgs contributor since 2018, maintaining systemd, nsncd and more<!-- .element: class="fragment" -->
- Freelance Nix/DevOps consultant<!-- .element: class="fragment" -->
---
## What is Tvix?
---
![tvix solves this](./tvix_solves_this.jpg)
<!-- .element: class="r-stretch" -->
---
## What is Tvix?
- A Rust re-implementation of the components of the Nix package manager<!-- .element: class="fragment" -->
- Uses different underlying approaches while retaining Nix compatibility "on the surface"<!-- .element: class="fragment" -->
- modular architecture, allowing to recombine aspects to solve your usecase<!-- .element: class="fragment" -->
- No "end-user CLI" for now, focus on getting the foundational architecture right and 100% correctness with Nix<!-- .element: class="fragment" -->
---
## Topics
- Component overview<!-- .element: class="fragment" -->
- Recent developments<!-- .element: class="fragment" -->
- Next steps<!-- .element: class="fragment" -->
Note: Component overview, to understand a bit better how it's different / updates since the last talk / outlook on roadmap
---
## Structure
- <!-- .element: class="fragment" -->
**tvix-castore**, the granular data storage/syncing engine.
- <!-- .element: class="fragment" -->
**tvix-store**, the "Nix store implementation" on top of tvix-castore
- <!-- .element: class="fragment" -->
**nix-compat**, a library providing access to data formats, protocols and concepts
- <!-- .element: class="fragment" -->
**tvix-eval**, a bytecode interpreter evaluator and core Nix *language* concepts and builtins
- <!-- .element: class="fragment" -->
**tvix-build**, a generic builder interface
- <!-- .element: class="fragment" -->
**tvix-glue**, combines tvix-eval with tvix-[ca]store and tvix-build
Note: one big cargo workspace / go into detail later! / nix-compat: concepts like output path calculation, doesn't depend on tvix crates
tvix-eval: language concepts being Scopes, Thunks, Nix values, "core builtins"
----
![tvix-castore](./tvix-castore.png)
<!-- .element: class="r-stretch" -->
Note: Nix does do content addressing on a store path level, we're on a per-file/chunk in file. That model allows granular syncing and reuse of parts, which will speedup substitution/copying. Because everything is ca, it'll also allow decentralization and local p2p substitution. Think about everyone in the same room serving chunks. verified streaming.
----
![tvix-store](./tvix-store.png)
<!-- .element: class="r-stretch" -->
Note: track all metadata about store paths (think about the sqlite db), and link to castore instead of storing NAR. NarCalculation: this computation, is super nice to cache, as this info
never needs to expire, and is reconstructable in a pure CA manner.
----
![tvix-store](./nix-compat.png)
<!-- .element: class="r-stretch" -->
Note: kept as a somewhat separate library, Tvix "first consumer". But use from your code, it doesn't depend on Tvix bits. Regularly factoring out Nix concepts into this library
----
![tvix-eval](./tvix-eval.png)
<!-- .element: class="r-stretch" -->
Note: only includes basic builtins, like string manipulation, math, …. Other crates can bring their own builtins
----
![tvix-build](./tvix-build.png)
<!-- .element: class="r-stretch" -->
Note: Not aware of Nix, store paths etc. just flexible enough to express everything in there. Use it for your own build system!
----
![tvix-glue](./tvix-glue.png)
<!-- .element: class="r-stretch" -->
Note: connects the evaluator to store and builders
----
![nar-bridge](./nar-bridge.png)
<!-- .element: class="r-stretch" -->
Note: Example on how to use this: Nix HTTP binary cache lens into tvix-[ca]store, allows Nix to download from and push into. It renders NARs on-the-fly
---
## Updates
Rough overview. Check blog posts and `git log` for details!
----
## Updates (#1)
- <!-- .element: class="fragment" -->
Fixes on error catchability and context behaviour
- <!-- .element: class="fragment" -->
More compact Nix Value types (memory-wise)
- <!-- .element: class="fragment" -->
`tvix-cli` REPL global scope manipulation (assign variables and use them in next command)
- <!-- .element: class="fragment" -->
`firefox.outPath` and `pkgsCross.aarch64-multiplatform.firefox.outPath` correct and added to CI 🎉
Notes: catchability/context to align behaviour with nix / … / assign variables and use them in the next REPL command
----
## Updates (#2)
- <!-- .element: class="fragment" -->
OpenTelemetry integration, trace propagation throughout the entire stack
- <!-- .element: class="fragment" -->
more backends in tvix-[ca]store (`object_store`/`local fs`/`redb`/`bigtable`/…)
- <!-- .element: class="fragment" -->
nar-bridge RIIR, was deployed as a fetch-through cache for cache.nixos.org at Bornhack
- <!-- .element: class="fragment" -->
store composition/combinators
- <!-- .element: class="fragment" -->
wiring up of builds (without reference propagation yet, but reference scanning)
Notes: o11y already proven super helpful for debugging where time is spent / first version of composition / builds waiting on reference propagation
----
## Other Updates
- <!-- .element: class="fragment" -->
A lot of the tooling for `cache.nixos.org` usage / closure analysis making use of and contributing to `nix-compat` (`@edef`) 🎉
- <!-- .element: class="fragment" -->
"Replit using `tvix-[ca]store` and reporting 10x storage reduction" (`@cbrewster`) 🎉
- <!-- .element: class="fragment" -->
"Devenv is switching to Tvix" (Talk on Saturday 12:55, `@domenkozar`) 🎉
---
## Next steps (in no specific order):
- <!-- .element: class="fragment" -->
Test suite classification system, to decouple test cases from test runner and share with other Nix impls
- <!-- .element: class="fragment" -->
(Continuous) Docs deployment, website restructuring
- <!-- .element: class="fragment" -->
Interactions with the evaluator (LSP, DAP)
- <!-- .element: class="fragment" -->
Persistent deployment of nar-bridge, as fetch-through cache for `cache.nixos.org`
- <!-- .element: class="fragment" -->
Blob / Chunking protocol improvements (use local chunks where possible, allow readahead)
Note: Allows filtering, reusing test cases in Nixcpp and Lix.
Mention some behavorial changes found.
Mention fetchTree
Make it easier for new contributors to get started
LSP / Debug adapter protocol / tvix-eval jobs
/ … / is gonna improve performance for IO into store paths
----
## Next steps (in no specific order) (cont.):
- <!-- .element: class="fragment" -->
"Build/Fetch realization goal engine" (tradeoff network bandwidth and CPU time)
- <!-- .element: class="fragment" -->
More per-store metrics and instance names
- <!-- .element: class="fragment" -->
More backends (p2p discovery, ipfs, …)
Note: needed for builds / to get better insights into cache hit ratios etc.
---
## Contributing
- <!-- .element: class="fragment" -->
Join the IRC channel (`#tvix-dev` on `hackint`), bridged to Matrix and XMPP
- <!-- .element: class="fragment" -->
Check our issue tracker (b.tvl.fyi), as well as `tvix/docs/src/TODO.md` (but ask!)
- <!-- .element: class="fragment" -->
Try to use it and tell us how you broke it!
- <!-- .element: class="fragment" -->
Sponsoring
Note: make sure to ask in the channel to ensure noone is already working on this
---
# Thanks to...
- <!-- .element: class="fragment" -->
all Tvix contributors
- <!-- .element: class="fragment" -->
Nix community members for their input on the architecture
- <!-- .element: class="fragment" -->
Sponsors
Note: some drive-by, some sticking around longer / NLNET / Clan
----
# Questions?
<style>
.container{
display: flex;
}
.col{
flex: 1;
}
</style>
<div class="container">
<div class="col">
Florian Klink / <a href="https://flokli.de">flokli.de</a><br />
<img src="qrcode-flokli.svg" />
</div>
<div class="col">
Tvix / <a href="https://tvix.dev">tvix.dev</a><br />
<img src="qrcode-tvix.svg" />
</div>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB