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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -90,9 +90,6 @@ with import <stockholm/lib>;
{ {
services.cron.enable = false; 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.ntp.enable = false;
services.timesyncd.enable = true; services.timesyncd.enable = true;
} }

View File

@ -4,20 +4,45 @@
cfg.packageDir = "/var/lib/elm-packages"; cfg.packageDir = "/var/lib/elm-packages";
cfg.port = 7782; 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 { in {
services.nginx.virtualHosts."package.elm-lang.org" = { services.nginx.virtualHosts."package.elm-lang.org" = {
addSSL = true; addSSL = true;
# TODO secret files sslCertificate = cfg.sslCertificate;
sslCertificate = "/var/lib/certs/package.elm-lang.org/fullchain.pem"; sslCertificateKey = cfg.sslCertificateKey;
sslCertificateKey = "/var/lib/certs/package.elm-lang.org/key.pem";
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 = '' locations."/all-packages/since/".extraConfig = ''
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port}; proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
proxy_pass_header Server; 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"; set $zipball "${cfg.packageDir}/$author/$pname/$version/zipball";
proxy_set_header X-Author $author; proxy_set_header X-Author $author;
proxy_set_header X-Package $pname; proxy_set_header X-Package $pname;
@ -39,14 +64,15 @@ in {
krebs.htgen.elm-packages-proxy = { krebs.htgen.elm-packages-proxy = {
port = cfg.port; port = cfg.port;
script = /* sh */ ''(. ${pkgs.writeDash "elm-packages-proxy.sh" '' script = /* sh */ ''. ${pkgs.writeDash "elm-packages-proxy.sh" ''
PATH=${lib.makeBinPath [ PATH=${lib.makeBinPath [
pkgs.attr
pkgs.coreutils pkgs.coreutils
pkgs.curl pkgs.curl
pkgs.findutils pkgs.findutils
pkgs.gnugrep pkgs.gnugrep
pkgs.jq pkgs.jq
pkgs.unzip pkgs.p7zip
]} ]}
export PATH export PATH
file_response() {( file_response() {(
@ -73,7 +99,7 @@ in {
printf "HTTP/1.1 $status_code $status_reason\r\n" printf "HTTP/1.1 $status_code $status_reason\r\n"
printf 'Connection: close\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 'Content-Type: %s\r\n' "$content_type"
printf 'Server: %s\r\n' "$Server" printf 'Server: %s\r\n' "$Server"
printf '\r\n' printf '\r\n'
@ -99,7 +125,7 @@ in {
;; ;;
elm.json) elm.json)
if ! test -f "$elmjson"; then if ! test -f "$elmjson"; then
unzip -p "$zipball" \*/elm.json > "$elmjson" 7z x -so "$zipball" \*/elm.json > "$elmjson"
fi fi
file_response 200 OK "$elmjson" 'application/json; charset=UTF-8' file_response 200 OK "$elmjson" 'application/json; charset=UTF-8'
exit exit
@ -119,36 +145,110 @@ in {
;; ;;
esac esac
;; ;;
'POST /all-packages/since/'*) 'POST /packages/'*)
# TODO only show newest? author=$req_x_author
my_packages=$( pname=$req_x_package
cd ${cfg.packageDir} user=$req_x_user
find -mindepth 3 -maxdepth 3 | 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 ' jq -Rs '
split("\n") | split("\n") |
map( map(
select(.!="") | select(.!="") |
sub("^\\./(?<author>[^/]+)/(?<pname>[^/]+)/(?<version>[^/]+)$";"\(.author)/\(.pname)@\(.version)") sub("^\\./(?<author>[^/]+)/(?<pname>[^/]+)/(?<version>[^/]+)$";"\(.author)/\(.pname)@\(.version)")
) ) |
sort_by(split("@") | [.[0]]+(.[1]|split("."))) |
reverse
' '
) } |
jq -cs add > $response
new_upstream_packages=$( file_response 200 OK "$response" 'application/json; charset=UTF-8'
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'
exit exit
;; ;;
esac esac
''})''; ''}'';
}; };
} }

View File

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

View File

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

View File

@ -48,9 +48,9 @@
}; };
services.tlp.enable = true; services.tlp.enable = true;
services.tlp.extraConfig = '' services.tlp.settings = {
START_CHARGE_THRESH_BAT0=80 START_CHARGE_THRESH_BAT0 = 80;
''; };
nix = { nix = {
buildCores = 2; 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: { rxvt_unicode.overrideAttrs (old: {
patches = old.patches ++ [ patches = old.patches ++ [
(fetchurl { (fetchurl {
name = "rxvt-unicode.cancel-running-selection-request.patch";
url = https://cgit.krebsco.de/rxvt-unicode/patch/?id=15f3f94; url = https://cgit.krebsco.de/rxvt-unicode/patch/?id=15f3f94;
sha256 = "12vldwsds27c9l15ffc6svk9mj17jhypcz736pvpmpqbsymlkz2p"; 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 ];
};
}