Merge remote-tracking branch 'ni/master'

This commit is contained in:
lassulus 2020-12-30 13:00:28 +01:00
commit 50a3903825
18 changed files with 296 additions and 73 deletions

View File

@ -5,6 +5,7 @@ writeHaskellPackage "cabal-read" {
executables.ghc-options = {
extra-depends = ["Cabal"];
text = /* haskell */ ''
{-# LANGUAGE CPP #-}
module Main (main) where
import Data.List
import Data.Maybe
@ -26,6 +27,9 @@ writeHaskellPackage "cabal-read" {
case lookup (mkUnqualComponentName name) (condExecutables desc) of
Just exe ->
putStrLn . intercalate " " . fromMaybe [] . lookup GHC
#if MIN_VERSION_Cabal(3,0,0)
. perCompilerFlavorToList
#endif
. options . buildInfo . condTreeData $ exe
Nothing ->

View File

@ -1,24 +1,22 @@
{ coreutils, dash, fetchgit, gnused, stdenv, ucspi-tcp }:
with import <stockholm/lib>;
let
version = "1.2.8";
in stdenv.mkDerivation {
name = "htgen-${version}";
{ fetchgit, lib, pkgs, stdenv }:
stdenv.mkDerivation rec {
pname = "htgen";
version = "1.3.0";
src = fetchgit {
url = "http://cgit.krebsco.de/htgen";
rev = "refs/tags/v${version}";
sha256 = "046c05jswar2agagqixad3idqxca494aaf199h6bdn02cyzygnpq";
sha256 = "0p3517wkfpvip4z0axh0b4v1jm1nqpppldnhq4806c0p33vrjxnf";
};
installPhase = ''
mkdir -p $out/bin
{
echo '#! ${dash}/bin/dash'
echo 'export PATH=${makeBinPath [
coreutils
gnused
ucspi-tcp
echo '#! ${pkgs.dash}/bin/dash'
echo 'export PATH=${lib.makeBinPath [
pkgs.coreutils
pkgs.jq
pkgs.ucspi-tcp
]}''${PATH+":$PATH"}'
sed 's:^Server=htgen$:&/${version}:' htgen
} > $out/bin/htgen

View File

@ -11,7 +11,6 @@ with import <stockholm/lib>;
boot = {
initrd = {
availableKernelModules = [ "ahci" ];
luks.cryptoModules = [ "aes" "sha512" "xts" ];
luks.devices.luksroot.device = "/dev/sda2";
};
};

View File

@ -15,7 +15,6 @@ with import <stockholm/lib>;
tv.x0vncserver.enable = true;
boot.initrd.luks.devices.muca.device = "/dev/sda2";
boot.initrd.luks.cryptoModules = [ "aes" "sha512" "xts" ];
boot.initrd.availableKernelModules = [ "ahci" ];
boot.kernelModules = [ "fbcon" "kvm-intel" ];
boot.extraModulePackages = [ ];

View File

@ -15,10 +15,7 @@ with import <stockholm/lib>;
<stockholm/tv/2configs/xserver>
];
boot.initrd.luks = {
cryptoModules = [ "aes" "sha512" "xts" ];
devices.luks1.device = "/dev/sda2";
};
boot.initrd.luks.devices.luks1.device = "/dev/sda2";
# Don't use UEFI because current disk was partitioned/formatted for AO753.
# TODO remove following bool.loader section after repartitioning/reformatting

View File

@ -11,13 +11,10 @@ with import <stockholm/lib>;
krebs.build.user = mkForce config.krebs.users.itak;
boot.initrd.availableKernelModules = [ "ahci" ];
boot.initrd.luks = {
cryptoModules = [ "aes" "sha512" "xts" ];
devices.querel-luks1 = {
boot.initrd.luks.devices.querel-luks1 = {
allowDiscards = true;
device = "/dev/sda2";
};
};
boot.kernelModules = [ "kvm-intel" ];
boot.loader = {
efi.canTouchEfiVariables = true;

View File

@ -16,10 +16,7 @@ with import <stockholm/lib>;
<stockholm/tv/2configs/xserver>
];
boot.initrd.luks = {
cryptoModules = [ "aes" "sha512" "xts" ];
devices.wuca.device = "/dev/sda2";
};
boot.initrd.luks.devices.wuca.device = "/dev/sda2";
fileSystems = {
"/" = {

View File

@ -111,10 +111,7 @@ with import <stockholm/lib>;
}
];
boot.initrd.luks = {
cryptoModules = [ "aes" "sha512" "xts" ];
devices.xuca.device = "/dev/sda2";
};
boot.initrd.luks.devices.xuca.device = "/dev/sda2";
fileSystems = {
"/" = {
@ -154,6 +151,4 @@ with import <stockholm/lib>;
# The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "15.09";
virtualisation.virtualbox.host.enable = true;
}

View File

@ -16,10 +16,7 @@ with import <stockholm/lib>;
<stockholm/tv/2configs/xserver>
];
boot.initrd.luks = {
cryptoModules = [ "aes" "sha512" "xts" ];
devices.zuca.device = "/dev/sda2";
};
boot.initrd.luks.devices.zuca.device = "/dev/sda2";
fileSystems = {
"/" = {

View File

@ -90,9 +90,6 @@ with import <stockholm/lib>;
{
services.cron.enable = false;
services.nscd.enable =
# Since 20.09 nscd doesn't cache anymore.
versionAtLeast (versions.majorMinor version) "20.09";
services.ntp.enable = false;
services.timesyncd.enable = true;
}

View File

@ -4,20 +4,45 @@
cfg.packageDir = "/var/lib/elm-packages";
cfg.port = 7782;
# TODO secret files
cfg.htpasswd = "/var/lib/certs/package.elm-lang.org/htpasswd";
cfg.sslCertificate = "/var/lib/certs/package.elm-lang.org/fullchain.pem";
cfg.sslCertificateKey = "/var/lib/certs/package.elm-lang.org/key.pem";
semverRegex =
"(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?";
in {
services.nginx.virtualHosts."package.elm-lang.org" = {
addSSL = true;
# TODO secret files
sslCertificate = "/var/lib/certs/package.elm-lang.org/fullchain.pem";
sslCertificateKey = "/var/lib/certs/package.elm-lang.org/key.pem";
sslCertificate = cfg.sslCertificate;
sslCertificateKey = cfg.sslCertificateKey;
locations."/all-packages".extraConfig = ''
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
proxy_pass_header Server;
'';
locations."/all-packages/since/".extraConfig = ''
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
proxy_pass_header Server;
'';
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)/(?:zipball|elm.json|endpoint.json)\$".extraConfig = ''
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>${semverRegex})\$".extraConfig = ''
auth_basic "Restricted Area";
auth_basic_user_file ${cfg.htpasswd};
proxy_set_header X-User $remote_user;
proxy_set_header X-Author $author;
proxy_set_header X-Package $pname;
proxy_set_header X-Version $version;
proxy_pass_header Server;
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
'';
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>${semverRegex})/(?:zipball|elm.json|endpoint.json)\$".extraConfig = ''
set $zipball "${cfg.packageDir}/$author/$pname/$version/zipball";
proxy_set_header X-Author $author;
proxy_set_header X-Package $pname;
@ -39,14 +64,15 @@ in {
krebs.htgen.elm-packages-proxy = {
port = cfg.port;
script = /* sh */ ''(. ${pkgs.writeDash "elm-packages-proxy.sh" ''
script = /* sh */ ''. ${pkgs.writeDash "elm-packages-proxy.sh" ''
PATH=${lib.makeBinPath [
pkgs.attr
pkgs.coreutils
pkgs.curl
pkgs.findutils
pkgs.gnugrep
pkgs.jq
pkgs.unzip
pkgs.p7zip
]}
export PATH
file_response() {(
@ -73,7 +99,7 @@ in {
printf "HTTP/1.1 $status_code $status_reason\r\n"
printf 'Connection: close\r\n'
printf 'Content-Length: %d\r\n' ''${#response_body}
printf 'Content-Length: %d\r\n' "$(expr ''${#response_body} + 1)"
printf 'Content-Type: %s\r\n' "$content_type"
printf 'Server: %s\r\n' "$Server"
printf '\r\n'
@ -99,7 +125,7 @@ in {
;;
elm.json)
if ! test -f "$elmjson"; then
unzip -p "$zipball" \*/elm.json > "$elmjson"
7z x -so "$zipball" \*/elm.json > "$elmjson"
fi
file_response 200 OK "$elmjson" 'application/json; charset=UTF-8'
exit
@ -119,36 +145,110 @@ in {
;;
esac
;;
'POST /all-packages/since/'*)
'POST /packages/'*)
# TODO only show newest?
my_packages=$(
cd ${cfg.packageDir}
find -mindepth 3 -maxdepth 3 |
author=$req_x_author
pname=$req_x_package
user=$req_x_user
version=$req_x_version
action=uploading
force=''${req_x_force-false}
zipball=${cfg.packageDir}/$author/$pname/$version/zipball
elmjson=$HOME/cache/$author%2F$pname%2F$version%2Felm.json
endpointjson=$HOME/cache/$author%2F$pname%2F$version%2Fendpoint.json
if test -e "$zipball"; then
if test "$force" = true; then
zipball_owner=$(attr -q -g X-User "$zipball" || :)
if test "$zipball_owner" = "$req_x_user"; then
action=replacing
rm -f "$elmjson"
rm -f "$endpointjson"
else
string_response 403 Forbidden \
"package already exists: $author/$pname@$version" \
text/plain
exit
fi
else
string_response 409 Conflict \
"package already exists: $author/$pname@$version" \
text/plain
exit
fi
fi
echo "user $user is $action package $author/$pname@$version" >&2
# TODO check package
mkdir -p "$(dirname "$zipball")"
head -c $req_content_length > "$zipball"
attr -q -s X-User -V "$user" "$zipball" || :
string_response 200 OK \
"package created: $author/$pname@$version" \
text/plain
exit
;;
'GET /all-packages'|'POST /all-packages')
response=$(mktemp -t htgen.$$.elm-packages-proxy.all-packages.XXXXXXXX)
trap "rm $response >&2" EXIT
{
# upstream packages
curl -fsS https://package.elm-lang.org"$Request_URI"
# private packages
(cd ${cfg.packageDir}; find -mindepth 3 -maxdepth 3) |
jq -Rs '
split("\n") |
map(
select(.!="") |
match("^\\./(?<author>[^/]+)/(?<pname>[^/]+)/(?<version>[^/]+)$").captures |
map({key:.name,value:.string}) |
from_entries
) |
reduce .[] as $item ({};
($item|"\(.author)/\(.pname)") as $name |
. + { "\($name)": ((.[$name] // []) + [$item.version]) }
)
'
} |
jq -cs add > $response
file_response 200 OK "$response" 'application/json; charset=UTF-8'
exit
;;
'GET /all-packages/since/'*|'POST /all-packages/since/'*)
response=$(mktemp -t htgen.$$.elm-packages-proxy.all-packages.XXXXXXXX)
trap "rm $response >&2" EXIT
{
# upstream packages
curl -fsS https://package.elm-lang.org"$Request_URI"
# private packages
(cd ${cfg.packageDir}; find -mindepth 3 -maxdepth 3) |
jq -Rs '
split("\n") |
map(
select(.!="") |
sub("^\\./(?<author>[^/]+)/(?<pname>[^/]+)/(?<version>[^/]+)$";"\(.author)/\(.pname)@\(.version)")
)
) |
sort_by(split("@") | [.[0]]+(.[1]|split("."))) |
reverse
'
)
} |
jq -cs add > $response
new_upstream_packages=$(
curl -fsS https://package.elm-lang.org"$Request_URI"
)
response=$(
jq -n \
--argjson my_packages "$my_packages" \
--argjson new_upstream_packages "$new_upstream_packages" \
'$new_upstream_packages + $my_packages'
)
string_response 200 OK "$response" 'application/json; charset=UTF-8'
file_response 200 OK "$response" 'application/json; charset=UTF-8'
exit
;;
esac
''})'';
''}'';
};
}

View File

@ -26,7 +26,6 @@ with import <stockholm/lib>;
{ from = "postmaster@viljetic.de"; to = tv.mail; } # RFC 822
{ from = "mirko@viljetic.de"; to = mv-ni.mail; }
{ from = "tomislav@viljetic.de"; to = tv.mail; }
{ from = "tv@destroy.dyn.shackspace.de"; to = tv.mail; }
{ from = "tv@viljetic.de"; to = tv.mail; }
{ from = "tv@shackspace.de"; to = tv.mail; }
];

View File

@ -83,6 +83,9 @@ let {
krops = {
cgit.desc = "deployment tools";
};
mailaids = {
cgit.desc = "Assortment of aids for working with electronic mail";
};
much = {};
netcup = {
cgit.desc = "netcup command line interface";

View File

@ -48,9 +48,9 @@
};
services.tlp.enable = true;
services.tlp.extraConfig = ''
START_CHARGE_THRESH_BAT0=80
'';
services.tlp.settings = {
START_CHARGE_THRESH_BAT0 = 80;
};
nix = {
buildCores = 2;

View File

@ -0,0 +1,21 @@
{ mkDerivation, aeson, aeson-pretty, base, bytestring
, case-insensitive, fetchgit, lens, optparse-applicative
, purebred-email, stdenv, text, vector, word8
}:
mkDerivation {
pname = "mailaids";
version = "1.0.0";
src = fetchgit {
url = "https://cgit.krebsco.de/mailaids";
sha256 = "15h0k82czm89gkwhp1rwdy77jz8dmb626qdz7c2narvz9j7169v5";
rev = "8f11927ea74d6adb332c884502ebd9c486837523";
fetchSubmodules = true;
};
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
aeson aeson-pretty base bytestring case-insensitive lens
optparse-applicative purebred-email text vector word8
];
license = stdenv.lib.licenses.mit;
}

View File

@ -2,8 +2,16 @@
rxvt_unicode.overrideAttrs (old: {
patches = old.patches ++ [
(fetchurl {
name = "rxvt-unicode.cancel-running-selection-request.patch";
url = https://cgit.krebsco.de/rxvt-unicode/patch/?id=15f3f94;
sha256 = "12vldwsds27c9l15ffc6svk9mj17jhypcz736pvpmpqbsymlkz2p";
})
# Fix segfault when calling editor-input from XMonad.
(fetchurl {
name = "rxvt-unicode.no-perl_destruct.patch";
url = "https://cgit.krebsco.de/rxvt-unicode/patch/?id=d63f96a";
sha256 = "0i8nqrqgprv7cygflkrdp5zx75dv9bv84vrr2yc3vnfpqxamc43n";
})
];
})

View File

@ -0,0 +1,18 @@
{ pkgs }:
pkgs.writeDashBin "editor-input" ''
exec \
${pkgs.utillinux}/bin/setsid -f \
${pkgs.with-tmpdir}/bin/with-tmpdir -t editor-input.XXXXXXXX \
${pkgs.writeDash "editor-input.sh" ''
f=$TMPDIR/input
${pkgs.rxvt_unicode}/bin/urxvt -name editor-input-urxvt -e \
${pkgs.vim}/bin/vim --cmd ':set noeol binary' -c startinsert "$f"
if test -e "$f"; then
${pkgs.xsel}/bin/xsel -ip < "$f"
${pkgs.xsel}/bin/xsel -ib < "$f"
${pkgs.xdotool}/bin/xdotool key --clearmodifiers shift+Insert
${pkgs.xsel}/bin/xsel -dp
${pkgs.xsel}/bin/xsel -db
fi
''}
''

View File

@ -0,0 +1,94 @@
{ autoconf, stdenv, fetchFromGitLab, pkgconfig, libxml2, libSM, shared-mime-info
, libxslt, docbook_xml_dtd_412, docbook_xsl
, gtk ? gtk2, gtk2
}:
stdenv.mkDerivation {
pname = "rox-filer";
version = "2.11-tv";
src = fetchFromGitLab {
owner = "seirios";
repo = "rox-filer";
rev = "3c3ad5d85a1ab548574bf450f730886b60092587";
sha256 = "0h743zpx1v9rrsaxn0q3nwpq8wkjf6icgzrg8jpqldsphw3ygkhr";
};
nativeBuildInputs = [
autoconf
docbook_xsl
libxslt
pkgconfig
];
buildInputs = [ libxml2 gtk shared-mime-info libSM ];
# go to the source directory after unpacking the sources
setSourceRoot = "export sourceRoot=source/ROX-Filer";
# patch the main.c to disable the lookup of the APP_DIR environment variable,
# which is used to lookup the location for certain images when rox-filer
# starts; rather override the location with an absolute path to the directory
# where images are stored to prevent having to use a wrapper, which sets the
# APP_DIR environment variable prior to starting rox-filer
preConfigure = ''
(cd src && autoconf)
sed -i -e "s:g_strdup(getenv(\"APP_DIR\")):\"$out\":" src/main.c
mkdir build
cd build
'';
preBuild = ''
for f in \
../src/Docs/Manual.xml \
../src/Docs/Manual-fr.xml \
../src/Docs/Manual-it.xml ;
do
substituteInPlace "$f" \
--replace \
/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd \
${docbook_xml_dtd_412}/xml/dtd/docbook/docbookx.dtd
done
make -C ../src/Docs MAN=.. || exit 1
'';
configureScript = "../src/configure";
installPhase = ''
mkdir -p "$out"
cd ..
cp -av Help Messages Options.xml ROX images style.css .DirIcon "$out"
mkdir -p "$out/share/man/man1"
cp -av src/rox.1 "$out/share/man/man1"
# the main executable
mkdir "$out/bin/"
cp -v ROX-Filer "$out/bin/rox"
# mime types
mkdir -p "$out/ROX/MIME"
cd "$out/ROX/MIME"
ln -sv text-x-{diff,patch}.png
ln -sv application-x-font-{afm,type1}.png
ln -sv application-xml{,-dtd}.png
ln -sv application-xml{,-external-parsed-entity}.png
ln -sv application-{,rdf+}xml.png
ln -sv application-x{ml,-xbel}.png
ln -sv application-{x-shell,java}script.png
ln -sv application-x-{bzip,xz}-compressed-tar.png
ln -sv application-x-{bzip,lzma}-compressed-tar.png
ln -sv application-x-{bzip-compressed-tar,lzo}.png
ln -sv application-x-{bzip,xz}.png
ln -sv application-x-{gzip,lzma}.png
ln -sv application-{msword,rtf}.png
'';
meta = with stdenv.lib; {
description = "Fast, lightweight, gtk2 file manager";
homepage = "http://rox.sourceforge.net/desktop";
license = with licenses; [ gpl2 lgpl2 ];
platforms = platforms.linux;
maintainers = [ maintainers.eleanor ];
};
}