# Haketilo - Make The Web Great Again! #

This extension's goal is to allow replacing javascript served by websites
with scripts specified by user. Something like NoScript and Greasemonkey
together. Such facility is necessary to enable browsing World Wide Web
without executing nonfree software.

Currently, the target browsers for this extension are Ungoogled Chromium
and various forks of Firefox (version 60+).

This extension is still in an early stage. Also see
`https://hydrillabugs.koszko.org/projects/haketilo/wiki/' for documentation in
development.

## Installation ##
The extension can be "built" with `./build.sh mozilla' or `./build.sh chromium'.
This creates directories build_mozilla/ and  build_chromium/, respectively.
Such directory can be loaded into Ungoogled Chromium or a modern Gecko-based
browser as unpacked extension.

## Copyright ##
All copyright information is gathered in the `copyright' file which follows
(loosely) the format of debian/copyright file described at
`https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/'

In general, this entire extension is available under the terms of GPLv3+ with
various additional licenses and permissions for particular files.

## Contributing ##
Get the code from: https://git.koszko.org/browser-extension/
Come to: https://hydrillabugs.koszko.org/projects/haketilo

Optionally, write to $(echo a29zemtvQGtvc3prby5vcmcK | base64 -d)
ion. guix pack --compression=none --bootstrap guile-bootstrap # Build a tarball (with compression). Check that '-e' works as well. out1="`guix pack --bootstrap guile-bootstrap`" out2="`guix pack --bootstrap -e '(@ (gnu packages bootstrap) %bootstrap-guile)'`" test -n "$out1" test "$out1" = "$out2" # Test '--root'. guix pack -r "$test_directory/my-guile" --bootstrap guile-bootstrap test "`readlink "$test_directory/my-guile"`" = "$out1" guix gc --list-roots | grep "^$test_directory/my-guile$" rm "$test_directory/my-guile" # Build a tarball with a symlink. the_pack="`guix pack --bootstrap -S /opt/gnu/bin=bin guile-bootstrap`" # Try to extract it. Note: we cannot test whether /opt/gnu/bin/guile itself # exists because /opt/gnu/bin may be an absolute symlink to a store item that # has been GC'd. cd "$test_directory" tar -xf "$the_pack" test -L opt/gnu/bin is_available () { # Use the "type" shell builtin to see if the program is on PATH. type "$1" > /dev/null } if is_available chroot && is_available unshare && unshare -r true; then # Verify we can use what we built. unshare -r chroot . /opt/gnu/bin/guile --version cd - else echo "warning: skipped some verification because chroot or unshare is unavailable" >&2 fi # For the tests that build Docker images below, we currently have to use # --dry-run because if we don't, there are only two possible cases: # # Case 1: We do not use --bootstrap, and the build takes hours to finish # because it needs to build tar etc. # # Case 2: We use --bootstrap, and the build fails because the bootstrap # Guile cannot dlopen shared libraries. Not to mention the fact # that we would still have to build many non-bootstrap inputs # (e.g., guile-json) in order to create the Docker image. # Build a Docker image. guix pack --dry-run --bootstrap -f docker guile-bootstrap # Build a Docker image with a symlink. guix pack --dry-run --bootstrap -f docker -S /opt/gnu= guile-bootstrap # Build a tarball pack of cross-compiled software. Use coreutils because # guile-bootstrap is not intended to be cross-compiled. guix pack --dry-run --bootstrap --target=arm-linux-gnueabihf coreutils # Likewise, 'guix pack -R' requires a full-blown toolchain (because # 'glibc-bootstrap' lacks 'libc.a'), hence '--dry-run'. guix pack -R --dry-run --bootstrap -S /mybin=bin guile-bootstrap # Make sure package transformation options are honored. chmod -Rf +w "$test_directory"; rm -r "$test_directory" mkdir -p "$test_directory" -m 755 drv1="`guix pack --no-grafts -n guile 2>&1 | grep pack.*\.drv`" drv2="`guix pack --no-grafts -n --with-source=guile=$test_directory guile 2>&1 | grep pack.*\.drv`" test -n "$drv1" test "$drv1" != "$drv2" # Try '--manifest' options. cat > "$test_directory/manifest1.scm" <<EOF (specifications->manifest '("guile")) EOF cat > "$test_directory/manifest2.scm" <<EOF (specifications->manifest '("emacs")) EOF drv="`guix pack --no-grafts -d -m "$test_directory/manifest1.scm" -m "$test_directory/manifest2.scm"`" guix gc -R "$drv" | grep `guix build guile -d --no-grafts` guix gc -R "$drv" | grep `guix build emacs -d --no-grafts`