#!/bin/sh
-mv /opt/clean /opt/clean.bak
+cd /tmp
curl ftp://ftp.cs.ru.nl/pub/Clean/builds/linux-x64/clean-bundle-complete-linux-x64-latest.tgz | tar -xz
+rm -rf /opt/clean
mv clean-bundle-complete /opt/clean
+
+patch /opt/clean/lib/StdEnv/StdGeneric.dcl <<EOPATCH
+--- StdGeneric.dcl 2018-12-17 02:43:55.000000000 +0100
++++ StdGeneric.dcl 2018-12-17 11:06:09.196234236 +0100
+@@ -64,6 +64,16 @@
+ derive bimap FIELD
+ derive bimap (->)
+
++generic binumap a b | binumap b a :: a -> b
++derive binumap c
++derive binumap PAIR
++derive binumap EITHER
++derive binumap OBJECT
++derive binumap CONS
++derive binumap RECORD
++derive binumap FIELD
++derive binumap (->)
++
+ // HACK: dictionaries for all generics.
+ // It works since all generic classes have only one method and do not inherit
+ // from other classes
+EOPATCH
+
+patch /opt/clean/lib/StdEnv/StdGeneric.icl <<EOPATCH
+--- StdGeneric.icl 2018-12-17 02:43:55.000000000 +0100
++++ StdGeneric.icl 2018-12-17 11:06:09.196234236 +0100
+@@ -21,6 +21,23 @@
+
+ bimap{|(->)|} _ ba fr _ f = comp3 fr f ba
+
++binumap{|c|} x = x
++
++binumap{|PAIR|} fx _ fy _ (PAIR x y) = PAIR (fx x) (fy y)
++
++binumap{|EITHER|} fl _ fr _ (LEFT x) = LEFT (fl x)
++binumap{|EITHER|} fl _ fr _ (RIGHT x) = RIGHT (fr x)
++
++binumap{|CONS|} fx _ (CONS x) = CONS (fx x)
++
++binumap{|RECORD|} fx _ (RECORD x) = RECORD (fx x)
++
++binumap{|FIELD|} fx _ (FIELD x) = FIELD (fx x)
++
++binumap{|OBJECT|} fx _ (OBJECT x) = OBJECT (fx x)
++
++binumap{|(->)|} _ ba fr _ f = comp3 fr f ba
++
+ comp3 :: !(.a -> .b) u:(.c -> .a) !(.d -> .c) -> u:(.d -> .b)
+ comp3 f g h
+ | is_id f
+EOPATCH
+
+patch /opt/clean/etc/IDEEnvs <<EOPATCH
+--- IDEEnvs 2018-12-17 11:58:48.876039159 +0100
++++ IDEEnvs 2018-12-17 12:00:52.384066455 +0100
+@@ -35,13 +35,44 @@
+ Path: {Application}/lib/StdEnv
+ Path: {Application}/lib/Dynamics
+ Path: {Application}/lib/TCPIP
++ Path: {Application}/lib/Gast
+ Path: {Application}/lib/Platform
+ Path: {Application}/lib/Platform/Deprecated/Generics
++ Path: {Application}/lib/Platform/Deprecated/ArgEnv
++ Path: {Application}/lib/Platform/Deprecated/MersenneTwister
+ Path: {Application}/lib/Platform/Deprecated/StdLib
+ Path: {Application}/lib/Sapl
+ Path: {Application}/lib/GraphCopy
+ Path: {Application}/lib/iTasks
+- EnvironmentCompiler: lib/exe/cocl::-dynamics -sapl
++ EnvironmentCompiler: lib/exe/cocl:-h 500m -s 20m:-dynamics -sapl
++ EnvironmentCodeGen: lib/exe/cg
++ EnvironmentLinker: lib/exe/linker|lib/exe/sapl-collector-linker|lib/exe/itasks-web-collector
++ EnvironmentDynLink: lib/exe/linker
++ EnvironmentVersion: 920
++ EnvironmentRedirect: False
++ EnvironmentCompileMethod: Pers
++ EnvironmentProcessor: I386
++ Environment64BitProcessor: True
++ Environment
++ EnvironmentName: iTasks-git
++ EnvironmentPaths
++ Path: {Application}/lib/StdEnv
++ Path: {Application}/lib/Dynamics
++ Path: {Application}/lib/TCPIP
++ Path: {Application}/lib/Sapl
++ Path: {Application}/lib/GraphCopy
++ Path: {Application}/lib/Gast
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/Platform-x86
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Posix
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Linux
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Linux-64
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Independent
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Independent/Deprecated/Generics
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Independent/Deprecated/StdLib
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Independent/Deprecated/ArgEnv
++ Path: /home/mrl/projects/clean/clean-platform/src/libraries/OS-Independent/Deprecated/MersenneTwister
++ Path: /home/mrl/projects/clean/iTasks-SDK/Libraries
++ EnvironmentCompiler: lib/exe/cocl:-h 500m -s 20m:-dynamics -sapl
+ EnvironmentCodeGen: lib/exe/cg
+ EnvironmentLinker: lib/exe/linker|lib/exe/sapl-collector-linker|lib/exe/itasks-web-collector
+ EnvironmentDynLink: lib/exe/linker
+EOPATCH
--- /dev/null
+browser_sort_mode = name
+browser_sort_format = {%A - }{%t}|{%f} {(%l)}
+song_columns_list_format = (6f)[green]{NE} (30)[]{a} (30)[white]{t} (30)[cyan]{b} (7f)[magenta]{l}
+
+playlist_show_remaining_time = yes
+playlist_shorten_total_times = yes
+playlist_separate_albums = yes
+
+browser_display_mode = columns
+search_engine_display_mode = columns
+playlist_editor_display_mode = columns
+
+autocenter_mode = yes
+centered_cursor = yes
+
+default_place_to_search_in = database
+user_interface = alternative
+
+media_library_primary_tag = album_artist
+cyclic_scrolling = yes
+
+allow_for_physical_item_deletion = no
+
+startup_screen = "playlist"
+startup_slave_screen = "media_library"
+
+locked_screen_width_part = 50
+ask_for_locked_screen_width_part = no
+
+clock_display_seconds = yes
+display_volume_level = yes
+display_bitrate = yes
+display_remaining_time = yes
+
+ignore_leading_the = yes
+media_library_sort_by_mtime = no
+
+enable_window_title = yes
+
+external_editor = vim
+use_console_editor = yes
--- /dev/null
+" This file must be put in ~/.config/tridactyl/
+" In order to source the file, tridactyl needs the native messenger. See
+" :installnative in tridactly
+"
+" When you make changes to this file, either :source it or restart firefox
+"
+" To see all current settings, use :viewconfig
+
+" This must be the first entry to get vim-like behaviour where removing a line
+" from here makes the setting disappear. Otherwise settings are cached
+" internally somehow
+sanitize tridactyllocal tridactylsync
+
+bind <Space> scrollpage 0.5
+bind h tabprev
+bind l tabnext
+
+set yankto selection
+set putfrom selection
+set hintchars 1234567890
+set hintfiltermode vimperator-reflow
+set allowautofocus false
+set searchengine duckduckgo