summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW. Kosior <koszko@koszko.org>2024-05-27 12:19:19 +0200
committerW. Kosior <koszko@koszko.org>2024-05-27 12:29:59 +0200
commitee8fac8ab8529e2d105c7e55c2c9b28aefd19b46 (patch)
tree7f7559d0ba91710624eb2c76a9765587595d8153
parent2d05ae83321cdf8aa3abab6acdd69f331ef4b89a (diff)
downloadAGH-ctf-course-2024-magister.tar.gz
AGH-ctf-course-2024-magister.zip
Update and add remaining files.HEADmagister
-rw-r--r--abdul-blog/Makefile22
-rw-r--r--abdul-blog/hello-world.gmi5
-rw-r--r--abdul-blog/hello-world.html49
-rw-r--r--abdul-blog/index.gmi35
-rw-r--r--abdul-blog/index.html49
-rw-r--r--abdul-blog/learning-guix-home.gmi49
-rw-r--r--abdul-blog/learning-guix-home.html49
-rw-r--r--abdul-blog/matterbridge-in-tildeserver.gmi174
-rw-r--r--abdul-blog/matterbridge-in-tildeserver.html49
-rw-r--r--abdul-blog/mine-guix-shell.gmi19
-rw-r--r--abdul-blog/mine-guix-shell.html49
-rw-r--r--abdul-blog/minetest-server.gmi105
-rw-r--r--abdul-blog/minetest-server.html49
-rw-r--r--abdul-blog/sorry-gemini-only.gmi4
-rw-r--r--abdul-home/abdultest.conf4
-rw-r--r--abdul-home/config.toml24
-rw-r--r--abdul-home/home-config.scm84
-rw-r--r--ctftilde/src/guile/ctftilde/main-site.scm84
-rw-r--r--ctftilde/src/guile/ctftilde/users.scm53
-rw-r--r--gemini/first-steps.gmi55
-rw-r--r--gemini/index.gmi16
-rw-r--r--gemini/security-warning.gmi11
-rw-r--r--notes.org55
-rw-r--r--presentation/Awesome_Demon.svg407
-rw-r--r--presentation/Guix_logo.svg157
-rw-r--r--presentation/Guix_logo_with_flag.svg276
-rw-r--r--presentation/Nix_logo.svg424
-rw-r--r--presentation/Red_flag_waving.svg28
-rw-r--r--presentation/ctf-guix-store-onlynotes.pdfbin0 -> 290908 bytes
-rw-r--r--presentation/ctf-guix-store-withnotes.pdfbin0 -> 322458 bytes
-rw-r--r--presentation/ctf-guix-store.pdfbin0 -> 322458 bytes
-rw-r--r--presentation/ctf-guix-store.tex295
-rw-r--r--presentation/screenshots/abdul-blog-index.pngbin0 -> 30938 bytes
-rw-r--r--presentation/screenshots/account-creation.pngbin0 -> 19403 bytes
-rw-r--r--presentation/screenshots/gemini-capsule.pngbin0 -> 32301 bytes
-rw-r--r--presentation/screenshots/hint1.pngbin0 -> 38728 bytes
-rw-r--r--presentation/screenshots/hint2.pngbin0 -> 50720 bytes
-rw-r--r--vm-deploy.scm4
-rw-r--r--vm.scm20
39 files changed, 2656 insertions, 48 deletions
diff --git a/abdul-blog/Makefile b/abdul-blog/Makefile
new file mode 100644
index 0000000..efa6127
--- /dev/null
+++ b/abdul-blog/Makefile
@@ -0,0 +1,22 @@
+GEMINI_ONLY = \
+ minetest-server \
+ matterbridge-in-tildeserver
+GEMINI_AND_HTML = \
+ index \
+ hello-world \
+ mine-guix-shell \
+ learning-guix-home
+
+all: $(addsuffix .html,$(GEMINI_ONLY) $(GEMINI_AND_HTML))
+.PHONY: all
+
+%.html: %.gmi
+ if printf %s '$(GEMINI_ONLY)' | grep -q $*; then \
+ ./convert_gemtext_file.py sorry-gemini-only.gmi > $@; \
+ else \
+ ./convert_gemtext_file.py $< > $@; \
+ fi
+
+clean:
+ rm -rf *.html
+.PHONY: clean
diff --git a/abdul-blog/hello-world.gmi b/abdul-blog/hello-world.gmi
new file mode 100644
index 0000000..ca3848f
--- /dev/null
+++ b/abdul-blog/hello-world.gmi
@@ -0,0 +1,5 @@
+# Hello, World!
+
+I just discovered server ctftilde.koszko.org. It seems the first public tilde server with available GNU Guix for the users. And also it has Gemini server ^^ What an wonderful opportunity to start an blog!
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-blog/hello-world.html b/abdul-blog/hello-world.html
new file mode 100644
index 0000000..0c938e6
--- /dev/null
+++ b/abdul-blog/hello-world.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Hello, World!</h1><p>I just discovered server ctftilde.koszko.org. It seems the first public tilde server with available GNU Guix for the users. And also it has Gemini server ^^ What an wonderful opportunity to start an blog!</p><p><a href='/~abdul/index.html'>back into blog index</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/index.gmi b/abdul-blog/index.gmi
new file mode 100644
index 0000000..d4c5585
--- /dev/null
+++ b/abdul-blog/index.gmi
@@ -0,0 +1,35 @@
+# Abdul's technology blog
+
+Hi, I'm Abdul El-Ihn-Ohn-Ih. I'm a enthusiast in programming. Lisp is mine favourite language. I also enjoy to write (I write about stuff I do on an computer).
+Below is my index of mine blog entries. If something there is interesting you, feel free emailing me at abdul2007@pm.me.
+Note: some of articles are avaiable only in gemini://. Use an gemini browser for view that.
+
+=> gemini://geminiprotocol.net/
+=> gemini://geminiprotocol.net/software/
+
+## Mine entries
+### 2024-03-15
+
+=> /~abdul/matterbridge-in-tildeserver.gmi Matterbridge in tildeserver
+
+### 2024-02-29
+
+=> /~abdul/minetest-server.gmi Mine Minetest
+
+### 2024-02-25
+
+=> /~abdul/learning-guix-home.gmi Learning Guix Home
+
+### 2024-02-20
+
+=> /~abdul/mine-guix-shell.gmi Mine Guix shell
+
+### 2024-02-11
+
+=> /~abdul/hello-world.gmi Hello, World!
+
+## Other peoples blogs
+
+I would like to writing links to other cool Tilde Server blogs here. If you did maked the blog on ctftilde.koszko.org like I did maked, please tell me an link to this and I will write it below.
+
+=> https://ctftilde.koszko.org/registration Registration to Tilde Server
diff --git a/abdul-blog/index.html b/abdul-blog/index.html
new file mode 100644
index 0000000..1ea4af8
--- /dev/null
+++ b/abdul-blog/index.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Abdul's technology blog</h1><p>Hi, I'm Abdul El-Ihn-Ohn-Ih. I'm a enthusiast in programming. Lisp is mine favourite language. I also enjoy to write (I write about stuff I do on an computer).</p><p>Below is my index of mine blog entries. If something there is interesting you, feel free emailing me at abdul2007@pm.me.</p><p>Note: some of articles are avaiable only in gemini://. Use an gemini browser for view that.</p><p><a href='https://geminiprotocol.net/'>https://geminiprotocol.net/</a></p><p><a href='https://geminiprotocol.net/software/'>https://geminiprotocol.net/software/</a></p><h2>Mine entries</h2><h3>2024-03-15</h3><p><a href='/~abdul/matterbridge-in-tildeserver.html'>Matterbridge in tildeserver</a></p><h3>2024-02-29</h3><p><a href='/~abdul/minetest-server.html'>Mine Minetest</a></p><h3>2024-02-25</h3><p><a href='/~abdul/learning-guix-home.html'>Learning Guix Home</a></p><h3>2024-02-20</h3><p><a href='/~abdul/mine-guix-shell.html'>Mine Guix shell</a></p><h3>2024-02-11</h3><p><a href='/~abdul/hello-world.html'>Hello, World!</a></p><h2>Other peoples blogs</h2><p>I would like to writing links to other cool Tilde Server blogs here. If you did maked the blog on ctftilde.koszko.org like I did maked, please tell me an link to this and I will write it below.</p><p><a href='https://ctftilde.koszko.org/registration'>Registration to Tilde Server</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/learning-guix-home.gmi b/abdul-blog/learning-guix-home.gmi
new file mode 100644
index 0000000..ca3c98c
--- /dev/null
+++ b/abdul-blog/learning-guix-home.gmi
@@ -0,0 +1,49 @@
+# Learning Guix Home
+
+Today I just learnt to use
+
+```
+guix home
+```
+
+command to reconfigure my home environment with functional package manager in Guix. I written this script on my UNIX Tilde account.
+
+```
+(use-modules ((gnu home) #:select (home-environment))
+ ((gnu home services) #:select
+ (home-files-service-type service))
+ ((gnu home services shells) #:select
+ (home-bash-configuration home-bash-service-type))
+ ((gnu system shadow) #:select (%default-dotguile))
+ ((guix gexp) #:select (file-append gexp local-file plain-file)))
+
+(home-environment
+ (services
+ (list
+ (service home-bash-service-type
+ (home-bash-configuration
+ (bash-profile (list (plain-file
+ "bash_ps1"
+ "export PS1=\"\n↓← $PS1\n→ \"")))))
+
+ (service home-files-service-type
+ `((".guile" ,%default-dotguile))))))
+```
+
+I written it in home-config.scm and then I run
+
+```
+guix home reconfigure home-config.scm
+```
+
+Now I having better bash shell which taking less characters, so I can write more command in one line.
+## Mine currently working
+I am currently working to serving Minetest Server on Tilde Server. I installed it by
+
+```
+guix shell minetest
+```
+
+and I will to write about in mine next blog post.
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-blog/learning-guix-home.html b/abdul-blog/learning-guix-home.html
new file mode 100644
index 0000000..42dcf9d
--- /dev/null
+++ b/abdul-blog/learning-guix-home.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Learning Guix Home</h1><p>Today I just learnt to use</p><pre>guix home</pre><p>command to reconfigure my home environment with functional package manager in Guix. I written this script on my UNIX Tilde account.</p><pre>(use-modules ((gnu home) #:select (home-environment))((gnu home services) #:select(home-files-service-type service))((gnu home services shells) #:select(home-bash-configuration home-bash-service-type))((gnu system shadow) #:select (%default-dotguile))((guix gexp) #:select (file-append gexp local-file plain-file)))(home-environment(services(list(service home-bash-service-type(home-bash-configuration(bash-profile (list (plain-file"bash_ps1""export PS1=\"\n↓← $PS1\n→ \"")))))(service home-files-service-type`((".guile" ,%default-dotguile))))))</pre><p>I written it in home-config.scm and then I run</p><pre>guix home reconfigure home-config.scm</pre><p>Now I having better bash shell which taking less characters, so I can write more command in one line.</p><h2>Mine currently working</h2><p>I am currently working to serving Minetest Server on Tilde Server. I installed it by</p><pre>guix shell minetest</pre><p>and I will to write about in mine next blog post.</p><p><a href='/~abdul/index.html'>back into blog index</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/matterbridge-in-tildeserver.gmi b/abdul-blog/matterbridge-in-tildeserver.gmi
new file mode 100644
index 0000000..f7e3e03
--- /dev/null
+++ b/abdul-blog/matterbridge-in-tildeserver.gmi
@@ -0,0 +1,174 @@
+# Matterbridge in tildeserver
+
+Hello friends, today I maked a bridge with Matterbridge program for Discord and Matrix room I talk in. It is cool because I run this in Guix functional package manager with UNIX Tilde server.
+
+## Config .scm
+
+I added 1 line to mine home config to using new modules
+
+```
+ ((gnu packages messaging) #:select (matterbridge))
+```
+
+And I has added more lines down under
+
+```
+(define home-matterbridge-services
+ (const
+ (list (shepherd-service
+ (provision '(mattermost))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append matterbridge "/bin/matterbridge")
+ "--conf"
+ #$(local-file "config.toml"))
+ #:log-file (string-append %user-log-dir
+ "/matterbridge.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start local matterbridge.")))))
+
+(define home-matterbridge-service-type
+ (service-type
+ (name 'home-matterbridge)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-matterbridge-services)))
+ (description "Bridge messaging platforms using matterbridge.")
+ (default-value #f)))
+```
+
+That define service, that I use in home environment, like this
+
+```
+ (service home-matterbridge-service-type)
+```
+
+This is similar to Minetest Server service.
+
+=> /~abdul/minetest-server.gmi mine Minetest Server blog post
+
+## Matterbridge config .toml
+
+I use also an .toml file to configuring the Matterbridge program. It have this
+
+```
+[matrix.noevil-pl]
+Server="https://matrix.noevil.pl"
+Login="abdul"
+Password="***************"
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+NoHomeServerSuffix=false
+
+[discord.cyber]
+Server="3333333333333333333"
+Token="000000000000000000000000.111111.22222222222222222222222222222222222222"
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+PreserveThreading=true
+
+[[gateway]]
+name="secret_room"
+enable=true
+
+[[gateway.inout]]
+account="matrix.noevil-pl"
+channel="!HNiADouYMzLGUUxtxw:noevil.pl"
+
+[[gateway.inout]]
+account="discord.cyber"
+channel="ID:1207786885481500702"
+```
+
+There I replace an real password with "***************".
+
+## Full config .scm
+
+This is mine config full
+
+```
+(use-modules ((gnu home) #:select (home-environment))
+ ((gnu home services) #:select
+ (home-activation-service-type home-files-service-type service
+ service-extension service-type))
+ ((gnu home services shells) #:select
+ (home-bash-configuration home-bash-service-type))
+ ((gnu home services shepherd) #:select
+ (home-shepherd-service-type shepherd-service))
+ ((gnu packages messaging) #:select (matterbridge))
+ ((gnu packages minetest) #:select (minetest-server))
+ ((gnu system shadow) #:select (%default-dotguile))
+ ((guix gexp) #:select (file-append gexp local-file plain-file)))
+
+(define home-matterbridge-services
+ (const
+ (list (shepherd-service
+ (provision '(mattermost))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append matterbridge "/bin/matterbridge")
+ "--conf"
+ #$(local-file "config.toml"))
+ #:log-file (string-append %user-log-dir
+ "/matterbridge.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start local matterbridge.")))))
+
+(define home-matterbridge-service-type
+ (service-type
+ (name 'home-matterbridge)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-matterbridge-services)))
+ (description "Bridge messaging platforms using matterbridge.")
+ (default-value #f)))
+
+(define home-minetest-services
+ (const
+ (list (shepherd-service
+ (provision '(minetest))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append minetest-server "/bin/minetestserver")
+ "--gameid" "minetest"
+ "--config" #$(local-file "abdultest.conf"))
+ #:environment-variables
+ (cons
+ (format #f "MINETEST_SUBGAME_PATH=~a/share/minetest/games"
+ #$(@@ (gnu packages minetest) minetest-data))
+ (default-environment-variables))
+ #:log-file (string-append %user-log-dir
+ "/minetest.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start Minetest block game like Minecraft.")))))
+
+(define home-minetest-activation
+ (const #~(mkdir-p "/home/ctftilde/ctftilde-abdul/.local/minetest/abdultest")))
+
+(define home-minetest-service-type
+ (service-type
+ (name 'home-minetest)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-minetest-services)
+ (service-extension home-activation-service-type
+ home-minetest-activation)))
+ (description "Minetest block game like Minecraft.")
+ (default-value #f)))
+
+(home-environment
+ (services
+ (list
+ (service home-bash-service-type
+ (home-bash-configuration
+ (bash-profile (list (plain-file
+ "bash_ps1"
+ "export PS1=\"\n↓← $PS1\n→ \"")))))
+
+ (service home-files-service-type
+ `((".guile" ,%default-dotguile)))
+
+ (service home-matterbridge-service-type)
+
+ (service home-minetest-service-type))))
+```
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-blog/matterbridge-in-tildeserver.html b/abdul-blog/matterbridge-in-tildeserver.html
new file mode 100644
index 0000000..ca128da
--- /dev/null
+++ b/abdul-blog/matterbridge-in-tildeserver.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Gemini-only page</h1><p>Sorry, that page is unavaiable for viewing in HTTPS. Please use Gemini instead of.</p><p><a href='/~abdul/index.html'>back into blog index</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/mine-guix-shell.gmi b/abdul-blog/mine-guix-shell.gmi
new file mode 100644
index 0000000..eca28fa
--- /dev/null
+++ b/abdul-blog/mine-guix-shell.gmi
@@ -0,0 +1,19 @@
+# Mine guix shell
+
+An
+
+```
+guix shell
+```
+
+command is very cool. Today I maked Lagrange Gemini client installed in an shell. I can do that by
+
+```
+guix shell lagrange
+```
+
+=> https://gmi.skyjake.fi/lagrange/ Lagrange Browser Website
+
+I display many interesting Gemini websites under Lagrange. I can even reading Wikipedia on Gemini. It's cool and I'd like to more people use Gemini instead of HTTPS.
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-blog/mine-guix-shell.html b/abdul-blog/mine-guix-shell.html
new file mode 100644
index 0000000..442aac7
--- /dev/null
+++ b/abdul-blog/mine-guix-shell.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Mine guix shell</h1><p>An</p><pre>guix shell</pre><p>command is very cool. Today I maked Lagrange Gemini client installed in an shell. I can do that by</p><pre>guix shell lagrange</pre><p><a href='https://gmi.skyjake.fi/lagrange/'>Lagrange Browser Website</a></p><p>I display many interesting Gemini websites under Lagrange. I can even reading Wikipedia on Gemini. It's cool and I'd like to more people use Gemini instead of HTTPS.</p><p><a href='/~abdul/index.html'>back into blog index</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/minetest-server.gmi b/abdul-blog/minetest-server.gmi
new file mode 100644
index 0000000..0a0c819
--- /dev/null
+++ b/abdul-blog/minetest-server.gmi
@@ -0,0 +1,105 @@
+# Mine Minetest
+
+Haha, 2x "Mine", I hope you see an joke.
+I write to explain you how I setup minetest server under this Tilde UNIX server. Also is this mine first blog post which only is on Gemini and not on HTTPS. You have to installed a Gemini client to reading it.
+
+## Guix config
+
+Mine Guix Home config has growing a lot and this is now
+
+```
+(use-modules ((gnu home) #:select (home-environment))
+ ((gnu home services) #:select
+ (home-files-service-type service service-extension
+ service-type))
+ ((gnu home services shells) #:select
+ (home-bash-configuration home-bash-service-type))
+ ((gnu home services shepherd) #:select
+ (home-shepherd-service-type shepherd-service))
+ ((gnu packages minetest) #:select (minetest-server))
+ ((gnu system shadow) #:select (%default-dotguile))
+ ((guix gexp) #:select (file-append gexp local-file plain-file)))
+
+(define home-minetest-services
+ (const
+ (list (shepherd-service
+ (provision '(minetest))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append minetest-server "/bin/minetestserver")
+ "--gameid" "minetest"
+ "--config" #$(local-file "abdultest.conf"))
+ #:log-file (string-append %user-log-dir
+ "/minetest.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start Minetest block game like Minecraft.")))))
+
+(define home-minetest-activation
+ (const #~(mkdir-p "/home/ctftilde/ctftilde-abdul/.local/minetest/abdultest")))
+
+(define home-minetest-service-type
+ (service-type
+ (name 'home-minetest)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-minetest-services)
+ (service-extension home-activation-service-type
+ home-minetest-activation)))
+ (description "Minetest block game like Minecraft.")
+ (default-value #f)))
+
+(home-environment
+ (services
+ (list
+ (service home-bash-service-type
+ (home-bash-configuration
+ (bash-profile (list (plain-file
+ "bash_ps1"
+ "export PS1=\"\n↓← $PS1\n→ \"")))))
+
+ (service home-files-service-type
+ `((".guile" ,%default-dotguile)))
+
+ (service home-minetest-service-type))))
+```
+
+But this is no all, and I had advice to writing Minetest Server map config in a new file abdultest.conf. This is inside that
+
+```
+map-dir = /home/ctftilde/abdul/.local/minetest/abdultest
+server_name = Abdul & friends
+motd = I and mine friends build of blocks
+port = 20030
+```
+
+Then I use
+
+```
+#$(local-file "abdultest.conf")
+```
+
+to putting the file into Guix and it put an path to .conf file in Minetest Server command. (I had been said this helps because Guix can "declaratively" define the system)
+
+## Adding to Cron
+
+Services from .scm configuration file are runned by shepderd who is started when user logins. So yeah, I want a initial shepherd process starting when reboot and a Minetest Server process starting by shepherd then. For that I edit crontab like
+
+```
+crontab -e
+```
+
+and write line like
+
+```
+* * * * * bash -l
+```
+
+## Thanks
+
+I wanted to thank to Wojtek Kosior for helping me 2x to write Guix home configs and write cron configs. Thank you and you also for wanting to reading my blog.
+
+## Mine currently working
+
+I am now plan to using matterbridge software to connecting Matrix and Discord. I try to doing this similar to doing the Minetest Server and to using Guix Home functional package manager to doing that.
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-blog/minetest-server.html b/abdul-blog/minetest-server.html
new file mode 100644
index 0000000..ca128da
--- /dev/null
+++ b/abdul-blog/minetest-server.html
@@ -0,0 +1,49 @@
+
+<head>
+ <style>
+ html {
+ font-size: 16px;
+ line-height: 1.6;
+ color: #1E4147;
+ background-color: #AAC789;
+ --width: calc(100vw - 20px);
+ --height: calc(100vh - 20px);
+ width: var(--width);
+ height: var(--height);
+ border: #8A8A69 solid 10px;
+ overflow-y: hidden;
+ }
+
+ body {
+ margin: 0 auto;
+ max-width: var(--width);
+ max-height: var(--height);
+ overflow-y: scroll;
+ }
+
+ main {
+ max-width: 920px;
+ padding: 1rem 2rem;
+ }
+
+ pre {
+ background-color: #eee;
+ margin: 0 -1rem;
+ padding: 1rem;
+ overflow-x: auto;
+ }
+
+ a {
+ color: #AA2E00;
+ }
+
+ a:visited {
+ color: #802200;
+ }
+ </style>
+</head>
+<body>
+ <main>
+<h1>Gemini-only page</h1><p>Sorry, that page is unavaiable for viewing in HTTPS. Please use Gemini instead of.</p><p><a href='/~abdul/index.html'>back into blog index</a></p>
+ </main>
+</body>
diff --git a/abdul-blog/sorry-gemini-only.gmi b/abdul-blog/sorry-gemini-only.gmi
new file mode 100644
index 0000000..ce34f26
--- /dev/null
+++ b/abdul-blog/sorry-gemini-only.gmi
@@ -0,0 +1,4 @@
+# Gemini-only page
+Sorry, that page is unavaiable for viewing in HTTPS. Please use Gemini instead of.
+
+=> /~abdul/index.gmi back into blog index
diff --git a/abdul-home/abdultest.conf b/abdul-home/abdultest.conf
new file mode 100644
index 0000000..552c257
--- /dev/null
+++ b/abdul-home/abdultest.conf
@@ -0,0 +1,4 @@
+map-dir = /home/ctftilde/ctftilde-abdul/.local/minetest/abdultest
+server_name = Abdul & friends
+motd = I and mine friends build of blocks
+port = 20030
diff --git a/abdul-home/config.toml b/abdul-home/config.toml
new file mode 100644
index 0000000..c41cb25
--- /dev/null
+++ b/abdul-home/config.toml
@@ -0,0 +1,24 @@
+[matrix.noevil-pl]
+Server="https://matrix.noevil.pl"
+Login="abdul"
+Password="fla\u0067{full_source-bootstrap}"
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+NoHomeServerSuffix=false
+
+[discord.cyber]
+Server="1204895616921112586"
+Token="NzY1OTgwMjA2Nzc4Mjg2MTIx.Gpz4tE.HOslqKftF2_bm2y_bIaaACyy3_vLBmbevl02JQ"
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+PreserveThreading=true
+
+[[gateway]]
+name="secret_room"
+enable=true
+
+[[gateway.inout]]
+account="matrix.noevil-pl"
+channel="!HNiADouYMzLGUUxtxw:noevil.pl"
+
+[[gateway.inout]]
+account="discord.cyber"
+channel="ID:1207786885481500702"
diff --git a/abdul-home/home-config.scm b/abdul-home/home-config.scm
new file mode 100644
index 0000000..8f46e84
--- /dev/null
+++ b/abdul-home/home-config.scm
@@ -0,0 +1,84 @@
+(use-modules ((gnu home) #:select (home-environment))
+ ((gnu home services) #:select
+ (home-activation-service-type home-files-service-type service
+ service-extension service-type))
+ ((gnu home services shells) #:select
+ (home-bash-configuration home-bash-service-type))
+ ((gnu home services shepherd) #:select
+ (home-shepherd-service-type shepherd-service))
+ ((gnu packages messaging) #:select (matterbridge))
+ ((gnu packages minetest) #:select (minetest-server))
+ ((gnu system shadow) #:select (%default-dotguile))
+ ((guix gexp) #:select (file-append gexp local-file plain-file)))
+
+(define home-matterbridge-services
+ (const
+ (list (shepherd-service
+ (provision '(mattermost))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append matterbridge "/bin/matterbridge")
+ "--conf"
+ #$(local-file "config.toml"))
+ #:log-file (string-append %user-log-dir
+ "/matterbridge.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start local matterbridge.")))))
+
+(define home-matterbridge-service-type
+ (service-type
+ (name 'home-matterbridge)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-matterbridge-services)))
+ (description "Bridge messaging platforms using matterbridge.")
+ (default-value #f)))
+
+(define home-minetest-services
+ (const
+ (list (shepherd-service
+ (provision '(minetest))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append minetest-server "/bin/minetestserver")
+ "--gameid" "minetest"
+ "--config" #$(local-file "abdultest.conf"))
+ #:environment-variables
+ (cons
+ (format #f "MINETEST_SUBGAME_PATH=~a/share/minetest/games"
+ #$(@@ (gnu packages minetest) minetest-data))
+ (default-environment-variables))
+ #:log-file (string-append %user-log-dir
+ "/minetest.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start Minetest block game like Minecraft.")))))
+
+(define home-minetest-activation
+ (const #~(mkdir-p "~/.local/minetest/abdultest")))
+
+(define home-minetest-service-type
+ (service-type
+ (name 'home-minetest)
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-minetest-services)
+ (service-extension home-activation-service-type
+ home-minetest-activation)))
+ (description "Minetest block game like Minecraft.")
+ (default-value #f)))
+
+(home-environment
+ (services
+ (list
+ (service home-bash-service-type
+ (home-bash-configuration
+ (bash-profile (list (plain-file
+ "bash_ps1"
+ "export PS1=\"\n↓← $PS1\n→ \"")))))
+
+ (service home-files-service-type
+ `((".guile" ,%default-dotguile)))
+
+ ;;(service home-matterbridge-service-type)
+
+ (service home-minetest-service-type))))
diff --git a/ctftilde/src/guile/ctftilde/main-site.scm b/ctftilde/src/guile/ctftilde/main-site.scm
index 1598ff3..fc9e6c2 100644
--- a/ctftilde/src/guile/ctftilde/main-site.scm
+++ b/ctftilde/src/guile/ctftilde/main-site.scm
@@ -93,22 +93,68 @@ and minimalism. Besides this, you can run your own website or Gemini capsule.")
package manager & operating system. And it lets the users benefit from this
tooling as well!")
- (h2 "What to do?")
+ (h2 "Unconvinced?")
(p "If you're not yet sure you want to join, take time to browse other
user's tilde websites/capsules and see how they spend time here. You might
also want to familiarize yourself with GNU Guix. Once you're ready, jump to our
-registration page.")
+registration page. You might also want to read our short \"First Steps\"
+article.")
(ul
(li (a (@ (href "https://guix.gnu.org/"))
"GNU Guix website"))
(li (a (@ (href "https://ctftilde.koszko.org/registration"))
- "Registration page")))
+ "Registration page"))
+ (li (a (@ (href "https://ctftilde.koszko.org/first-steps"))
+ "First Steps")))
(h2 "Our users' blogs")
+ (p "(please send an email to admin@ctftilde.koszko.org if you want to have
+your blog listed here)")
(ul
(li (a (@ (href "./~abdul"))
"~abdul"))))))
+(cant:define-endpoint %endset first-steps
+ ("first-steps") '()
+ (contents->html
+ '((h1 "First steps")
+ (p "So, you've made an account through the registration page and can now
+connect via SSH. You're surely wondering where to put your HTML pages to have
+them served, etc…")
+ (ul
+ (li (a (@ (href "https://ctftilde.koszko.org/registration"))
+ "Registration page")))
+
+ (h2 "HTTP user directory")
+ (p "Your very own HTTP directory is at")
+ (pre "/srv/http/users/$YOUR_USERNAME/")
+ (p "It is served by Apache. Whatever you put there, will be viewable at")
+ (pre "https://ctftilde.koszko.org/~$YOUR_USERNAME/")
+ (p "Btw, if you like simple and lean web pages, feel free to load the
+minimal CC0-licensed stylesheet at")
+ (pre "https://ctftilde.koszko.org/resources/ctftilde.css")
+ (p "into your HTML documents :)")
+
+ (h2 "Gemini user directory")
+ (p "Don't you also feel that \"Web\" is sometimes too much? Wouldn't you
+love to let others view your blog (or whatever you publish) using a friendlier
+technology? Here's how to: put your files under")
+ (pre "/srv/gemini-users/$YOUR_USERNAME/")
+ (p "They will immediately become available under")
+ (pre "gemini://ctftilde.koszko.org/~$YOUR_USERNAME")
+ (p "Make sure not to miss gemtext, the minimal markup language desined for
+Gemini.")
+ (ul
+ (li (a (@ (href "https://geminiprotocol.net/"))
+ "Project Gemini website"))
+ (li (a (@ (href "gemini://geminiprotocol.net/"))
+ "Project Gemini capsule (over the gemini protocol)")))
+
+ (h2 "Cron")
+ (p "We've made the effort to have a working")
+ (pre "crontab")
+ (p "command. Use it as you would on any GNU+Linux distro!"))))
+
(define query-param-regex
(make-regexp "^([^=]+)(=(.*))?"))
@@ -172,7 +218,8 @@ registration page.")
(and (not (regexp-exec start-with-lowercase-regex username))
"Username must start with a lowercase letter."))
,(lambda _
- (and (false-if-exception (getpwnam username))
+ (and (false-if-exception (getpwnam (format #f "ctftilde-~a"
+ username)))
"This username is unavailable."))))
("password"
@@ -192,7 +239,7 @@ registration page.")
(and (not (regexp-exec email-regex email))
"Provided email is not valid.")))))))
-(cant:define-endpoint %endset main-page
+(cant:define-endpoint %endset registration-page
("registration") '()
(define legal-POST?
@@ -216,21 +263,24 @@ registration page.")
(cond
((and legal-POST? (eq? '() params-mistakes))
- (write (list (format #f "ctftilde-~a" (assoc-ref params "username"))
- (encrypt-password (assoc-ref params "password")))
- (%daemon-write-port))
+ (let ((username (format #f "ctftilde-~a" (assoc-ref params "username"))))
- (contents->html
- (match (read (%daemon-read-port))
+ (write (list username (encrypt-password (assoc-ref params "password")))
+ (%daemon-write-port))
+
+ (contents->html
+ (match (read (%daemon-read-port))
- ('(ok)
- `((h1 "Done")
- (p ,(format #f "Try connecting via ssh to ~a@ctftilde.koszko.org."
- (assoc-ref params "username")))))
+ ('(ok)
+ `((h1 "Done")
+ (p ,(format #f "Try connecting via ssh to ~a@ctftilde.koszko.org."
+ username))
+ (p "Also, please don't abuse our server's resources. Let others use
+the platform, too :)")))
- (_
- `((h1 "Ooops!")
- (p "Something went wrong X("))))))
+ (_
+ `((h1 "Ooops!")
+ (p "Something went wrong X(")))))))
(else
(contents->html
diff --git a/ctftilde/src/guile/ctftilde/users.scm b/ctftilde/src/guile/ctftilde/users.scm
index 3d17362..aaaae51 100644
--- a/ctftilde/src/guile/ctftilde/users.scm
+++ b/ctftilde/src/guile/ctftilde/users.scm
@@ -6,6 +6,7 @@
#:use-module ((ice-9 exceptions) #:select
(raise-exception with-exception-handler))
#:use-module ((ice-9 match) #:select (match))
+ #:use-module ((ice-9 regex) #:select (match:substring))
#:use-module ((system repl debug) #:select (terminal-width))
@@ -61,6 +62,18 @@
(dynamic-wind noop loop (cut closedir dir))))
+(define ctftilde-user-regex
+ (make-regexp "^ctftilde-(.*)"))
+
+(define (strip-ctftilde username)
+ (match (regexp-exec ctftilde-user-regex username)
+
+ (#f
+ username)
+
+ ((= (cut match:substring <> 1) stripped-username)
+ stripped-username)))
+
(define (*delete-user username)
@@ -74,8 +87,10 @@
(false-if-exception (delete-file creation-file))
(system* "userdel" "-rf" username)
- (system* "rm" "-rf" (string-append "/srv/gemini-users/" username))
- (system* "rm" "-rf" (string-append "/srv/http-users/" username))
+ (system* "rm" "-rf" (string-append "/srv/gemini-users/"
+ (strip-ctftilde username)))
+ (system* "rm" "-rf" (string-append "/srv/http-users/"
+ (strip-ctftilde username)))
(sync)
(false-if-exception (delete-file deletion-file))
(sync)))
@@ -94,21 +109,25 @@
(make-regexp "^[a-zA-Z][a-zA-Z0-9-]*$"))
(define* (*make-user username encrypted-password #:optional recreated-user-uid)
+ (define home-dir
+ (string-append "/home/ctftilde/" (strip-ctftilde username)))
+
(define (add-user)
- (when (> (apply system*
- `("useradd"
- "--shell" "/run/current-system/profile/bin/bash"
- "--home-dir" ,(string-append "/home/ctftilde/" username)
- "--create-home"
- ,@(or (and=> recreated-user-uid
- (compose (cut list "--uid" <>)
- number->string))
- '())
- "--gid" "hackers"
- "-p" ,encrypted-password
- ,username))
- 0)
- (raise-exception "User could not be added.")))
+ (if (> (apply system*
+ `("useradd"
+ "--shell" "/run/current-system/profile/bin/bash"
+ "--home-dir" ,home-dir
+ "--create-home"
+ ,@(or (and=> recreated-user-uid
+ (compose (cut list "--uid" <>)
+ number->string))
+ '())
+ "--gid" "hackers"
+ "-p" ,encrypted-password
+ ,username))
+ 0)
+ (raise-exception "User could not be added.")
+ (chmod home-dir #o700)))
(define (add-user-files)
(define user
@@ -116,7 +135,7 @@
(define (make-user-file path-format what)
(define path
- (format #f path-format username))
+ (format #f path-format (strip-ctftilde username)))
(unless (file-exists? path)
(match what
diff --git a/gemini/first-steps.gmi b/gemini/first-steps.gmi
new file mode 100644
index 0000000..47512e7
--- /dev/null
+++ b/gemini/first-steps.gmi
@@ -0,0 +1,55 @@
+# First steps
+
+So, you've made an account through the registration page and can now connect via SSH. You're surely wondering where to put your HTML pages to have them served, etc…")
+
+=> https://ctftilde.koszko.org/registration Registration page
+
+## HTTP user directory
+
+Your very own HTTP directory is at
+
+```
+/srv/http/users/$YOUR_USERNAME/
+```
+
+It is served by Apache. Whatever you put there, will be viewable at
+
+```
+https://ctftilde.koszko.org/~$YOUR_USERNAME/
+```
+
+Btw, if you like simple and lean web pages, feel free to load the minimal CC0-licensed stylesheet at
+
+```
+https://ctftilde.koszko.org/resources/ctftilde.css
+```
+
+into your HTML documents :)
+
+## Gemini user directory
+
+Don't you also feel that \"Web\" is sometimes too much? Wouldn't you love to let others view your blog (or whatever you publish) using a friendlier technology? Here's how to: put your files under
+
+```
+/srv/gemini-users/$YOUR_USERNAME/
+```
+
+They will immediately become available under
+
+```
+gemini://ctftilde.koszko.org/~$YOUR_USERNAME
+```
+
+Make sure not to miss gemtext, the minimal markup language desined for Gemini.
+
+=> gemini://geminiprotocol.net/ Project Gemini capsule
+
+## Cron
+
+We've made the effort to have a working
+
+```
+crontab
+```
+
+command. Use it as you would on any GNU+Linux distro!
diff --git a/gemini/index.gmi b/gemini/index.gmi
index 7536215..10837d3 100644
--- a/gemini/index.gmi
+++ b/gemini/index.gmi
@@ -1,10 +1,18 @@
# Tildeverse on GNU Guix
+
Welcome to ctftilde, a public tilde server.
-We provide free UNIX accounts for enthusiasts of free/libre software and minimalism. Besides this, you can run your own website or Gemini capsule.
-What makes this ~ special? It is powered by GNU Guix functional package manager & operating system. And it lets the users benefit from this tooling as well!
-## What to do?
-If you're not yet sure you want to join, take time to browser other user's tilde websites/capsules and see how they spend time here. You might also want to familiarize yourself with GNU Guix. Once you're ready, jump to our registration page.
+
+We provide free UNIX accounts for enthusiasts of free/libre software and minimalism. Besides this, you can run your own website or Gemini capsule. What makes this ~ special? It is powered by GNU Guix functional package manager & operating system. And it lets the users benefit from this tooling as well!
+
+## Unconvinced?
+If you're not yet sure you want to join, take time to browse other user's tilde websites/capsules and see how they spend time here. You might also want to familiarize yourself with GNU Guix. Once you're ready, jump to our registration page. You might also want to read our short \"First Steps\" article.
+
=> https://guix.gnu.org/ GNU Guix website
=> https://ctftilde.koszko.org/registration Registration page
+=> ./first-steps.gmi First Steps
+
## Our users' blogs
+
+(please send an email to admin@ctftilde.koszko.org if you want to have your blog listed here)
+
=> ./~abdul ~abdul
diff --git a/gemini/security-warning.gmi b/gemini/security-warning.gmi
new file mode 100644
index 0000000..2ad3087
--- /dev/null
+++ b/gemini/security-warning.gmi
@@ -0,0 +1,11 @@
+# Security considerations
+
+Dear user, when running programs on ctftilde, please make sure none of your sesitive configuration files are placed in the Store directory. In particular, please be careful when using macros from the
+
+```
+(guix gexp)
+```
+
+Guile module in your code.
+
+=> https://guix.gnu.org/manual/en/html_node/The-Store.html GNU Guix manual — The Store
diff --git a/notes.org b/notes.org
new file mode 100644
index 0000000..6c30a6c
--- /dev/null
+++ b/notes.org
@@ -0,0 +1,55 @@
+* What, where and how
+
+The system definition relies on some private Guix modifications you can find
+[[https://git.koszko.org/guix/][here]].
+
+The VM preparation commands below expect some files to already exist in
+project's directory
+- =fullchain.pem= - certificate chain
+- =privkey.pem= - its private key
+- =owner.pub= - SSH public key to set up SSH root access to the VM
+
+#+begin_src shell-script
+ # guix shell qemu-minimal parted
+ qemu-img create -f qcow2 vm.qcow2 100G
+ sudo modprobe nbd max_part=63
+ sudo qemu-nbd -n -c /dev/nbd0 vm.qcow2
+ sudo parted --script /dev/nbd0 mktable msdos
+ sudo parted --script /dev/nbd0 mkpart primary 0% 100%
+ sudo mkfs.ext4 -L ctftilde-root /dev/nbd0p1
+ sudo tune2fs -O ^metadata_csum_seed /dev/nbd0p1
+ sudo mount /dev/nbd0p1 /mnt
+ sudo sh -c "CTFTILDE_DISK_DEV=/dev/nbd0 guix system init vm.scm /mnt/"
+ sudo mkdir -p /mnt/etc/cert-ctftilde
+ sudo cp fullchain.pem privkey.pem /mnt/etc/cert-ctftilde/
+ sudo umount /mnt
+ sudo qemu-nbd -d /dev/nbd0
+
+ # Verification that `guix deploy` works, optional.
+ HOSTFWD=
+ for VM_PORT in 22 80 443 1965 20030; do
+ HOSTFWD="$HOSTFWD,hostfwd=tcp::$VM_PORT-:$VM_PORT"
+ done
+ for VM_PORT in 20030; do
+ HOSTFWD="$HOSTFWD,hostfwd=udp::$VM_PORT-:$VM_PORT"
+ done
+ sudo qemu-system-x86_64 -net nic,model=rtl8139 -net user"$HOSTFWD" \
+ -m 2G -hda vm.qcow2 -nographic -enable-kvm
+ ssh-keygen -R localhost
+ VM_SSH_HOST_KEY="$(ssh root@localhost 'awk "{print \$1 \" \" \$2}" /etc/ssh/ssh_host_ed25519_key.pub')"
+ sed -i "s|ssh-ed25519 [^\"]\+|$VM_SSH_HOST_KEY|" vm-deploy.scm
+ guix deploy vm-deploy.scm
+#+end_src
+
+Some work is then needed to manually create Abdul's user account and copy the
+relevant files (no automation, unfortunately).
+
+The HTML version of Abdul's blog has been generated from Gemtext version using a
+modifier variant of =convert_gemtext_file.py= from [[https://raw.githubusercontent.com/huntingb/gemtext-html-converter][here]]. The modified variant
+is unfortunately not included here (because GPL requires documenting what
+exactly got changed and I am too lazy).
+
+* Copying
+
+Unless specified otherwise, files were authored by Wojtek Kosior and are
+available under the terms of CC0-1.0.
diff --git a/presentation/Awesome_Demon.svg b/presentation/Awesome_Demon.svg
new file mode 100644
index 0000000..694e212
--- /dev/null
+++ b/presentation/Awesome_Demon.svg
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:ns1="http://sozi.baierouge.fr"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ id="svg3773"
+ sodipodi:docname="hover.svg"
+ inkscape:export-filename="./hover.png"
+ viewBox="0 0 1064.9453 997.36969"
+ inkscape:export-xdpi="90"
+ version="1.1"
+ inkscape:export-ydpi="90"
+ inkscape:version="0.48.4 r9939"
+ >
+ <sodipodi:namedview
+ id="namedview19"
+ fit-margin-left="0"
+ inkscape:zoom="0.35355339"
+ borderopacity="1"
+ inkscape:current-layer="svg3773"
+ inkscape:cx="300.83581"
+ inkscape:cy="118.45062"
+ inkscape:window-maximized="0"
+ showgrid="false"
+ fit-margin-right="0"
+ bordercolor="#666666"
+ inkscape:window-x="0"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:window-y="19"
+ fit-margin-bottom="0"
+ inkscape:window-width="1147"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ pagecolor="#ffffff"
+ gridtolerance="10"
+ inkscape:window-height="1181"
+ fit-margin-top="0"
+ />
+ <defs
+ id="defs3775"
+ >
+ <style
+ id="style3110"
+ type="text/css"
+ >.str0 {stroke:black;stroke-width:0.238063}
+ .fil0 {fill:black}
+ .fil2 {fill:#050707}
+ .fil3 {fill:#881846}
+ .fil5 {fill:#F6BCD6}
+ .fil1 {fill:#F9DD56}
+ .fil4 {fill:#FDFCFD}</style
+ >
+ <style
+ id="style3955"
+ type="text/css"
+ >.str0 {stroke:black;stroke-width:0.238063}
+ .fil0 {fill:black}
+ .fil2 {fill:#050707}
+ .fil3 {fill:#881846}
+ .fil5 {fill:#F6BCD6}
+ .fil1 {fill:#F9DD56}
+ .fil4 {fill:#FDFCFD}</style
+ >
+ <clipPath
+ id="clip2"
+ >
+ <rect
+ id="rect28"
+ y="0"
+ width="3e3"
+ x="0"
+ height="3e3"
+ />
+ </clipPath
+ >
+ <clipPath
+ id="clip1"
+ >
+ <rect
+ id="rect16"
+ y="0"
+ width="3e3"
+ x="0"
+ height="3e3"
+ />
+ </clipPath
+ >
+ <radialGradient
+ id="radialGradient2297"
+ gradientUnits="userSpaceOnUse"
+ cy="15.699"
+ cx="30.561"
+ gradientTransform="matrix(.77122 0 0 .77122 6.9919 3.5917)"
+ r="8.9021"
+ >
+ <stop
+ id="stop2293"
+ stop-color="#ffa107"
+ offset="0"
+ />
+ <stop
+ id="stop2295"
+ stop-color="#c00"
+ offset="1"
+ />
+ </radialGradient
+ >
+ <linearGradient
+ id="linearGradient2337"
+ >
+ <stop
+ id="stop2339"
+ stop-color="#c00"
+ offset="0"
+ />
+ <stop
+ id="stop2345"
+ stop-color="#c84a00"
+ offset=".27586"
+ />
+ <stop
+ id="stop2341"
+ stop-color="#be0000"
+ offset="1"
+ />
+ </linearGradient
+ >
+ <linearGradient
+ id="linearGradient4295"
+ y2="31.727"
+ xlink:href="#radialGradient2297"
+ gradientUnits="userSpaceOnUse"
+ x2="39.754"
+ gradientTransform="matrix(10.771 0 0 10.771 103.16 632.21)"
+ y1="10.164"
+ x1="68.65"
+ inkscape:collect="always"
+ />
+ <radialGradient
+ id="radialGradient4297"
+ xlink:href="#radialGradient2297"
+ gradientUnits="userSpaceOnUse"
+ cy="-4.1211"
+ cx="159.18"
+ r="147.6"
+ inkscape:collect="always"
+ />
+ <linearGradient
+ id="linearGradient4299"
+ y2="9.4235"
+ xlink:href="#linearGradient2337"
+ gradientUnits="userSpaceOnUse"
+ x2="32.312"
+ gradientTransform="matrix(15.642 0 0 15.642 -74.274 -109.1)"
+ y1="7.361"
+ x1="30.526"
+ inkscape:collect="always"
+ />
+ <linearGradient
+ id="linearGradient4301"
+ y2="8.0444"
+ xlink:href="#radialGradient2297"
+ gradientUnits="userSpaceOnUse"
+ x2="31.775"
+ gradientTransform="matrix(15.642 0 0 15.642 -74.274 -109.1)"
+ y1="6.1455"
+ x1="32.099"
+ inkscape:collect="always"
+ />
+ <linearGradient
+ id="linearGradient4303"
+ y2="9.6735"
+ xlink:href="#linearGradient2337"
+ gradientUnits="userSpaceOnUse"
+ x2="8.8115"
+ gradientTransform="matrix(15.642 0 0 15.642 -74.274 -109.1)"
+ y1="7.611"
+ x1="10.401"
+ inkscape:collect="always"
+ />
+ <linearGradient
+ id="linearGradient4305"
+ y2="8.0444"
+ xlink:href="#radialGradient2297"
+ gradientUnits="userSpaceOnUse"
+ x2="8.0879"
+ gradientTransform="matrix(15.642 0 0 15.642 -74.274 -109.1)"
+ y1="6.0205"
+ x1="7.2236"
+ inkscape:collect="always"
+ />
+ </defs
+ >
+ <g
+ id="g4271"
+ transform="matrix(1.6438 0 0 1.6438 0 -865.45)"
+ >
+ <path
+ id="path4214"
+ d="m345.06 1022s231.63 9.2841 264.3-84.205c21.92-62.726-68.989-101.66-76.742-144.06-7.7391-42.406 45.786-31.632 45.786-31.632l8.7461 17.506 31.632-37.702-56.532-7.408 10.76 18.182s-52.159-8.415-53.842 37.012c-1.683 45.441 91.765 103.34 59.457 148.1-32.308 44.765-188.7 30.956-188.7 30.956l-44.862 53.249z"
+ style="color:#000000;stroke:#3c0000;stroke-width:30;fill:none"
+ inkscape:connector-curvature="0"
+ />
+ <path
+ id="path2281"
+ style="color:#000000;fill-rule:evenodd;fill:url(#linearGradient4295)"
+ inkscape:connector-curvature="0"
+ d="m345.06 1022s231.63 9.2841 264.3-84.205c21.92-62.726-68.989-101.66-76.742-144.06-7.7391-42.406 45.786-31.632 45.786-31.632l8.7461 17.506 31.632-37.702-56.532-7.408 10.76 18.182s-52.159-8.415-53.842 37.012c-1.683 45.441 91.765 103.34 59.457 148.1-32.308 44.765-188.7 30.956-188.7 30.956l-44.862 53.249z"
+ />
+ <g
+ id="layer1"
+ transform="translate(1935 -250.07)"
+ >
+ <g
+ id="Слой_x0020_1-5"
+ transform="matrix(1.5439,0,0,1.5439,-1935,830.08)"
+ >
+ <circle
+ id="circle3959"
+ sodipodi:rx="161.8"
+ sodipodi:ry="161.8"
+ style="stroke:#000000;stroke-width:.23806;fill:#3c0000"
+ d="m 323.72,161.92 c 0,89.35967 -72.44033,161.8 -161.8,161.8 C 72.560324,323.72 0.11999512,251.27967 0.11999512,161.92 0.11999512,72.560324 72.560324,0.11999512 161.92,0.11999512 c 89.35967,0 161.8,72.44032888 161.8,161.80000488 z"
+ cx="161.92"
+ cy="161.92"
+ sodipodi:cy="161.92"
+ sodipodi:cx="161.92"
+ r="161.8"
+ class="fil0 str0"
+ />
+ <circle
+ id="circle3961"
+ sodipodi:rx="147.48"
+ sodipodi:ry="147.48"
+ style="stroke:#000000;stroke-width:.23806;fill:url(#radialGradient4297)"
+ d="m 309.39999,161.92 c 0,81.45095 -66.02904,147.47999 -147.47999,147.47999 -81.450954,0 -147.479998,-66.02904 -147.479998,-147.47999 0,-81.450954 66.029044,-147.479998 147.479998,-147.479998 81.45095,0 147.47999,66.029044 147.47999,147.479998 z"
+ cx="161.92"
+ cy="161.92"
+ sodipodi:cy="161.92"
+ sodipodi:cx="161.92"
+ r="147.48"
+ class="fil1 str0"
+ />
+ <path
+ id="path3963"
+ d="m41.123 185.96h11.294c11.213 165.04 248.98 116.18 199.71-9.13h-211.01v9.1332z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ class="fil2"
+ />
+ <path
+ id="path3965"
+ d="m245.86 186.21-183.75 0.008c18.239 150.24 213.66 103.19 183.75-0.008z"
+ style="fill:#ffabab"
+ inkscape:connector-curvature="0"
+ class="fil3"
+ />
+ <path
+ id="path3967"
+ d="m176.27 91.114c-9.6714 12.316-17.811 31.937-8.2086 59.503l88.527 0.009c6.6797-20.838 4.7654-49.806-13.117-65.026-20.429-17.388-50.218-16.113-67.201 5.5133z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ class="fil2"
+ />
+ <path
+ id="path3969"
+ d="m61.305 74.123c-30.866 9.3689-32.821 49.81-25.828 76.495l76.459-0.0254c9.5014-26.523 3.1954-52.857-18.826-70.836-6.6703-5.4459-19.863-9.2589-31.806-5.6339z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ class="fil2"
+ />
+ <path
+ id="path3971"
+ d="m174.68 141.48h74.64c3.8563-12.479 2.2972-23.818-0.31496-31.809-3.8973 5.0785-8.569 6.563-13.857 7.2436-9.181 1.2217-16.692-7.3466-16.692-16.062l-0.0802-0.63896c0.89227-8.5141 2.272-8.6824 8.5836-14.478-2.4331-1.6292-7.6264-3.1493-11.653-3.1493-33.827-0.65539-50.247 37.199-40.627 58.893z"
+ style="fill:#fdfcfd"
+ inkscape:connector-curvature="0"
+ class="fil4"
+ />
+ <path
+ id="path3973"
+ d="m223.2 259.78c-24.285-42.293-86.986-30.941-95.6 17.233 29.39 11.065 72.231 3.9741 95.6-17.233z"
+ style="fill:#e22727"
+ inkscape:connector-curvature="0"
+ class="fil5"
+ />
+ <path
+ id="path3975"
+ d="m42.72 141.48 62.752 0.0112c1.05-8.9739 3.435-21.112-1.024-30.875-10.927 12.411-30.279 6.3351-30.234-11.653 0-8.0911 4.333-9.7752 9.1332-14.172-34.666-15.646-48.763 30.431-40.627 56.689z"
+ style="fill:#fdfcfd"
+ inkscape:connector-curvature="0"
+ class="fil4"
+ />
+ </g
+ >
+ </g
+ >
+ <path
+ id="path46"
+ d="m242.23 1133-30.125-70.085-0.0186-1.3432 54.953 0.1129 0.0186 1.3432-24.188 69.935c-0.14309 0.4102-0.47787 0.4102-0.63972 0.037z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ />
+ <g
+ id="g4197"
+ transform="matrix(1.0773 -.10838 .10838 1.0773 -35.511 623.88)"
+ >
+ <path
+ id="path2276"
+ d="m465.91-35.065c-1.9552 0.36758-3.8479 1.0746-5.5684 2.0897l-93.381 51.22c-4.8176 2.7655-9.7135 7.7802-8.5716 13.22 6.8511 32.636 32.597 54.957 67.322 58.867 5.24 0.59439 9.5727-4.3484 11.982-9.0252l46.346-91.634c2.9094-5.7765 2.3306-12.698-1.486-17.918-3.8322-5.2181-10.245-7.8537-16.643-6.8213z"
+ style="stroke-linejoin:round;fill-rule:evenodd;color:#000000;stroke:#3c0000;stroke-linecap:round;stroke-width:15.642;fill:url(#linearGradient4299)"
+ inkscape:connector-curvature="0"
+ />
+ <path
+ id="path2299"
+ d="m466.15-18.437-87.703 47.504c-2.9876 1.9114-3.7853 1.9646-2.8155 5.6811 4.3797 16.683 25.996 35.219 42.733 39.301 3.535 0.87594 6.6164-1.267 8.2901-4.5048l43.093-86.151c2.0021-3.9933-2.4088-2.5324-3.5976-1.8301z"
+ style="opacity:.64773;stroke-linejoin:round;color:#000000;stroke:url(#linearGradient4301);stroke-linecap:round;stroke-width:15.642;fill:none"
+ inkscape:connector-curvature="0"
+ />
+ </g
+ >
+ <g
+ id="g4202"
+ transform="matrix(1.0676 .12803 -.12803 1.0676 -1.4766 568.28)"
+ >
+ <path
+ id="path2279"
+ d="m34.071-33.11c1.9662 0.36758 3.8526 1.0746 5.5747 2.0897l93.379 51.22c4.8176 2.7655 9.7135 7.7802 8.5716 13.22-6.8354 32.636-32.597 54.957-67.325 58.867-5.2274 0.59439-9.5727-4.3484-11.977-9.0252l-46.336-91.633c-2.9125-5.7765-2.3384-12.698 1.4844-17.918 3.8213-5.2181 10.247-7.8537 16.633-6.8213z"
+ style="stroke-linejoin:round;fill-rule:evenodd;color:#000000;stroke:#3c0000;stroke-linecap:round;stroke-width:15.642;fill:url(#linearGradient4303)"
+ inkscape:connector-curvature="0"
+ />
+ <path
+ id="path2301"
+ d="m33.708-15.671 87.711 47.502c2.9876 1.9114 3.7853 1.9662 2.7999 5.6826-4.3797 16.687-25.981 35.222-42.727 39.304-3.5319 0.86029-6.6164-1.267-8.2791-4.5048l-43.095-86.154c-2.0115-3.9933 2.3994-2.5324 3.5898-1.8301z"
+ style="opacity:.64773;stroke-linejoin:round;color:#000000;stroke:url(#linearGradient4305);stroke-linecap:round;stroke-width:15.642;fill:none"
+ inkscape:connector-curvature="0"
+ />
+ </g
+ >
+ <path
+ id="path78"
+ d="m75.376 644.34 112.41 78.077 2.2896 1.2366 13.214-26.044-2.2877-1.2312-125.4-52.301c-0.73907-0.31142-0.82014-0.14828-0.22171 0.26253z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ />
+ <path
+ id="path76"
+ d="m364.18 649.85-116.83 70.74-2.3578 1.0886-11.534-26.766 2.3556-1.0832 128.16-44.258c0.76071-0.26177 0.82606-0.0965 0.20963 0.27759z"
+ style="fill:#3c0000"
+ inkscape:connector-curvature="0"
+ />
+ </g
+ >
+ <metadata
+ >
+ <rdf:RDF
+ >
+ <cc:Work
+ >
+ <dc:format
+ >image/svg+xml</dc:format
+ >
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage"
+ />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/"
+ />
+ <dc:publisher
+ >
+ <cc:Agent
+ rdf:about="http://openclipart.org/"
+ >
+ <dc:title
+ >Openclipart</dc:title
+ >
+ </cc:Agent
+ >
+ </dc:publisher
+ >
+ </cc:Work
+ >
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/"
+ >
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction"
+ />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution"
+ />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks"
+ />
+ </cc:License
+ >
+ </rdf:RDF
+ >
+ </metadata
+ >
+</svg
+>
diff --git a/presentation/Guix_logo.svg b/presentation/Guix_logo.svg
new file mode 100644
index 0000000..fd31fa2
--- /dev/null
+++ b/presentation/Guix_logo.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ height="44.471672mm"
+ width="73.686356mm"
+ viewBox="0 0 261.09338 157.57679"
+ id="svg3338"
+ version="1.1"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Guix_logo.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs3344">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4874381,0,0,1.4874381,1284.8057,-24.050665)"
+ x1="142.96875"
+ y1="63.65625"
+ x2="176.60477"
+ y2="70.667412" />
+ <linearGradient
+ id="linearGradient4702-3">
+ <stop
+ style="stop-color:#ff0000;stop-opacity:0.58431375;"
+ offset="0"
+ id="stop4704-1" />
+ <stop
+ style="stop-color:#ffcc00;stop-opacity:1;"
+ offset="1"
+ id="stop4706-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4874381,0,0,1.4874381,1284.7576,-1291.8882)"
+ x1="113.5146"
+ y1="1004.8033"
+ x2="78.000107"
+ y2="922.07178" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4696-5"
+ id="linearGradient3929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.83291399,0,0,0.83291399,1519.4606,-667.62588)"
+ x1="108.08774"
+ y1="1025.709"
+ x2="80.655251"
+ y2="1043.709" />
+ <linearGradient
+ id="linearGradient4696-5">
+ <stop
+ style="stop-color:#ffb638;stop-opacity:1;"
+ offset="0"
+ id="stop4698-6" />
+ <stop
+ style="stop-color:#f0ae26;stop-opacity:1;"
+ offset="1"
+ id="stop4700-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3926"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.4874381,0,0,1.4874381,1586.895,-24.051145)"
+ x1="142.96875"
+ y1="63.65625"
+ x2="177.04297"
+ y2="69.791016" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="749"
+ id="namedview3342"
+ showgrid="false"
+ inkscape:zoom="1.8132778"
+ inkscape:cx="87.962253"
+ inkscape:cy="135.66592"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g3398"
+ inkscape:showpageshadow="2"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm" />
+ <metadata
+ id="metadata3340">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="g3398"
+ transform="translate(-1305.3034,-46.601235)">
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none"
+ d="m 1557.9367,46.602435 c -2.6825,4.90263 -5.4059,8.89401 -8.1809,12.03897 -2.6825,3.05258 -5.6406,5.49427 -8.8781,7.34422 -3.1451,1.75757 -6.7135,3.02514 -10.691,3.76506 -3.885,0.64751 -8.3459,0.97629 -13.4334,0.9761 -3.7529,0 -7.1256,-0.1922 -10.0867,-0.55773 -0.012,0 -0.034,0 -0.047,0 -0.3754,-0.0273 -1.1508,-0.15334 -1.9523,-0.27891 -0.8442,-0.13218 -1.7071,-0.25955 -3.0678,-0.5113 -24.9421,-4.61489 -33.2141,12.7003 -35.0013,17.47744 -0.2797,0.74767 -0.4183,1.20845 -0.4183,1.20845 l -30.3066,84.505085 -18.593,31.60821 h 37.1395 c 15.2535,-33.96261 29.9183,-104.875515 45.5993,-111.139545 3.3988,0.47537 7.6118,0.69713 12.6897,0.69713 6.6601,0 12.6232,-0.79843 17.8957,-2.46349 5.2726,-1.66502 10.0151,-4.24757 14.2702,-7.76263 4.255,-3.60748 8.1051,-8.20868 11.5276,-13.75881 3.515,-5.54998 6.8486,-12.21732 9.9937,-19.98743 l -8.4597,-3.16082 z"
+ id="path3143" />
+ <path
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3936);fill-opacity:1;stroke:none"
+ d="m 1557.9358,46.605905 c -2.6826,4.90263 -5.4057,8.8885 -8.1808,12.03346 -2.6824,3.05259 -5.6417,5.49543 -8.8792,7.34538 -0.7789,0.43527 -1.5819,0.83524 -2.4125,1.20983 -0.01,0.003 -0.014,0.0109 -0.022,0.0144 -1.0455,0.73525 -2.3902,1.36643 -4.2128,1.80033 -21.0208,5.00504 -35.3388,23.73821 -36.6837,25.5504 0.6098,-0.50134 1.2236,-0.91065 1.8364,-1.22422 0.092,-0.0488 0.1814,-0.093 0.2736,-0.13683 0.015,-0.007 0.029,-0.0148 0.043,-0.0216 0.1068,-0.0498 0.2172,-0.0941 0.3241,-0.13682 3.3988,0.47537 7.6109,0.69853 12.6888,0.69853 6.6601,0 12.6228,-0.805 17.8954,-2.47007 5.2725,-1.66501 10.0108,-4.2408 14.2658,-7.75586 4.2551,-3.60747 8.1069,-8.21164 11.5294,-13.76177 3.515,-5.55 6.8504,-12.22084 9.9955,-19.99096 l -8.4616,-3.1542 z"
+ id="path3145"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none"
+ d="m 1313.7642,46.602455 c 2.6826,4.90263 5.4059,8.89399 8.1809,12.03895 2.6825,3.05258 5.6407,5.49427 8.8782,7.34422 3.145,1.75757 6.7134,3.02514 10.6909,3.76506 3.8851,0.6477 8.3459,0.97629 13.4334,0.9761 3.7529,0 7.1256,-0.1922 10.0867,-0.55773 0.012,0 0.035,0 0.047,0 0.3754,-0.0269 1.1508,-0.15333 1.9523,-0.27891 0.8442,-0.13218 1.7071,-0.25955 3.0678,-0.5113 24.9421,-4.61489 33.2141,12.7003 35.0013,17.47744 0.2797,0.74767 0.4183,1.20845 0.4183,1.20845 l 30.3066,84.505085 18.593,31.60821 h -37.1395 c -15.2535,-33.96261 -29.9183,-104.875515 -45.5993,-111.139545 -3.3988,0.47537 -7.6118,0.69713 -12.6897,0.69713 -6.6601,0 -12.6232,-0.79843 -17.8957,-2.46349 -5.2726,-1.66502 -10.0151,-4.24757 -14.2702,-7.76263 -4.255,-3.60748 -8.105,-8.20867 -11.5276,-13.75881 -3.515,-5.54993 -6.8486,-12.21728 -9.9937,-19.98743 l 8.4598,-3.1608 z"
+ id="path3147" />
+ <path
+ sodipodi:nodetypes="ccccccccsscccccccccccc"
+ id="path3149"
+ d="m 1313.7627,46.601235 c 2.6826,4.90262 5.4059,8.89399 8.1809,12.03894 2.6825,3.05259 5.6407,5.49427 8.8781,7.34422 3.1451,1.75757 6.7135,3.02514 10.691,3.76507 3.8851,0.64768 8.3459,0.97628 13.4334,0.97609 3.7529,0 7.1256,-0.19221 10.0867,-0.55772 0.012,0 0.035,0 0.047,0 0.3754,-0.027 1.1508,-0.15335 1.9523,-0.27892 0.8442,-0.13218 1.7071,-0.25955 3.0678,-0.5113 24.9421,-4.61489 33.2141,12.70029 35.0013,17.47744 0.2797,0.74767 0.4183,1.20845 0.4183,1.20845 l 30.3066,84.505095 15.6181,31.60819 h -34.1646 c -15.2535,-33.9626 -29.9183,-104.875505 -45.5993,-111.139535 -3.3988,0.47537 -7.6118,0.69713 -12.6897,0.69713 -6.6601,0 -12.6232,-0.79843 -17.8957,-2.46349 -5.2726,-1.66502 -10.0151,-4.24758 -14.2701,-7.76263 -4.2551,-3.60748 -8.1051,-8.20867 -11.5277,-13.7588 -3.515,-5.54995 -6.8486,-12.21728 -9.9937,-19.98743 l 8.4598,-3.1608 z"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3932);fill-opacity:1;stroke:none"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3151"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3929);fill-opacity:1;stroke:none"
+ d="m 1435.8193,172.5566 -18.52,31.62143 h 37.1209"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3926);fill-opacity:1;stroke:none"
+ d="m 1313.7667,46.605905 -8.4616,3.1542 c 0.9829,2.42817 1.9835,4.75137 3.003,6.96371 0.2039,0.44246 0.4068,0.87683 0.6121,1.31064 8e-4,0.002 -8e-4,0.006 0,0.007 0.2044,0.4318 0.4135,0.85862 0.6193,1.28184 0.069,0.14106 0.1401,0.27758 0.2089,0.41768 0.3452,0.70349 0.6877,1.40177 1.037,2.08119 0,0.003 0.01,0.004 0.01,0.007 0.2082,0.40484 0.4169,0.80634 0.6265,1.20263 0.8454,1.59852 1.7025,3.12828 2.5709,4.58726 0.2168,0.36432 0.4298,0.7174 0.6481,1.073 0.085,0.13784 0.1672,0.27395 0.252,0.41048 0.1351,0.21746 0.2749,0.43399 0.4105,0.64812 0.2139,0.34687 0.4237,0.69034 0.6409,1.0298 0.3462,0.54084 0.7041,1.06956 1.0586,1.59149 0.09,0.13178 0.1764,0.26551 0.2665,0.39607 0.225,0.32622 0.4486,0.64634 0.6769,0.96499 0.4544,0.6341 0.9152,1.25393 1.3827,1.85795 0.2337,0.302 0.4687,0.59851 0.7057,0.89296 0.474,0.58892 0.9532,1.16257 1.4403,1.72113 0.3692,0.42348 0.7467,0.83988 1.1234,1.24584 0.119,0.12822 0.2403,0.2552 0.36,0.38166 0.5012,0.52939 1.0055,1.04257 1.5195,1.54109 0.2564,0.24866 0.511,0.49359 0.7706,0.73454 0.2608,0.24217 0.5209,0.47857 0.7849,0.71294 0.2628,0.23322 0.5262,0.45866 0.7922,0.68413 0.7978,0.65907 1.6161,1.28595 2.4484,1.87955 2.2197,1.58292 4.563,2.93443 7.0357,4.05436 0.3091,0.14 0.6159,0.27768 0.929,0.41048 0.6283,0.26652 1.2637,0.51855 1.9084,0.75614 0.3213,0.11842 0.6396,0.22723 0.965,0.33846 0.3254,0.11123 0.657,0.22 0.9866,0.32406 0.3295,0.10407 0.6588,0.20515 0.9937,0.30246 0.6699,0.19463 1.3538,0.37949 2.0452,0.5473 0.3458,0.0839 0.6931,0.16039 1.0442,0.23765 0.3512,0.0773 0.7021,0.15261 1.0586,0.22324 0.3588,0.0711 0.7159,0.13718 1.0802,0.20164 0.7239,0.12808 1.458,0.24373 2.2036,0.34566 1.1184,0.15292 2.2607,0.27964 3.4279,0.37447 0.7781,0.0633 1.5694,0.1135 2.3692,0.15123 0.7999,0.0377 1.6125,0.0595 2.4341,0.072 0.4108,0.006 0.8224,0.007 1.2386,0.007 0.6348,0 1.2574,-2.1e-4 1.8652,-0.007 1.2156,-0.014 2.3763,-0.0437 3.4854,-0.0864 0.5521,-0.0213 1.0943,-0.0435 1.6203,-0.072 0.5282,-0.0287 1.0462,-0.0646 1.5483,-0.10083 1.5062,-0.10864 2.895,-0.24661 4.1696,-0.42487 0.1069,0.0427 0.2173,0.087 0.3241,0.13682 0.015,0.006 0.028,0.0148 0.043,0.0216 0.092,0.0439 0.1815,0.088 0.2736,0.13682 0.6131,0.31376 1.2262,0.72249 1.8364,1.22423 -1.3421,-1.80851 -15.6604,-20.54497 -36.6837,-25.5504 -1.8226,-0.43396 -3.1673,-1.06505 -4.2128,-1.80034 -0.01,-0.003 -0.014,-0.0108 -0.022,-0.0144 -0.8287,-0.37374 -1.6352,-0.77569 -2.4125,-1.20983 0,-8e-4 -0.01,7.9e-4 -0.01,0 -0.2005,-0.11459 -0.3993,-0.23372 -0.5977,-0.35287 0,-8e-4 -0.01,8e-4 -0.01,0 -0.2001,-0.12025 -0.3925,-0.24238 -0.5905,-0.36726 -0.3976,-0.25081 -0.7922,-0.50819 -1.181,-0.77775 -0.1936,-0.13419 -0.3847,-0.27162 -0.5761,-0.41048 -0.3856,-0.27966 -0.7611,-0.56553 -1.1378,-0.86416 -0.1871,-0.14821 -0.3696,-0.29358 -0.5545,-0.44649 -0.1864,-0.15403 -0.3704,-0.30928 -0.5545,-0.46808 -0.1828,-0.15761 -0.3595,-0.32017 -0.5401,-0.4825 -0.9031,-0.81159 -1.7795,-1.67679 -2.6285,-2.60688 -0.1699,-0.18602 -0.3437,-0.37813 -0.5113,-0.56891 -0.6171,-0.6993 -1.2315,-1.4415 -1.8436,-2.22522 -0.076,-0.0976 -0.1471,-0.19638 -0.2232,-0.29525 -0.1719,-0.22327 -0.347,-0.44692 -0.5185,-0.67693 -0.8574,-1.15011 -1.7082,-2.38737 -2.5565,-3.70871 -0.3393,-0.52854 -0.6774,-1.07112 -1.0154,-1.62751 -0.169,-0.27819 -0.3354,-0.55736 -0.5041,-0.84255 -0.5043,-0.85289 -1.0109,-1.74117 -1.5123,-2.6573 z"
+ id="path3154"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/presentation/Guix_logo_with_flag.svg b/presentation/Guix_logo_with_flag.svg
new file mode 100644
index 0000000..bb3c700
--- /dev/null
+++ b/presentation/Guix_logo_with_flag.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ height="44.471672mm"
+ width="73.686356mm"
+ viewBox="0 0 261.09338 157.57679"
+ id="svg3338"
+ version="1.1"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Guix_logo_with_flag.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs3344">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4874381,0,0,1.4874381,1284.8057,-24.050665)"
+ x1="142.96875"
+ y1="63.65625"
+ x2="176.60477"
+ y2="70.667412" />
+ <linearGradient
+ id="linearGradient4702-3">
+ <stop
+ style="stop-color:#ff0000;stop-opacity:0.58431375;"
+ offset="0"
+ id="stop4704-1" />
+ <stop
+ style="stop-color:#ffcc00;stop-opacity:1;"
+ offset="1"
+ id="stop4706-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4874381,0,0,1.4874381,1284.7576,-1291.8882)"
+ x1="113.5146"
+ y1="1004.8033"
+ x2="78.000107"
+ y2="922.07178" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4696-5"
+ id="linearGradient3929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.83291399,0,0,0.83291399,1519.4606,-667.62588)"
+ x1="108.08774"
+ y1="1025.709"
+ x2="80.655251"
+ y2="1043.709" />
+ <linearGradient
+ id="linearGradient4696-5">
+ <stop
+ style="stop-color:#ffb638;stop-opacity:1;"
+ offset="0"
+ id="stop4698-6" />
+ <stop
+ style="stop-color:#f0ae26;stop-opacity:1;"
+ offset="1"
+ id="stop4700-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4702-3"
+ id="linearGradient3926"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.4874381,0,0,1.4874381,1586.895,-24.051145)"
+ x1="142.96875"
+ y1="63.65625"
+ x2="177.04297"
+ y2="69.791016" />
+ <linearGradient
+ xlink:href="#c"
+ id="d"
+ x1="-3.7498047"
+ x2="4.318048"
+ y1="144.07323"
+ y2="144.07323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.18442791,0,0,0.18442974,1351.8791,722.58769)" />
+ <linearGradient
+ id="c">
+ <stop
+ offset="0"
+ stop-color="#783000"
+ id="stop557" />
+ <stop
+ offset=".75"
+ id="stop559" />
+ <stop
+ offset="1"
+ stop-color="#642800"
+ id="stop561" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#b"
+ id="e"
+ x1="116.57422"
+ x2="221.6933"
+ y1="98.310341"
+ y2="94.320732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.1844293,0,0,0.1844293,1439.7869,75.740202)" />
+ <linearGradient
+ id="b">
+ <stop
+ offset="0"
+ stop-color="#c82a00"
+ id="stop548" />
+ <stop
+ offset=".52"
+ stop-color="#5f1802"
+ id="stop550" />
+ <stop
+ offset=".67"
+ stop-color="#5f1802"
+ id="stop552" />
+ <stop
+ offset="1"
+ stop-color="#bf3415"
+ id="stop554" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#a"
+ id="f"
+ cx="175.42162"
+ cy="98.310333"
+ r="72.10807"
+ fx="175.42162"
+ fy="98.310333"
+ gradientTransform="matrix(0.1844293,0,0,0.21658271,1439.7869,72.579192)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="a">
+ <stop
+ offset="0"
+ stop-color="#b92c10"
+ id="stop564" />
+ <stop
+ offset="1"
+ stop-color="#621805"
+ id="stop566" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#a"
+ id="g"
+ x1="48.975147"
+ x2="117.85719"
+ y1="87.787521"
+ y2="77.99485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.1844293,0,0,0.1844293,1439.7869,75.740202)" />
+ <radialGradient
+ xlink:href="#a"
+ id="h"
+ cx="67.081421"
+ cy="84.330505"
+ r="58.420074"
+ fx="67.081421"
+ fy="84.330505"
+ gradientTransform="matrix(0.1844293,0,0,0.26391464,1439.7869,69.037092)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="749"
+ id="namedview3342"
+ showgrid="false"
+ inkscape:zoom="1.5412692"
+ inkscape:cx="157.66227"
+ inkscape:cy="78.506727"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g3398"
+ inkscape:showpageshadow="2"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm" />
+ <metadata
+ id="metadata3340">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="g3398"
+ transform="translate(-1305.3034,-46.601235)">
+ <rect
+ width="1.4879373"
+ height="49.944027"
+ x="1351.1874"
+ y="724.18701"
+ fill="url(#d)"
+ color="#000000"
+ overflow="visible"
+ rx="0.74396867"
+ ry="0.74397606"
+ transform="matrix(0.8930067,-0.45004337,0.32182923,0.94679776,2.7438929e-5,2.4459005e-7)"
+ id="rect576"
+ style="fill:url(#d);stroke-width:0.184429" />
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none"
+ d="m 1557.9367,46.602435 c -2.6825,4.90263 -5.4059,8.89401 -8.1809,12.03897 -2.6825,3.05258 -5.6406,5.49427 -8.8781,7.34422 -3.1451,1.75757 -6.7135,3.02514 -10.691,3.76506 -3.885,0.64751 -8.3459,0.97629 -13.4334,0.9761 -3.7529,0 -7.1256,-0.1922 -10.0867,-0.55773 -0.012,0 -0.034,0 -0.047,0 -0.3754,-0.0273 -1.1508,-0.15334 -1.9523,-0.27891 -0.8442,-0.13218 -1.7071,-0.25955 -3.0678,-0.5113 -24.9421,-4.61489 -33.2141,12.7003 -35.0013,17.47744 -0.2797,0.74767 -0.4183,1.20845 -0.4183,1.20845 l -30.3066,84.505085 -18.593,31.60821 h 37.1395 c 15.2535,-33.96261 29.9183,-104.875515 45.5993,-111.139545 3.3988,0.47537 7.6118,0.69713 12.6897,0.69713 6.6601,0 12.6232,-0.79843 17.8957,-2.46349 5.2726,-1.66502 10.0151,-4.24757 14.2702,-7.76263 4.255,-3.60748 8.1051,-8.20868 11.5276,-13.75881 3.515,-5.54998 6.8486,-12.21732 9.9937,-19.98743 l -8.4597,-3.16082 z"
+ id="path3143" />
+ <path
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3936);fill-opacity:1;stroke:none"
+ d="m 1557.9358,46.605905 c -2.6826,4.90263 -5.4057,8.8885 -8.1808,12.03346 -2.6824,3.05259 -5.6417,5.49543 -8.8792,7.34538 -0.7789,0.43527 -1.5819,0.83524 -2.4125,1.20983 -0.01,0.003 -0.014,0.0109 -0.022,0.0144 -1.0455,0.73525 -2.3902,1.36643 -4.2128,1.80033 -21.0208,5.00504 -35.3388,23.73821 -36.6837,25.5504 0.6098,-0.50134 1.2236,-0.91065 1.8364,-1.22422 0.092,-0.0488 0.1814,-0.093 0.2736,-0.13683 0.015,-0.007 0.029,-0.0148 0.043,-0.0216 0.1068,-0.0498 0.2172,-0.0941 0.3241,-0.13682 3.3988,0.47537 7.6109,0.69853 12.6888,0.69853 6.6601,0 12.6228,-0.805 17.8954,-2.47007 5.2725,-1.66501 10.0108,-4.2408 14.2658,-7.75586 4.2551,-3.60747 8.1069,-8.21164 11.5294,-13.76177 3.515,-5.55 6.8504,-12.22084 9.9955,-19.99096 l -8.4616,-3.1542 z"
+ id="path3145"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none"
+ d="m 1313.7642,46.602455 c 2.6826,4.90263 5.4059,8.89399 8.1809,12.03895 2.6825,3.05258 5.6407,5.49427 8.8782,7.34422 3.145,1.75757 6.7134,3.02514 10.6909,3.76506 3.8851,0.6477 8.3459,0.97629 13.4334,0.9761 3.7529,0 7.1256,-0.1922 10.0867,-0.55773 0.012,0 0.035,0 0.047,0 0.3754,-0.0269 1.1508,-0.15333 1.9523,-0.27891 0.8442,-0.13218 1.7071,-0.25955 3.0678,-0.5113 24.9421,-4.61489 33.2141,12.7003 35.0013,17.47744 0.2797,0.74767 0.4183,1.20845 0.4183,1.20845 l 30.3066,84.505085 18.593,31.60821 h -37.1395 c -15.2535,-33.96261 -29.9183,-104.875515 -45.5993,-111.139545 -3.3988,0.47537 -7.6118,0.69713 -12.6897,0.69713 -6.6601,0 -12.6232,-0.79843 -17.8957,-2.46349 -5.2726,-1.66502 -10.0151,-4.24757 -14.2702,-7.76263 -4.255,-3.60748 -8.105,-8.20867 -11.5276,-13.75881 -3.515,-5.54993 -6.8486,-12.21728 -9.9937,-19.98743 l 8.4598,-3.1608 z"
+ id="path3147" />
+ <path
+ sodipodi:nodetypes="ccccccccsscccccccccccc"
+ id="path3149"
+ d="m 1313.7627,46.601235 c 2.6826,4.90262 5.4059,8.89399 8.1809,12.03894 2.6825,3.05259 5.6407,5.49427 8.8781,7.34422 3.1451,1.75757 6.7135,3.02514 10.691,3.76507 3.8851,0.64768 8.3459,0.97628 13.4334,0.97609 3.7529,0 7.1256,-0.19221 10.0867,-0.55772 0.012,0 0.035,0 0.047,0 0.3754,-0.027 1.1508,-0.15335 1.9523,-0.27892 0.8442,-0.13218 1.7071,-0.25955 3.0678,-0.5113 24.9421,-4.61489 33.2141,12.70029 35.0013,17.47744 0.2797,0.74767 0.4183,1.20845 0.4183,1.20845 l 30.3066,84.505095 15.6181,31.60819 h -34.1646 c -15.2535,-33.9626 -29.9183,-104.875505 -45.5993,-111.139535 -3.3988,0.47537 -7.6118,0.69713 -12.6897,0.69713 -6.6601,0 -12.6232,-0.79843 -17.8957,-2.46349 -5.2726,-1.66502 -10.0151,-4.24758 -14.2701,-7.76263 -4.2551,-3.60748 -8.1051,-8.20867 -11.5277,-13.7588 -3.515,-5.54995 -6.8486,-12.21728 -9.9937,-19.98743 l 8.4598,-3.1608 z"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3932);fill-opacity:1;stroke:none"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3151"
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3929);fill-opacity:1;stroke:none"
+ d="m 1435.8193,172.5566 -18.52,31.62143 h 37.1209"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="font-style:normal;font-weight:bold;font-size:144px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3926);fill-opacity:1;stroke:none"
+ d="m 1313.7667,46.605905 -8.4616,3.1542 c 0.9829,2.42817 1.9835,4.75137 3.003,6.96371 0.2039,0.44246 0.4068,0.87683 0.6121,1.31064 8e-4,0.002 -8e-4,0.006 0,0.007 0.2044,0.4318 0.4135,0.85862 0.6193,1.28184 0.069,0.14106 0.1401,0.27758 0.2089,0.41768 0.3452,0.70349 0.6877,1.40177 1.037,2.08119 0,0.003 0.01,0.004 0.01,0.007 0.2082,0.40484 0.4169,0.80634 0.6265,1.20263 0.8454,1.59852 1.7025,3.12828 2.5709,4.58726 0.2168,0.36432 0.4298,0.7174 0.6481,1.073 0.085,0.13784 0.1672,0.27395 0.252,0.41048 0.1351,0.21746 0.2749,0.43399 0.4105,0.64812 0.2139,0.34687 0.4237,0.69034 0.6409,1.0298 0.3462,0.54084 0.7041,1.06956 1.0586,1.59149 0.09,0.13178 0.1764,0.26551 0.2665,0.39607 0.225,0.32622 0.4486,0.64634 0.6769,0.96499 0.4544,0.6341 0.9152,1.25393 1.3827,1.85795 0.2337,0.302 0.4687,0.59851 0.7057,0.89296 0.474,0.58892 0.9532,1.16257 1.4403,1.72113 0.3692,0.42348 0.7467,0.83988 1.1234,1.24584 0.119,0.12822 0.2403,0.2552 0.36,0.38166 0.5012,0.52939 1.0055,1.04257 1.5195,1.54109 0.2564,0.24866 0.511,0.49359 0.7706,0.73454 0.2608,0.24217 0.5209,0.47857 0.7849,0.71294 0.2628,0.23322 0.5262,0.45866 0.7922,0.68413 0.7978,0.65907 1.6161,1.28595 2.4484,1.87955 2.2197,1.58292 4.563,2.93443 7.0357,4.05436 0.3091,0.14 0.6159,0.27768 0.929,0.41048 0.6283,0.26652 1.2637,0.51855 1.9084,0.75614 0.3213,0.11842 0.6396,0.22723 0.965,0.33846 0.3254,0.11123 0.657,0.22 0.9866,0.32406 0.3295,0.10407 0.6588,0.20515 0.9937,0.30246 0.6699,0.19463 1.3538,0.37949 2.0452,0.5473 0.3458,0.0839 0.6931,0.16039 1.0442,0.23765 0.3512,0.0773 0.7021,0.15261 1.0586,0.22324 0.3588,0.0711 0.7159,0.13718 1.0802,0.20164 0.7239,0.12808 1.458,0.24373 2.2036,0.34566 1.1184,0.15292 2.2607,0.27964 3.4279,0.37447 0.7781,0.0633 1.5694,0.1135 2.3692,0.15123 0.7999,0.0377 1.6125,0.0595 2.4341,0.072 0.4108,0.006 0.8224,0.007 1.2386,0.007 0.6348,0 1.2574,-2.1e-4 1.8652,-0.007 1.2156,-0.014 2.3763,-0.0437 3.4854,-0.0864 0.5521,-0.0213 1.0943,-0.0435 1.6203,-0.072 0.5282,-0.0287 1.0462,-0.0646 1.5483,-0.10083 1.5062,-0.10864 2.895,-0.24661 4.1696,-0.42487 0.1069,0.0427 0.2173,0.087 0.3241,0.13682 0.015,0.006 0.028,0.0148 0.043,0.0216 0.092,0.0439 0.1815,0.088 0.2736,0.13682 0.6131,0.31376 1.2262,0.72249 1.8364,1.22423 -1.3421,-1.80851 -15.6604,-20.54497 -36.6837,-25.5504 -1.8226,-0.43396 -3.1673,-1.06505 -4.2128,-1.80034 -0.01,-0.003 -0.014,-0.0108 -0.022,-0.0144 -0.8287,-0.37374 -1.6352,-0.77569 -2.4125,-1.20983 0,-8e-4 -0.01,7.9e-4 -0.01,0 -0.2005,-0.11459 -0.3993,-0.23372 -0.5977,-0.35287 0,-8e-4 -0.01,8e-4 -0.01,0 -0.2001,-0.12025 -0.3925,-0.24238 -0.5905,-0.36726 -0.3976,-0.25081 -0.7922,-0.50819 -1.181,-0.77775 -0.1936,-0.13419 -0.3847,-0.27162 -0.5761,-0.41048 -0.3856,-0.27966 -0.7611,-0.56553 -1.1378,-0.86416 -0.1871,-0.14821 -0.3696,-0.29358 -0.5545,-0.44649 -0.1864,-0.15403 -0.3704,-0.30928 -0.5545,-0.46808 -0.1828,-0.15761 -0.3595,-0.32017 -0.5401,-0.4825 -0.9031,-0.81159 -1.7795,-1.67679 -2.6285,-2.60688 -0.1699,-0.18602 -0.3437,-0.37813 -0.5113,-0.56891 -0.6171,-0.6993 -1.2315,-1.4415 -1.8436,-2.22522 -0.076,-0.0976 -0.1471,-0.19638 -0.2232,-0.29525 -0.1719,-0.22327 -0.347,-0.44692 -0.5185,-0.67693 -0.8574,-1.15011 -1.7082,-2.38737 -2.5565,-3.70871 -0.3393,-0.52854 -0.6774,-1.07112 -1.0154,-1.62751 -0.169,-0.27819 -0.3354,-0.55736 -0.5041,-0.84255 -0.5043,-0.85289 -1.0109,-1.74117 -1.5123,-2.6573 z"
+ id="path3154"
+ inkscape:connector-curvature="0" />
+ <path
+ fill="url(#e)"
+ fill-rule="evenodd"
+ stroke="url(#f)"
+ stroke-linejoin="bevel"
+ d="m 1459.2214,80.457332 c -0.4248,-4.92499 -0.6505,0.25223 1.3275,0.6903 4.4236,1.12432 9.0006,1.34881 13.5404,1.00889 1.3858,-0.10376 7.3373,-2.41388 7.4339,-1.80539 -0.8088,1.51264 -1.3281,8.95902 -0.9026,12.74392 -0.048,3.67364 4.2104,13.185678 4.7258,16.301598 -6.2214,-3.7242 -10.8332,-4.65144 -16.8326,-2.86738 -1.4668,0.43619 -4.9364,0.65078 -5.4161,-1.22129 -0.3319,-0.9558 -0.1654,-1.68547 -0.2851,-2.81429 -0.3428,-3.234708 0.199,1.38645 -0.5645,-1.64609 -1.3637,-5.415678 -2.6019,-15.465268 -3.0267,-20.390268 z"
+ id="path578"
+ style="fill:url(#e);stroke:url(#f);stroke-width:0.184429" />
+ <path
+ fill="url(#g)"
+ fill-rule="evenodd"
+ stroke="url(#h)"
+ stroke-linejoin="bevel"
+ d="m 1441.4765,78.008052 c 3.1878,0.59363 8.5164,1.0775 10.1753,0.48812 1.6589,-0.58939 3.3734,-1.7382 5.3317,-2.32793 2.0146,-0.60667 2.8658,0.17705 3.154,2.14019 0.7112,6.72884 2.5524,18.71475 2.7033,24.405628 -1.2763,-2.7021 -5.1047,-2.24183 -11.6771,3.90491 -0.01,-2.29749 0.2598,-9.695108 -2.3655,-14.718478 -2.6252,-5.02337 -3.1559,-7.78347 -4.4681,-9.57452 -1.3122,-1.79105 -2.7366,-3.28337 -2.8536,-4.31792 z"
+ id="path580"
+ style="fill:url(#g);stroke:url(#h);stroke-width:0.184429" />
+ </g>
+</svg>
diff --git a/presentation/Nix_logo.svg b/presentation/Nix_logo.svg
new file mode 100644
index 0000000..40dee5f
--- /dev/null
+++ b/presentation/Nix_logo.svg
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="154.59mm"
+ height="136.685mm"
+ viewBox="0 0 547.76018 484.31691"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+ sodipodi:docname="nixos-logo-notext.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5562">
+ <stop
+ style="stop-color:#699ad7;stop-opacity:1"
+ offset="0"
+ id="stop5564" />
+ <stop
+ id="stop5566"
+ offset="0.24345198"
+ style="stop-color:#7eb1dd;stop-opacity:1" />
+ <stop
+ style="stop-color:#7ebae4;stop-opacity:1"
+ offset="1"
+ id="stop5568" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5053">
+ <stop
+ style="stop-color:#415e9a;stop-opacity:1"
+ offset="0"
+ id="stop5055" />
+ <stop
+ id="stop5057"
+ offset="0.23168644"
+ style="stop-color:#4a6baf;stop-opacity:1" />
+ <stop
+ style="stop-color:#5277c3;stop-opacity:1"
+ offset="1"
+ id="stop5059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5960"
+ inkscape:collect="always">
+ <stop
+ id="stop5962"
+ offset="0"
+ style="stop-color:#637ddf;stop-opacity:1" />
+ <stop
+ style="stop-color:#649afa;stop-opacity:1"
+ offset="0.23168644"
+ id="stop5964" />
+ <stop
+ id="stop5966"
+ offset="1"
+ style="stop-color:#719efa;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="515.97058"
+ x2="282.26105"
+ y1="338.62445"
+ x1="213.95642"
+ gradientTransform="translate(983.36076,601.38885)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5855"
+ xlink:href="#linearGradient5960"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5562"
+ id="linearGradient5384"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(70.650339,-1055.1511)"
+ x1="200.59668"
+ y1="351.41116"
+ x2="290.08701"
+ y2="506.18814" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5053"
+ id="linearGradient5386"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(864.69589,-1491.3405)"
+ x1="-584.19934"
+ y1="782.33563"
+ x2="-496.29703"
+ y2="937.71399" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.28677972"
+ inkscape:cx="113.3274"
+ inkscape:cy="359.16069"
+ inkscape:document-units="px"
+ inkscape:current-layer="g5329"
+ showgrid="false"
+ inkscape:window-width="2048"
+ inkscape:window-height="1080"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:showpageshadow="0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#505050" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="bg"
+ style="display:none">
+ <rect
+ transform="translate(-132.5822,958.04022)"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect5389"
+ width="1543.4283"
+ height="483.7439"
+ x="132.5822"
+ y="-957.77832" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="guide"
+ style="display:none;opacity:0.516"
+ transform="translate(-132.5822,958.04022)">
+ <rect
+ y="-957.77832"
+ x="132.5822"
+ height="483.7439"
+ width="1543.4283"
+ id="rect5350"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4d4d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9b9b9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect5346"
+ width="1496.443"
+ height="435.68069"
+ x="155.77646"
+ y="-933.38721"
+ inkscape:export-xdpi="17.971878"
+ inkscape:export-ydpi="17.971878" />
+ <rect
+ y="-851.65918"
+ x="159.02695"
+ height="272.58423"
+ width="1492.5731"
+ id="rect5348"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#848484;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="logo-guide"
+ style="display:none"
+ transform="translate(-132.5822,958.04022)">
+ <rect
+ y="-958.02759"
+ x="132.65129"
+ height="484.30399"
+ width="550.41602"
+ id="rect5379"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nix-wiki.png"
+ inkscape:export-xdpi="22.07"
+ inkscape:export-ydpi="22.07" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect5372"
+ width="501.94415"
+ height="434.30405"
+ x="156.12303"
+ y="-933.02759"
+ inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nixos-logo-only-hires-print.png"
+ inkscape:export-xdpi="212.2"
+ inkscape:export-ydpi="212.2" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect5381"
+ width="24.939611"
+ height="24.939611"
+ x="658.02826"
+ y="-958.04022" />
+ </g>
+ <g
+ inkscape:label="print-logo"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ sodipodi:insensitive="true"
+ transform="translate(-132.5822,958.04022)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
+ id="path4861"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
+ id="use4863"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
+ id="use4865"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
+ id="use4867"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="path4873"
+ d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="use4875"
+ d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="use4877"
+ d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <g
+ id="layer2"
+ inkscape:label="guides"
+ style="display:none"
+ transform="translate(72.039038,-1799.4476)">
+ <path
+ d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="1.0471976"
+ sodipodi:r2="217.25499"
+ sodipodi:r1="250.86446"
+ sodipodi:cy="377.47382"
+ sodipodi:cx="335.17407"
+ sodipodi:sides="6"
+ id="path6032"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ sodipodi:type="star" />
+ <path
+ transform="translate(0,-308.26772)"
+ sodipodi:type="star"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path5875"
+ sodipodi:sides="6"
+ sodipodi:cx="335.17407"
+ sodipodi:cy="685.74158"
+ sodipodi:r1="100.83495"
+ sodipodi:r2="87.32563"
+ sodipodi:arg1="1.0471976"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 385.59154,773.06721 -100.83495,0 -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" />
+ <path
+ transform="translate(0,-308.26772)"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path5851"
+ d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
+ style="fill:url(#linearGradient5855);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c53a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect5884"
+ width="48.834862"
+ height="226.22897"
+ x="-34.74221"
+ y="446.17056"
+ transform="rotate(-30)" />
+ <path
+ transform="translate(0,-308.26772)"
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path3428"
+ sodipodi:sides="6"
+ sodipodi:cx="223.93674"
+ sodipodi:cy="878.63831"
+ sodipodi:r1="28.048939"
+ sodipodi:r2="24.291094"
+ sodipodi:arg1="0"
+ sodipodi:arg2="0.52359878"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#rect5884"
+ id="use4252"
+ transform="rotate(60,268.29786,489.4515)"
+ width="100%"
+ height="100%" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.650794;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4254"
+ width="5.3947482"
+ height="115.12564"
+ x="545.71014"
+ y="467.07007"
+ transform="rotate(30,575.23539,-154.13386)" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="gradient-logo"
+ style="display:inline;opacity:1"
+ sodipodi:insensitive="true"
+ transform="translate(-132.5822,958.04022)">
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="path3336-6"
+ d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
+ style="opacity:1;fill:url(#linearGradient5384);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <use
+ height="100%"
+ width="100%"
+ transform="rotate(60,407.11155,-715.78724)"
+ id="use3439-6"
+ inkscape:transform-center-y="151.59082"
+ inkscape:transform-center-x="124.43045"
+ xlink:href="#path3336-6"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="rotate(-60,407.31177,-715.70016)"
+ id="use3445-0"
+ inkscape:transform-center-y="75.573958"
+ inkscape:transform-center-x="-168.20651"
+ xlink:href="#path3336-6"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="rotate(180,407.41868,-715.7565)"
+ id="use3449-5"
+ inkscape:transform-center-y="-139.94592"
+ inkscape:transform-center-x="59.669705"
+ xlink:href="#path3336-6"
+ y="0"
+ x="0" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5386);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
+ id="path4260-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <use
+ height="100%"
+ width="100%"
+ transform="rotate(120,407.33916,-716.08356)"
+ id="use4354-5"
+ xlink:href="#path4260-0"
+ y="0"
+ x="0"
+ style="display:inline" />
+ <use
+ height="100%"
+ width="100%"
+ transform="rotate(-120,407.28823,-715.86995)"
+ id="use4362-2"
+ xlink:href="#path4260-0"
+ y="0"
+ x="0"
+ style="display:inline" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="text-vegur"
+ id="g5329"
+ inkscape:groupmode="layer"
+ transform="translate(-132.5822,958.04022)" />
+</svg>
diff --git a/presentation/Red_flag_waving.svg b/presentation/Red_flag_waving.svg
new file mode 100644
index 0000000..2fe3305
--- /dev/null
+++ b/presentation/Red_flag_waving.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249" height="268" version="1.0">
+ <defs>
+ <linearGradient id="b">
+ <stop offset="0" stop-color="#c82a00"/>
+ <stop offset=".52" stop-color="#5f1802"/>
+ <stop offset=".67" stop-color="#5f1802"/>
+ <stop offset="1" stop-color="#bf3415"/>
+ </linearGradient>
+ <linearGradient id="c">
+ <stop offset="0" stop-color="#783000"/>
+ <stop offset=".75"/>
+ <stop offset="1" stop-color="#642800"/>
+ </linearGradient>
+ <linearGradient id="a">
+ <stop offset="0" stop-color="#b92c10"/>
+ <stop offset="1" stop-color="#621805"/>
+ </linearGradient>
+ <linearGradient xlink:href="#a" id="g" x1="48.975147" x2="117.85719" y1="87.787521" y2="77.99485" gradientUnits="userSpaceOnUse"/>
+ <linearGradient xlink:href="#b" id="e" x1="116.57422" x2="221.6933" y1="98.310341" y2="94.320732" gradientUnits="userSpaceOnUse"/>
+ <linearGradient xlink:href="#c" id="d" x1="-3.7498047" x2="4.318048" y1="144.07323" y2="144.07323" gradientUnits="userSpaceOnUse"/>
+ <radialGradient xlink:href="#a" id="f" cx="175.42162" cy="98.310333" r="72.10807" fx="175.42162" fy="98.310333" gradientTransform="matrix(1 0 0 1.17434 0 -17.13943)" gradientUnits="userSpaceOnUse"/>
+ <radialGradient xlink:href="#a" id="h" cx="67.081421" cy="84.330505" r="58.420074" fx="67.081421" fy="84.330505" gradientTransform="matrix(1 0 0 1.43098 0 -36.345183)" gradientUnits="userSpaceOnUse"/>
+ </defs>
+ <rect width="8.067853" height="270.80246" x="-3.7498047" y="8.6719856" fill="url(#d)" color="#000" overflow="visible" rx="4.0339265" ry="4.0339265" transform="matrix(.893 -.45004 .32183 .9468 0 0)"/>
+ <path fill="url(#e)" fill-rule="evenodd" stroke="url(#f)" stroke-linejoin="bevel" d="M105.3763 25.576935c-2.30331-26.7039653-3.52694 1.367589 7.19783 3.742874 23.98526 6.09621 48.80235 7.313438 73.41791 5.470354 7.51418-.562622 39.78374-13.08841 40.30788-9.789054-4.38571 8.201727-7.20126 48.576969-4.89453 69.09921-.25876 19.918951 22.8294 71.494501 25.62429 88.389411-33.73353-20.19311-58.73921-25.22073-91.26854-15.54733-7.9533 2.36511-26.76618 3.52866-29.36717-6.622-1.79946-5.18244-.89678-9.13881-1.54548-15.25941-1.8589-17.53904 1.07903 7.51749-3.06113-8.92532-7.39374-29.36454-14.10775-83.85477-16.41106-110.558735z"/>
+ <path fill="url(#g)" fill-rule="evenodd" stroke="url(#h)" stroke-linejoin="bevel" d="M9.1613476 12.296609C26.445948 15.515347 55.33847 18.138952 64.333019 14.943221 73.327567 11.74749 82.624071 5.5184845 93.24216 2.3209195c10.92332-3.28948447 15.53899.9599966 17.10118 11.6043735 3.85668 36.484659 13.83963 101.473877 14.65816 132.330577-6.92064-14.65115-27.6787-12.15554-63.315093 21.17289-.027285-12.45729 1.408498-52.56812-12.825886-79.805515-14.234384-27.237396-17.111832-42.202997-24.226675-51.914303C17.519003 25.997636 9.7958865 17.90609 9.1613476 12.296609z"/>
+</svg> \ No newline at end of file
diff --git a/presentation/ctf-guix-store-onlynotes.pdf b/presentation/ctf-guix-store-onlynotes.pdf
new file mode 100644
index 0000000..21bd9ff
--- /dev/null
+++ b/presentation/ctf-guix-store-onlynotes.pdf
Binary files differ
diff --git a/presentation/ctf-guix-store-withnotes.pdf b/presentation/ctf-guix-store-withnotes.pdf
new file mode 100644
index 0000000..7364b15
--- /dev/null
+++ b/presentation/ctf-guix-store-withnotes.pdf
Binary files differ
diff --git a/presentation/ctf-guix-store.pdf b/presentation/ctf-guix-store.pdf
new file mode 100644
index 0000000..2259a4f
--- /dev/null
+++ b/presentation/ctf-guix-store.pdf
Binary files differ
diff --git a/presentation/ctf-guix-store.tex b/presentation/ctf-guix-store.tex
new file mode 100644
index 0000000..65ecebd
--- /dev/null
+++ b/presentation/ctf-guix-store.tex
@@ -0,0 +1,295 @@
+\documentclass[notes]{beamer}
+\usetheme{Rochester}
+\usecolortheme{seagull}
+\usepackage{svg}
+\usepackage[export]{adjustbox}
+
+% \setbeameroption{show notes}
+
+\title{CTF — GNU Guix storefile mistake}
+
+\begin{document}
+
+\frame{
+ \titlepage
+ \begin{figure}[h]
+ \includesvg[height=0.25\textheight]{Guix_logo_with_flag.svg}
+ \end{figure}
+}
+
+
+\begin{frame}{Functional package management in a pill}
+ \begin{itemize}
+ \item Dolstra, Eelco (2006). ``The Purely Functional Software Deployment
+ Model'' (Ph.D.). Utrecht University
+ \item pioneered by Nix \includesvg[height=\baselineskip]{Nix_logo.svg}
+ \item also employed by GNU Guix
+ \includesvg[height=\baselineskip]{Guix_logo.svg}
+ \item no Filesystem Hierarchy Standard (no /usr/bin, /usr/share, etc.)
+ \item packages live in a \textbf{store} directory, e.g.
+ \begin{itemize}
+ \item /gnu/store/y0d8ab1mi6lh0a3vpx5lyd4ksq9wbn4x-orc-0.4.32
+ \item /gnu/store/9pypr3c3y379shbwm9ilb4pik9mkfd83-mesa-22.2.4
+ \item /gnu/store/rv91v4s30kcjh7xq6k4l2njklk79frxk-freeglut-3.4.0
+ \item /gnu/store/30zfbjasrsk2wg8nhsd1xgi3q3n9796z-less-608
+ \end{itemize}
+ \item a daemon \includesvg[height=\baselineskip]{Awesome_Demon.svg} builds
+ packages from definitions and puts them in the store
+ \end{itemize}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item we're using GNU Guix here (no, not the trademarked GUIX…)
+ \item store filename determine by hash of package inputs + definition
+ \item multiple versions of a package can coexist
+ \item per-project development environments
+ \item easy rollbacks
+ \item emphasis on reproducible builds
+ \end{itemize}
+}
+
+\begin{frame}[fragile]{Functional package management in a pill (sample package)}
+ \small
+\begin{verbatim}
+$ cd /gnu/store/30zfbjasrsk2wg8nhsd1xgi3q3n9796z-less-608/
+$ find . -type f
+./bin/less
+./bin/lessecho
+./bin/lesskey
+./etc/ld.so.cache
+./share/doc/less-608/LICENSE
+./share/doc/less-608/COPYING
+./share/man/man1/lessecho.1.gz
+./share/man/man1/lesskey.1.gz
+./share/man/man1/less.1.gz
+$ ls -lh bin/less
+-r-xr-xr-x 2 root root 192K Jan 1 1970 bin/less
+\end{verbatim}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item store is read-only (only Nix/Guix daemon can write)
+ \item store files are root-owned and world-readable => secrets must be managed
+ differently
+ \item dates set to Epoch (but ls -lch shows real creation time)
+ \item the same package won't be built twice, even if requested by multiple
+ users
+ \item a package will built again (or grafted) when one of its dependencies
+ gets updated
+ \item a package not in use can be garbage-collected
+ \item no support for quotas yet as of 2024
+ \end{itemize}
+}
+
+\begin{frame}[fragile]{Functional package management in a pill (declarative OS)}
+ \begin{itemize}
+ \item \textbf{packages} are defined declaratively
+ \pause
+ \item \textbf{services} are defined declaratively as well
+ \pause
+ \item service \textbf{configurations} are defined declaratively \textit{as
+ well}… {\small
+\begin{verbatim}
+(service httpd-service-type
+ (httpd-configuration
+ (config
+ (httpd-config-file
+ (server-name "www.example.com")
+ (document-root "/var/public_html")))))
+\end{verbatim}
+ }
+ \begin{itemize}
+ \item …and result in store files like
+ /gnu/store/54ywa5x1b75simbvzhxqkfxsjk040ail-httpd.conf
+ \end{itemize}
+ \item Yay, we can replace Ansible! But what about secrets?
+ \begin{itemize}
+ \item option 1: keep private keys and passwords outside the store
+ \item option 2: put them encrypted in the store
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item GNU Guix and Nix have their DSLs (the first one is actually Scheme Lisp
+ + some APIs)
+ \item on Guix/Nix server packages and configurations are immutable (we can
+ switch to different ones but not alter the existing ones) — convenient
+ \item an application may require database credentials, some API token, a
+ private key for TLS certificate, etc.
+ \item encrypted secrets in store — one master key kept outside the store
+ \end{itemize}
+}
+
+\begin{frame}{Sensitive information exposure scenario}
+ challenge — password hunt in /gnu/store\\~\\
+
+ \textit{``You're an employee of a secret government agency. Analysis of
+ wiretap recordings have lead the agency to believe that an individual known
+ as Abdul Al-Inh-Ohn-Ih has come into possession of highly classified
+ government documents. If this turn out true and Abdul blows the whistle on
+ information from those materials, years of intelligence efforts shall be
+ ruined.\\~\\}
+
+ \textit{Abdul has been using the Matrix protocol for some of his
+ communication. Your current task is to get access to his Matrix account.
+ Start your investigation by taking a look at his blog.''}
+\end{frame}
+
+\note{
+ A user of certain shared GNU Guix system has put a secret (a password) in
+ /gnu/store by mistake. The CTF competitioneer has to SSH into another account
+ on said system and find the password.
+
+ \begin{itemize}
+ \item we have some lore
+ \item real-world references might be intended or not…
+ \item no direct info about the exposures (one needs to figure this out)
+ \end{itemize}
+}
+
+\begin{frame}{Investigation (Abdul's blog)}
+ \includegraphics[
+ height=\dimexpr\textheight-0.5cm\relax,
+ center
+ ]{screenshots/abdul-blog-index.png}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item language — itself a hint Abdul is likely to make mistakes
+ \item only the few relevant blog entries (no misleading of competitioneers)
+ \item mechanics of Guix relevant to the challenge are touched in the posts
+ \item some extra effort required — obtaining a Gemini browser
+ \end{itemize}
+}
+
+\begin{frame}[fragile]{Investigation (peeking through Gemini)}
+ \includegraphics[
+ height=\dimexpr\textheight-0.5cm\relax,
+ center
+ ]{screenshots/gemini-capsule.png}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item most relevant parts of blog only accessible through Gemini (a lightweight
+ alternative to HTTP)
+ \item a Gemini browser ``Lagrage'' recommended in HTTP part of Abdul's blog
+ \end{itemize}
+}
+
+\begin{frame}[fragile]{Investigation (Spotting mistakes)}
+ configuration which hits a mistake is included in Abdul's blog
+ \footnotesize
+\begin{verbatim}
+;;; ...
+(list (shepherd-service
+ (provision '(mattermost))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor
+ '(#$(file-append matterbridge "/bin/matterbridge")
+ "--conf"
+ #$(local-file "config.toml"))
+ #:log-file (string-append %user-log-dir
+ "/matterbridge.log")))
+ (stop #~(make-kill-destructor))
+ (documentation "Start local matterbridge.")))))
+;;; ...
+\end{verbatim}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item the config suggests Matrix password is in config.toml in /gnu/store
+ \end{itemize}
+}
+
+\begin{frame}{Investigation (Account creation)}
+ \includegraphics[
+ height=\dimexpr\textheight-0.5cm\relax,
+ center
+ ]{screenshots/account-creation.png}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item both Abdul's blog and the server's main website urge one to make an
+ account and log in to the tilde server with SSH
+ \item emails entered not actually used
+ \end{itemize}
+}
+
+\begin{frame}{Hint 1}
+ \includegraphics[
+ height=\dimexpr\textheight-0.5cm\relax,
+ center
+ ]{screenshots/hint1.png}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item page with the hint accessible through Gemini only
+ \end{itemize}
+}
+
+\begin{frame}{Hint 2}
+ \includegraphics[
+ height=\dimexpr\textheight-0.5cm\relax,
+ center
+ ]{screenshots/hint2.png}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item link to GNU Guix HTML documentation
+ \item suggestion that it has sth to do with the local-file macro (used in
+ Abdul's code)
+ \end{itemize}
+}
+
+\begin{frame}[fragile]{Finding the flag}
+\begin{verbatim}
+~$ (cd /gnu/store && ls -cht *config.toml*)
+qmdh299prllp4fygw893w00lv9ypi5z2-config.toml
+~$
+\end{verbatim}
+
+rather expected contents of qmdh299prllp4fygw893w00lv9ypi5z2-config.toml
+
+\small
+\begin{verbatim}
+# ...
+[matrix.noevil-pl]
+Server="https://matrix.noevil.pl"
+Login="abdul"
+Password="fla\u0067{full_source-bootstrap}"
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+NoHomeServerSuffix=false
+# ...
+\end{verbatim}
+\end{frame}
+
+\note{
+ \begin{itemize}
+ \item ``g'' in flag replaced with unicode escape to make bypassing with
+ recursive grepping harder
+ \end{itemize}
+}
+
+\begin{frame}{Credits}
+ \begin{itemize}
+ \item GNU Guix logo — \copy 2015 Luis Felipe López Acevedo (CC BY-SA 4.0
+ International)
+ \item red flag — by Wikipedia user Wereon, uploaded 2007 (released into
+ public domain)
+ \item Nix logo — \copy 2016 Tim Cuthbertson (CC BY-SA 4.0 International)
+ \item Awesome Demon — by Openclipart user qubodup, uploaded 2014 (released
+ into public domain with CC Zero v1.0)
+ \end{itemize}
+\end{frame}
+
+\end{document}
diff --git a/presentation/screenshots/abdul-blog-index.png b/presentation/screenshots/abdul-blog-index.png
new file mode 100644
index 0000000..c94c5ac
--- /dev/null
+++ b/presentation/screenshots/abdul-blog-index.png
Binary files differ
diff --git a/presentation/screenshots/account-creation.png b/presentation/screenshots/account-creation.png
new file mode 100644
index 0000000..de10a58
--- /dev/null
+++ b/presentation/screenshots/account-creation.png
Binary files differ
diff --git a/presentation/screenshots/gemini-capsule.png b/presentation/screenshots/gemini-capsule.png
new file mode 100644
index 0000000..0821d53
--- /dev/null
+++ b/presentation/screenshots/gemini-capsule.png
Binary files differ
diff --git a/presentation/screenshots/hint1.png b/presentation/screenshots/hint1.png
new file mode 100644
index 0000000..a143e43
--- /dev/null
+++ b/presentation/screenshots/hint1.png
Binary files differ
diff --git a/presentation/screenshots/hint2.png b/presentation/screenshots/hint2.png
new file mode 100644
index 0000000..0a63f3e
--- /dev/null
+++ b/presentation/screenshots/hint2.png
Binary files differ
diff --git a/vm-deploy.scm b/vm-deploy.scm
index 08dce6c..ec169fb 100644
--- a/vm-deploy.scm
+++ b/vm-deploy.scm
@@ -5,8 +5,8 @@
(operating-system %os)
(environment managed-host-environment-type)
(configuration (machine-ssh-configuration
- (host-name "localhost")
+ (host-name "ctftilde.koszko.org")
(system "x86_64-linux")
(port 22)
- (host-key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN0aj062v8Mnxidud6DAyEN8XI8eCx+0fe6ad7QG1fXj")
+ (host-key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII6BoIa4pfY/WCGqNTxRdobteq3J5PYELz/slkjF7Zvd")
(allow-downgrades? #t)))))
diff --git a/vm.scm b/vm.scm
index 2c20f3f..68cff3e 100644
--- a/vm.scm
+++ b/vm.scm
@@ -19,11 +19,12 @@
((gnu packages tls) #:select (openssl))
((gnu packages web) #:select (httpd))
((gnu services) #:select
- (activation-service-type modify-services service-extension
+ (activation-service-type modify-services service service-extension
service-type simple-service))
((gnu services base) #:select
(guix-service-type guix-extension %base-services))
- ((gnu services mcron) #:prefix mc:)
+ ((gnu services desktop) #:select (elogind-service-type))
+ ((gnu services mcron) #:select (cron-daemon-service-type))
((gnu services networking) #:select (dhcp-client-service-type))
((gnu services shepherd) #:select
(shepherd-root-service-type shepherd-service))
@@ -131,9 +132,13 @@ Cantius, part of a CTF competition VM.")
'(#o750 #o640 #o640)))))
(prepend %services
+ (service elogind-service-type))
+
+(prepend %services
(simple-service 'gemini-main-server-directory activation-service-type
#~(begin
(false-if-exception (delete-file "/srv/gemini"))
+ (mkdir-p "/srv")
(symlink #$(local-file (string-append %here "/gemini")
#:recursive? #t)
"/srv/gemini"))))
@@ -176,8 +181,7 @@ Cantius, part of a CTF competition VM.")
"proxy"
"proxy_http"
"rewrite"
- "ssl"
- "userdir"))
+ "ssl"))
web:%default-httpd-modules))
(extra-config
(list "\
@@ -197,7 +201,9 @@ Cantius, part of a CTF competition VM.")
ServerAlias www.ctftilde.koszko.org
ServerAdmin webmaster@ctftilde.koszko.org
- UserDir /srv/http-users
+ RewriteEngine On
+
+ RewriteRule \"^/~([^/]+)(.*)\" \"/srv/http-users/$1$2\"
ProxyPassMatch ^/(([^~].*)?)$ http://127.0.0.1:8080/$1
ProxyPassReverse / http://127.0.0.1:8080/
@@ -212,9 +218,7 @@ Cantius, part of a CTF competition VM.")
'(80 443))))
(prepend %services
- (service mc:mcron-service-type
- (mc:mcron-configuration
- (/var-tabs? #t))))
+ (service cron-daemon-service-type))
(prepend %services
(service openssh-service-type