1
0

feat: rewrite to more nixy flakes

This commit is contained in:
2026-03-10 17:41:28 +01:00
parent 2c8cf957ee
commit d41abb956a
36 changed files with 1610 additions and 779 deletions
+11 -35
View File
@@ -1,32 +1,22 @@
{
pkgs ? import <nixpkgs> { config.allowUnfree = true; },
config ? (import <nixpkgs/nixos> { }).config,
fetchzip ? pkgs.fetchzip,
...
}:
final: prev:
let
system = {
stateVersion = config.system.stateVersion;
};
use = path: pkgs.callPackage (import path) { inherit pkgs; };
fetchzip = prev.fetchzip;
use = path: prev.callPackage (import path) { pkgs = prev; };
in
{
inherit system;
wallpaper = use ./wallpaper/default.nix;
tetrio.desktop = use ./tetrio/default.nix;
wallpaper = use ./wallpaper;
tetrio.desktop = use ./tetrio;
tetrio.plus =
let
repo = {
owner = "UniQMG";
name = "tetrio-plus";
job = "11675178434";
hash = "sha256-j3ACcnT64eMQtWYDGOE2oGXpnN5EUqk+lyV6ARBEtU8=";
};
src = fetchzip {
url = "https://gitlab.com/${repo.owner}/${repo.name}/-/jobs/${repo.job}/artifacts/raw/app.asar.zip";
hash = repo.hash;
hash = "sha256-j3ACcnT64eMQtWYDGOE2oGXpnN5EUqk+lyV6ARBEtU8=";
};
in
"${src}/app.asar";
@@ -34,25 +24,11 @@ in
simple-connected = use ./tetrio/skins/simple-connected.nix;
};
leveldb-cli = use ./leveldb/default.nix;
leveldb-cli = use ./leveldb;
config.neovim = use ./neovim/default.nix;
config.fish = use ./fish/default.nix;
configs.neovim = use ./neovim;
configs.fish = use ./fish;
font.monaco = use ./monaco-font/default.nix;
home-manager = {
module =
let
home-manager = fetchzip {
url = "https://github.com/nix-community/home-manager/archive/master.tar.gz";
hash = "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=";
};
in
import "${home-manager}/nixos";
sharedModules = [
./home-manager/initialFile.nix
./tetrio/module.nix
];
};
nimbus-roman = use ./nimbus;
monaco = use ./monaco-font;
}
-180
View File
@@ -1,180 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
makeWrapper,
makeDesktopItem,
nodejs,
electron_39,
element-web,
sqlcipher,
callPackage,
typescript,
# command line arguments which are always set
commandLineArgs ? "",
yarnConfigHook,
yarnBuildHook,
fetchYarnDeps,
asar,
copyDesktopItems,
darwin,
...
}:
let
pinData = import ./element-desktop-pin.nix;
inherit (pinData.hashes) desktopSrcHash desktopYarnHash;
executableName = "element-desktop";
electron = electron_39;
seshat = callPackage ./seshat { };
in
stdenv.mkDerivation (
finalAttrs:
removeAttrs pinData [ "hashes" ]
// {
pname = "element-desktop";
name = "${finalAttrs.pname}-${finalAttrs.version}";
src = fetchFromGitHub {
owner = "element-hq";
repo = "element-desktop";
rev = "v${finalAttrs.version}";
hash = desktopSrcHash;
};
offlineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = desktopYarnHash;
};
env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
nativeBuildInputs = [
asar
copyDesktopItems
nodejs
makeWrapper
typescript
yarnConfigHook
yarnBuildHook
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.autoSignDarwinBinariesHook ];
inherit seshat;
# Only affects unused scripts in $out/share/element/electron/scripts. Also
# breaks because there are some `node`-scripts with a `npx`-shebang and
# this shouldn't be in the closure just for unused scripts.
dontPatchShebangs = true;
postPatch = ''
cp -r ${electron.dist} electron-dist
chmod -R u+w electron-dist
substituteInPlace package.json \
--replace-fail \
' electron-builder",' \
' electron-builder --dir -c.electronDist=electron-dist -c.electronVersion=${electron.version} -c.mac.identity=null",'
# `@electron/fuses` tries to run `codesign` and fails. Disable and use autoSignDarwinBinariesHook instead
substituteInPlace ./electron-builder.ts \
--replace-fail "resetAdHocDarwinSignature:" "// resetAdHocDarwinSignature:"
# Need to disable asar integrity check to copy in native seshat files, see postBuild phase
substituteInPlace ./electron-builder.ts \
--replace-fail "enableEmbeddedAsarIntegrityValidation: true" "enableEmbeddedAsarIntegrityValidation: false"
'';
preBuild = ''
# Apply upstream patch
# Can be removed if upstream removes patches/@types+auto-launch+5.0.5.patch introduced in
# https://github.com/element-hq/element-desktop/commit/5e882f8e08d58bf9663c8e3ab33885bf7b3709de
node ./node_modules/patch-package/index.js
'';
postBuild = ''
# relative path to app.asar differs on Linux and MacOS
packed=$(find ./dist -name app.asar)
asar extract "$packed" tmp-app
# linking here leads to Error: tmp-app/node_modules/matrix-seshat: file ... links out of the package
cp -r $seshat tmp-app/node_modules/matrix-seshat
asar pack tmp-app "$packed"
'';
installPhase = ''
runHook preInstall
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out/Applications" "$out/bin"
mv dist/mac*/Element.app "$out/Applications"
ln -s '${element-web}' "$out/Applications/Element.app/Contents/Resources/webapp"
wrapProgram "$out/Applications/Element.app/Contents/MacOS/Element" \
--add-flags ${lib.escapeShellArg commandLineArgs}
makeWrapper "$out/Applications/Element.app/Contents/MacOS/Element" "$out/bin/${executableName}"
''
+ lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
mkdir -p "$out/bin" "$out/share"
cp -a dist/*-unpacked/resources $out/share/element
ln -s '${element-web}' "$out/share/element/webapp"
# icon, used in makeDesktopItem
mkdir -p "$out/share/icons/hicolor/512x512/apps"
ln -s "$out/share/element/build/icon.png" "$out/share/icons/hicolor/512x512/apps/element.png"
# executable wrapper
# LD_PRELOAD workaround for sqlcipher not found: https://github.com/matrix-org/seshat/issues/102
makeWrapper '${lib.getExe electron}' "$out/bin/${executableName}" \
--set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher.so \
--add-flags "$out/share/element/app.asar" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
--add-flags ${lib.escapeShellArg commandLineArgs}
''
+ ''
runHook postInstall
'';
# The desktop item properties should be kept in sync with data from upstream:
# https://github.com/element-hq/element-desktop/blob/develop/package.json
desktopItems = [
(makeDesktopItem {
name = "element-desktop";
exec = "${executableName} %u";
icon = "element";
desktopName = "Element";
genericName = "Matrix Client";
comment = finalAttrs.meta.description;
categories = [
"Network"
"InstantMessaging"
"Chat"
];
startupWMClass = "Element";
mimeTypes = [
"x-scheme-handler/element"
"x-scheme-handler/io.element.desktop"
];
})
];
passthru = {
# run with: nix-shell ./maintainers/scripts/update.nix --argstr package element-desktop
updateScript = ./update.sh;
};
meta = {
description = "Feature-rich client for Matrix.org";
homepage = "https://element.io/";
changelog = "https://github.com/element-hq/element-desktop/blob/v${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.agpl3Plus;
teams = [ lib.teams.matrix ];
inherit (electron.meta) platforms;
mainProgram = "element-desktop";
};
}
)
-7
View File
@@ -1,7 +0,0 @@
{
"version" = "1.12.10";
"hashes" = {
"desktopSrcHash" = "sha256-2LQBT3+2JTR3XHO3DynOp8cw2m2SB/mGH01e3SFD/IM=";
"desktopYarnHash" = "sha256-QIzuVKmUS4tqXAzhpfLZOp51kLbfC1M2nrff8e+sdg4=";
};
}
-74
View File
@@ -1,74 +0,0 @@
{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
sqlcipher,
nodejs,
python3,
yarn,
fixup-yarn-lock,
fetchYarnDeps,
removeReferencesTo,
}:
let
pinData = lib.importJSON ./pin.json;
in
rustPlatform.buildRustPackage rec {
pname = "seshat-node";
inherit (pinData) version cargoHash;
src = fetchFromGitHub {
owner = "matrix-org";
repo = "seshat";
rev = version;
hash = pinData.srcHash;
};
sourceRoot = "${src.name}/seshat-node/native";
nativeBuildInputs = [
nodejs
python3
yarn
fixup-yarn-lock
];
buildInputs = [ sqlcipher ];
npm_config_nodedir = nodejs;
yarnOfflineCache = fetchYarnDeps {
yarnLock = src + "/seshat-node/yarn.lock";
sha256 = pinData.yarnHash;
};
buildPhase = ''
runHook preBuild
cd ..
chmod u+w . ./yarn.lock
export HOME=$PWD/tmp
mkdir -p $HOME
yarn config --offline set yarn-offline-mirror $yarnOfflineCache
fixup-yarn-lock yarn.lock
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules/
node_modules/.bin/neon build --release -- --target ${stdenv.hostPlatform.rust.rustcTarget} -Z unstable-options --out-dir target/release
runHook postBuild
'';
doCheck = false;
installPhase = ''
runHook preInstall
shopt -s extglob
rm -rf native/!(index.node)
rm -rf node_modules $HOME
cp -r . $out
${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc.cc} $out/native/index.node
runHook postInstall
'';
disallowedReferences = [ stdenv.cc.cc ];
}
-6
View File
@@ -1,6 +0,0 @@
{
"version": "2.3.3",
"srcHash": "sha256-HmKHWFoO8TQ9S/RcJnJ3h85/2uSkqGrgLnX82hkux4Q=",
"yarnHash": "1cbkv8ap7f8vxl5brzqb86d2dyxg555sz67cldrp0vgnk8sq6ibp",
"cargoHash": "sha256-klrFk0gpqQu/9MzLEYMNqEBETZMXtZJX67Sm5ZqyHfE=="
}
-49
View File
@@ -1,49 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=../../../../../../ -i bash -p wget prefetch-yarn-deps yarn nix-prefetch nix-prefetch-github
if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
echo "Regenerates packaging data for the seshat package."
echo "Usage: $0 [git release tag]"
exit 1
fi
version="$1"
set -euo pipefail
if [ -z "$version" ]; then
version="$(wget -O- "https://api.github.com/repos/matrix-org/seshat/tags" | jq -r '.[] | .name' | sort --version-sort | tail -1)"
fi
SRC="https://raw.githubusercontent.com/matrix-org/seshat/$version"
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
pushd $tmpdir
wget "$SRC/seshat-node/yarn.lock"
yarn_hash=$(prefetch-yarn-deps yarn.lock)
popd
src_hash=$(nix-prefetch-github matrix-org seshat --rev ${version} | jq -r .hash)
cat > pin.json << EOF
{
"version": "$version",
"srcHash": "$src_hash",
"yarnHash": "$yarn_hash",
"cargoHash": "0000000000000000000000000000000000000000000000000000"
}
EOF
cargo_hash=$(nix-prefetch "{ sha256 }: (import ../../../../../.. {}).element-desktop.seshat.cargoDeps")
cat > pin.json << EOF
{
"version": "$version",
"srcHash": "$src_hash",
"yarnHash": "$yarn_hash",
"cargoHash": "$cargo_hash"
}
EOF
+5 -9
View File
@@ -1,10 +1,6 @@
{
pkgs ? import <nixpkgs> { },
lib ? pkgs.lib,
...
}:
{ stdenv, ... }:
pkgs.stdenv.mkDerivation rec {
stdenv.mkDerivation rec {
pname = "fish-config";
version = "1.0";
@@ -14,9 +10,9 @@ pkgs.stdenv.mkDerivation rec {
};
installPhase = ''
mkdir -p $out
cp -r ${src}/* $out/
'';
mkdir -p $out
cp -r ${src}/* $out/
'';
dontUnpack = true;
dontBuild = true;
+10
View File
@@ -0,0 +1,10 @@
{
description = "Pkgs overlay";
inputs = { };
outputs =
{ self, ... }:
{
overlays.default = final: prev: (import ./default.nix final prev);
};
}
+3 -5
View File
@@ -1,12 +1,10 @@
{
pkgs ? import <nixpkgs> { },
}:
{ buildGoModule, fetchFromGitHub, ... }:
pkgs.buildGoModule {
buildGoModule {
name = "leveldb-cli";
version = "1.0.0";
src = pkgs.fetchFromGitHub {
src = fetchFromGitHub {
owner = "theblueplum";
repo = "leveldb-cli";
rev = "main";
+2 -6
View File
@@ -1,10 +1,6 @@
{
pkgs ? import <nixpkgs> { system = builtins.currentSystem; },
lib ? pkgs.lib,
...
}:
{ stdenv, lib, ... }:
pkgs.stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "monaco-font";
version = "1.0";
-1
View File
@@ -1 +0,0 @@
/nix/store/kp450zrxxva5fv7wwpnz841vgxan6c49-nixos-system-blueplum-25.05.811874.daf6dc47aa4b
+2 -6
View File
@@ -1,10 +1,6 @@
{
pkg ? import <nixpkg>,
lib ? pkg.lib,
...
}:
{ stdenv, ... }:
pkg.stdenv.mkDerivation rec {
stdenv.mkDerivation rec {
pname = "neovim-config";
version = "1.0";
+23
View File
@@ -0,0 +1,23 @@
{ lib, stdenv, ... }:
stdenv.mkDerivation {
pname = "nimbus-roman";
version = "1.0";
src = ./.;
dontUnpack = true;
installPhase = ''
mkdir -p $out/share/fonts/opentype
cp $src/nimbus.otf $out/share/fonts/opentype/nimbus.otf
cp $src/nimbus-bold.otf $out/share/fonts/opentype/nimbus-bold.otf
cp $src/nimbus-bolditalic.otf $out/share/fonts/opentype/nimbus-bolditalic.otf
'';
meta = with lib; {
description = "Nimbus Roman No. 9 L";
license = licenses.gpl2;
platforms = platforms.all;
};
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13 -21
View File
@@ -1,30 +1,22 @@
{
pkgs ? import <nixpkgs> { },
fetchzip ? pkgs.fetchzip,
withTetrioPlus ? false,
tetrio-plus ? pkgs.tetrio-plus,
dpkg,
fetchzip,
tetrio-desktop,
withTetrioPlus ? false,
tetrio-plus,
...
}:
let
tetrio-desktop =
let
version = "10";
in
{
inherit version;
src = fetchzip {
url = "https://tetr.io/about/desktop/builds/${version}/TETR.IO%20Setup.deb";
hash = "sha256-2FtFCajNEj7O8DGangDecs2yeKbufYLx1aZb3ShnYvw=";
nativeBuildInputs = with pkgs; [ dpkg ];
};
};
version = "10";
src = fetchzip {
url = "https://tetr.io/about/desktop/builds/${version}/TETR.IO%20Setup.deb";
hash = "sha256-2FtFCajNEj7O8DGangDecs2yeKbufYLx1aZb3ShnYvw=";
nativeBuildInputs = [ dpkg ];
};
in
(pkgs.tetrio-desktop.overrideAttrs {
version = tetrio-desktop.version;
src = tetrio-desktop.src;
}).override {
inherit withTetrioPlus tetrio-plus;
(tetrio-desktop.overrideAttrs { inherit src version; }).override {
inherit withTetrioPlus tetrio-plus;
}
+11 -10
View File
@@ -1,31 +1,32 @@
{
pkgs ? import <nixpkgs> { },
mpkgs ? import /etc/nixos/pkgs/default.nix { },
stdenv,
lib,
leveldb-cli,
value,
origin ? "https://tetr.io",
key ? "userConfig",
value,
...
...
}:
let
src = ./.;
in
pkgs.stdenv.mkDerivation {
stdenv.mkDerivation {
pname = "tetrio-leveldb";
version = "1";
inherit src;
nativeBuildInputs = [ mpkgs.leveldb-cli ];
nativeBuildInputs = [ leveldb-cli ];
buildPhase = ''
runHook preBuild
${pkgs.lib.getExe mpkgs.leveldb-cli} \
${lib.getExe leveldb-cli} \
$out \
${pkgs.lib.escapeShellArg origin} \
${pkgs.lib.escapeShellArg key} \
${pkgs.lib.escapeShellArg (builtins.toJSON value)}
${lib.escapeShellArg origin} \
${lib.escapeShellArg key} \
${lib.escapeShellArg (builtins.toJSON value)}
runHook postBuild
'';
+1 -3
View File
@@ -18,8 +18,6 @@ let
else
x;
leveldb = import ./leveldb.nix;
cfg = config.programs.tetrio-desktop;
in
{
@@ -586,7 +584,7 @@ in
home.initialFile.".config/tetrio-desktop/Local Storage/leveldb" = {
mode = "0644";
source = leveldb {
source = pkgs.callPackage ./leveldb.nix {
value = {
handling =
let
+10 -13
View File
@@ -1,21 +1,18 @@
{
pkgs ? import <nixpkgs> { },
...
}:
{ stdenv, fetchurl, ... }:
let
src = pkgs.fetchurl {
src = fetchurl {
url = "https://you.have.fail/tetrioplus/data/tpsefiles/skin/SpooKoArts/simple_connected.zip.tpse";
hash = "sha256-dIrEpEV9Gy2iU6K6rMrNX4XFQEchkJqSmOuQwVF4EQQ=";
};
in
pkgs.stdenv.mkDerivation {
stdenv.mkDerivation {
name = "simple-connected";
version = "2022-06-26";
inherit src;
dontUnpack = true;
dontBuild = true;
dontUnpack = true;
dontBuild = true;
installPhase = ''
runHook preInstall
@@ -23,9 +20,9 @@ pkgs.stdenv.mkDerivation {
runHook postInstall
'';
fixupPhase = ''
runHook preFixup
sed -i 's/\bskin\b/value/' $out
runHook postFixup
'';
fixupPhase = ''
runHook preFixup
sed -i 's/\bskin\b/value/' $out
runHook postFixup
'';
}
+2 -6
View File
@@ -1,10 +1,6 @@
{
pkgs ? import <nixpkgs> { },
lib ? pkgs.lib,
...
}:
{ stdenv, ... }:
pkgs.stdenv.mkDerivation rec {
stdenv.mkDerivation rec {
pname = "wallpaper";
version = "1.0";