diff --git a/config.toml b/config.toml index b89e674..388e05b 100644 --- a/config.toml +++ b/config.toml @@ -1,7 +1,63 @@ -baseURL = "https://blog.jaseg.de/" +baseURL = "http://jaseg.de/" languageCode = "en-us" -title = "blog.jaseg.de" -theme = "blog.jaseg.de" +title = "Home" +copyright = "Jan Sebastian Götte" +theme = "conspiracy" + +[taxonomies] +category = "Categories" +blog = "Posts" + +[[menu.main]] +name = "Home" +url = "/" +weight = 1 + +[[menu.main]] +name = "Blog" +url = "/blog/" +weight = 2 + +[[menu.main]] +name = "Projects" +url = "/projects/" +weight = 3 + +[[menu.main]] +name = "About" +url = "/about/" +weight = 4 + +[[params.profile_links]] +name = "cgit" +url = "https://git.jaseg.de/" +weight = 1 + +[[params.profile_links]] +name = "Github" +url = "https://github.com/jaseg" +weight = 2 + +[[params.profile_links]] +name = "Gitlab" +url = "https://gitlab.com/neinseg" +weight = 3 + +[[params.profile_links]] +name = "Mastodon" +url = "https://chaos.social/jaseg" +weight = 4 + +[[params.footer_links]] +name = "About" +url = "/about/" +weight = 1 + +[[params.footer_links]] +name = "Imprint" +url = "/imprint/" +weight = 2 + [security.exec] - allow = ['^rst2html$', '^go$', '^npx$', '^postcss$', '^pandoc$'] +allow = ["^dart-sass-embedded$", "^go$", "^npx$", "^postcss$", "^rst2html$"] diff --git a/content/_index.rst b/content/_index.rst new file mode 100644 index 0000000..ad39a14 --- /dev/null +++ b/content/_index.rst @@ -0,0 +1,9 @@ +--- +title: jaseg.de +--- + +Hi there, and welcome to my personal website. + +I'm jaseg, and I write about my projects here. You can find long-form articles in the blog, and links to my open-source +projects on the projects page. On the top right of this page, there are links to my git repositories and social media +pages. If you want to learn more about me, head over to the about page. diff --git a/content/blog/_index.rst b/content/blog/_index.rst new file mode 100644 index 0000000..9bff67d --- /dev/null +++ b/content/blog/_index.rst @@ -0,0 +1,3 @@ +--- +title: Blog +--- diff --git a/content/posts/hsm-basics/index.rst b/content/blog/hsm-basics/index.rst similarity index 100% rename from content/posts/hsm-basics/index.rst rename to content/blog/hsm-basics/index.rst diff --git a/content/posts/hsm-basics/mori_semi_hsm_talk_web.pdf b/content/blog/hsm-basics/mori_semi_hsm_talk_web.pdf similarity index 100% rename from content/posts/hsm-basics/mori_semi_hsm_talk_web.pdf rename to content/blog/hsm-basics/mori_semi_hsm_talk_web.pdf diff --git a/content/posts/ihsm-worlds-first-diy-hsm/index.rst b/content/blog/ihsm-worlds-first-diy-hsm/index.rst similarity index 98% rename from content/posts/ihsm-worlds-first-diy-hsm/index.rst rename to content/blog/ihsm-worlds-first-diy-hsm/index.rst index 370a053..0932fc9 100644 --- a/content/posts/ihsm-worlds-first-diy-hsm/index.rst +++ b/content/blog/ihsm-worlds-first-diy-hsm/index.rst @@ -38,4 +38,4 @@ now is an integration of all of these fragments into something cohesive that an could go out and build. We are planning to release this sort of documentation at some point, but right now we are focusing our effort on the next iteration of the design instead. Stay tuned for updates ;) -.. _`normal HSM`: {{}} +.. _`normal HSM`: {{}} diff --git a/content/posts/kicad-mesh-plugin/images/anim.webp b/content/blog/kicad-mesh-plugin/images/anim.webp similarity index 100% rename from content/posts/kicad-mesh-plugin/images/anim.webp rename to content/blog/kicad-mesh-plugin/images/anim.webp diff --git a/content/posts/kicad-mesh-plugin/images/cells-0.svg b/content/blog/kicad-mesh-plugin/images/cells-0.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/cells-0.svg rename to content/blog/kicad-mesh-plugin/images/cells-0.svg diff --git a/content/posts/kicad-mesh-plugin/images/cells-100.svg b/content/blog/kicad-mesh-plugin/images/cells-100.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/cells-100.svg rename to content/blog/kicad-mesh-plugin/images/cells-100.svg diff --git a/content/posts/kicad-mesh-plugin/images/cells-25.svg b/content/blog/kicad-mesh-plugin/images/cells-25.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/cells-25.svg rename to content/blog/kicad-mesh-plugin/images/cells-25.svg diff --git a/content/posts/kicad-mesh-plugin/images/cells-50.svg b/content/blog/kicad-mesh-plugin/images/cells-50.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/cells-50.svg rename to content/blog/kicad-mesh-plugin/images/cells-50.svg diff --git a/content/posts/kicad-mesh-plugin/images/cells-75.svg b/content/blog/kicad-mesh-plugin/images/cells-75.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/cells-75.svg rename to content/blog/kicad-mesh-plugin/images/cells-75.svg diff --git a/content/posts/kicad-mesh-plugin/images/grid-vis-plain.svg b/content/blog/kicad-mesh-plugin/images/grid-vis-plain.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/grid-vis-plain.svg rename to content/blog/kicad-mesh-plugin/images/grid-vis-plain.svg diff --git a/content/posts/kicad-mesh-plugin/images/grid-vis.svg b/content/blog/kicad-mesh-plugin/images/grid-vis.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/grid-vis.svg rename to content/blog/kicad-mesh-plugin/images/grid-vis.svg diff --git a/content/posts/kicad-mesh-plugin/images/kicad-mesh-outline.png b/content/blog/kicad-mesh-plugin/images/kicad-mesh-outline.png similarity index 100% rename from content/posts/kicad-mesh-plugin/images/kicad-mesh-outline.png rename to content/blog/kicad-mesh-plugin/images/kicad-mesh-outline.png diff --git a/content/posts/kicad-mesh-plugin/images/kicad-mesh-result-large.png b/content/blog/kicad-mesh-plugin/images/kicad-mesh-result-large.png similarity index 100% rename from content/posts/kicad-mesh-plugin/images/kicad-mesh-result-large.png rename to content/blog/kicad-mesh-plugin/images/kicad-mesh-result-large.png diff --git a/content/posts/kicad-mesh-plugin/images/kicad-mesh-settings.png b/content/blog/kicad-mesh-plugin/images/kicad-mesh-settings.png similarity index 100% rename from content/posts/kicad-mesh-plugin/images/kicad-mesh-settings.png rename to content/blog/kicad-mesh-plugin/images/kicad-mesh-settings.png diff --git a/content/posts/kicad-mesh-plugin/images/kicad-mesh-settings2.png b/content/blog/kicad-mesh-plugin/images/kicad-mesh-settings2.png similarity index 100% rename from content/posts/kicad-mesh-plugin/images/kicad-mesh-settings2.png rename to content/blog/kicad-mesh-plugin/images/kicad-mesh-settings2.png diff --git a/content/posts/kicad-mesh-plugin/images/maze_tiles.svg b/content/blog/kicad-mesh-plugin/images/maze_tiles.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/maze_tiles.svg rename to content/blog/kicad-mesh-plugin/images/maze_tiles.svg diff --git a/content/posts/kicad-mesh-plugin/images/maze_tiles_plain.svg b/content/blog/kicad-mesh-plugin/images/maze_tiles_plain.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/maze_tiles_plain.svg rename to content/blog/kicad-mesh-plugin/images/maze_tiles_plain.svg diff --git a/content/posts/kicad-mesh-plugin/images/modern_art.svg b/content/blog/kicad-mesh-plugin/images/modern_art.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/modern_art.svg rename to content/blog/kicad-mesh-plugin/images/modern_art.svg diff --git a/content/posts/kicad-mesh-plugin/images/tiles-25-small.svg b/content/blog/kicad-mesh-plugin/images/tiles-25-small.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/tiles-25-small.svg rename to content/blog/kicad-mesh-plugin/images/tiles-25-small.svg diff --git a/content/posts/kicad-mesh-plugin/images/traces-25-small.svg b/content/blog/kicad-mesh-plugin/images/traces-25-small.svg similarity index 100% rename from content/posts/kicad-mesh-plugin/images/traces-25-small.svg rename to content/blog/kicad-mesh-plugin/images/traces-25-small.svg diff --git a/content/posts/kicad-mesh-plugin/index.rst b/content/blog/kicad-mesh-plugin/index.rst similarity index 99% rename from content/posts/kicad-mesh-plugin/index.rst rename to content/blog/kicad-mesh-plugin/index.rst index 85b407c..226f23f 100644 --- a/content/posts/kicad-mesh-plugin/index.rst +++ b/content/blog/kicad-mesh-plugin/index.rst @@ -68,7 +68,7 @@ DIY Meshes Throughout my studies in security research I have always had an interest in HSMs. I have taken apart my fair share of HSMs and at this point, to understand the technology more, I want to experiment with building my own HSM. In last year's -`HSM basics <{{}}>`_ post I have lined out some ideas for a next generation design that +`HSM basics <{{}}>`_ post I have lined out some ideas for a next generation design that deviates from the bread-and-butter apporoach of using a mesh as the primary security feature. Before embarking on practical experiments with these ideas, I want to first take a stab at replicating the current state of the art as best I can. State of the art meshes often use exotic substrates such as 3D plastic parts with traces chemically deposited on diff --git a/content/posts/led-characterization/images/daylight_spectrum_dvd.jpg b/content/blog/led-characterization/images/daylight_spectrum_dvd.jpg similarity index 100% rename from content/posts/led-characterization/images/daylight_spectrum_dvd.jpg rename to content/blog/led-characterization/images/daylight_spectrum_dvd.jpg diff --git a/content/posts/led-characterization/images/driver_ringing_strong.jpg b/content/blog/led-characterization/images/driver_ringing_strong.jpg similarity index 100% rename from content/posts/led-characterization/images/driver_ringing_strong.jpg rename to content/blog/led-characterization/images/driver_ringing_strong.jpg diff --git a/content/posts/led-characterization/images/driver_ringing_weak.jpg b/content/blog/led-characterization/images/driver_ringing_weak.jpg similarity index 100% rename from content/posts/led-characterization/images/driver_ringing_weak.jpg rename to content/blog/led-characterization/images/driver_ringing_weak.jpg diff --git a/content/posts/led-characterization/images/electronics_whole.jpg b/content/blog/led-characterization/images/electronics_whole.jpg similarity index 100% rename from content/posts/led-characterization/images/electronics_whole.jpg rename to content/blog/led-characterization/images/electronics_whole.jpg diff --git a/content/posts/led-characterization/images/hsv_cylinder.png b/content/blog/led-characterization/images/hsv_cylinder.png similarity index 100% rename from content/posts/led-characterization/images/hsv_cylinder.png rename to content/blog/led-characterization/images/hsv_cylinder.png diff --git a/content/posts/led-characterization/images/photodiode_sensitivity.svg b/content/blog/led-characterization/images/photodiode_sensitivity.svg similarity index 100% rename from content/posts/led-characterization/images/photodiode_sensitivity.svg rename to content/blog/led-characterization/images/photodiode_sensitivity.svg diff --git a/content/posts/led-characterization/images/preamp_back.jpg b/content/blog/led-characterization/images/preamp_back.jpg similarity index 100% rename from content/posts/led-characterization/images/preamp_back.jpg rename to content/blog/led-characterization/images/preamp_back.jpg diff --git a/content/posts/led-characterization/images/preamp_front.jpg b/content/blog/led-characterization/images/preamp_front.jpg similarity index 100% rename from content/posts/led-characterization/images/preamp_front.jpg rename to content/blog/led-characterization/images/preamp_front.jpg diff --git a/content/posts/led-characterization/images/preamp_schematic.jpg b/content/blog/led-characterization/images/preamp_schematic.jpg similarity index 100% rename from content/posts/led-characterization/images/preamp_schematic.jpg rename to content/blog/led-characterization/images/preamp_schematic.jpg diff --git a/content/posts/led-characterization/images/processed_plot_cheap_rgb.svg b/content/blog/led-characterization/images/processed_plot_cheap_rgb.svg similarity index 100% rename from content/posts/led-characterization/images/processed_plot_cheap_rgb.svg rename to content/blog/led-characterization/images/processed_plot_cheap_rgb.svg diff --git a/content/posts/led-characterization/images/raw_plot_cheap_rgb.svg b/content/blog/led-characterization/images/raw_plot_cheap_rgb.svg similarity index 100% rename from content/posts/led-characterization/images/raw_plot_cheap_rgb.svg rename to content/blog/led-characterization/images/raw_plot_cheap_rgb.svg diff --git a/content/posts/led-characterization/images/rgb_cube.svg b/content/blog/led-characterization/images/rgb_cube.svg similarity index 100% rename from content/posts/led-characterization/images/rgb_cube.svg rename to content/blog/led-characterization/images/rgb_cube.svg diff --git a/content/posts/led-characterization/images/spectrograph_step1_parts.jpg b/content/blog/led-characterization/images/spectrograph_step1_parts.jpg similarity index 100% rename from content/posts/led-characterization/images/spectrograph_step1_parts.jpg rename to content/blog/led-characterization/images/spectrograph_step1_parts.jpg diff --git a/content/posts/led-characterization/images/spectrograph_step2.jpg b/content/blog/led-characterization/images/spectrograph_step2.jpg similarity index 100% rename from content/posts/led-characterization/images/spectrograph_step2.jpg rename to content/blog/led-characterization/images/spectrograph_step2.jpg diff --git a/content/posts/led-characterization/images/spectrograph_step3.jpg b/content/blog/led-characterization/images/spectrograph_step3.jpg similarity index 100% rename from content/posts/led-characterization/images/spectrograph_step3.jpg rename to content/blog/led-characterization/images/spectrograph_step3.jpg diff --git a/content/posts/led-characterization/images/spectrograph_step4_complete.jpg b/content/blog/led-characterization/images/spectrograph_step4_complete.jpg similarity index 100% rename from content/posts/led-characterization/images/spectrograph_step4_complete.jpg rename to content/blog/led-characterization/images/spectrograph_step4_complete.jpg diff --git a/content/posts/led-characterization/images/zeus_hammer_breadboard.jpg b/content/blog/led-characterization/images/zeus_hammer_breadboard.jpg similarity index 100% rename from content/posts/led-characterization/images/zeus_hammer_breadboard.jpg rename to content/blog/led-characterization/images/zeus_hammer_breadboard.jpg diff --git a/content/posts/led-characterization/images/zeus_hammer_breadboard_original.jpg b/content/blog/led-characterization/images/zeus_hammer_breadboard_original.jpg similarity index 100% rename from content/posts/led-characterization/images/zeus_hammer_breadboard_original.jpg rename to content/blog/led-characterization/images/zeus_hammer_breadboard_original.jpg diff --git a/content/posts/led-characterization/images/zeus_hammer_schematic.jpg b/content/blog/led-characterization/images/zeus_hammer_schematic.jpg similarity index 100% rename from content/posts/led-characterization/images/zeus_hammer_schematic.jpg rename to content/blog/led-characterization/images/zeus_hammer_schematic.jpg diff --git a/content/posts/led-characterization/images/zeus_hammer_schematic_original.jpg b/content/blog/led-characterization/images/zeus_hammer_schematic_original.jpg similarity index 100% rename from content/posts/led-characterization/images/zeus_hammer_schematic_original.jpg rename to content/blog/led-characterization/images/zeus_hammer_schematic_original.jpg diff --git a/content/posts/led-characterization/index.rst b/content/blog/led-characterization/index.rst similarity index 98% rename from content/posts/led-characterization/index.rst rename to content/blog/led-characterization/index.rst index 6a8c7ee..6ad4d64 100644 --- a/content/posts/led-characterization/index.rst +++ b/content/blog/led-characterization/index.rst @@ -98,19 +98,20 @@ over the problem, there are several sources for imperfections: .. raw:: html -
-
+
+
Strong ringing on the LED voltage waveform edge at about
             100% overshoot during about 70% of the cycle time.
The LED strip being at the end of a couple meters of wire caused extremely bad ringing at high driving frequencies.
-
+
+
Weak ringing on the LED voltage waveform edge at about 30%
             overshoot during about 20% of the cycle time.
Adding a resistor in front of the MOSFET gate to slow the transition dampened the ringing somewhat, but ultimately it cannot be eliminated entirely.
-
+ These last two errors are tricky to compensate. What I needed for that was basically a model of the *perceived* colors of the LED tape's color channels. A way of doing his is to record the spectra of all color channels and then evaluate @@ -159,25 +160,27 @@ spectrum of the phosphor. .. raw:: html -
-
+
+
The ingredients. The cup of coffee and Madoka Magica DVD set are essential to the eventual function of the appartus.
-
+
+
Step 1: Cut to size and mark down all holes as described in the manual
-
+
Step 2: Cut out all holes
-
+
+
The finished result with the back side showing. The viewing window is on the bottom of the other side.
-
+
Now that I had a spectrograph, I needed a somewhat predictable way of measuring the spectrum it gave me. @@ -252,15 +255,16 @@ here. .. raw:: html -
-
+
+
The front side of the preamplifier board.
-
+
+
The wiring of the photodiode preamp.
-
+ Given a way to measure intensity what remains missing is a way to scan a single photodiode across the spectrum. @@ -479,9 +483,9 @@ can view the Jupyter notebook most of the analysis above `here }} -.. _`small driver`: {{}} -.. _`multichannel LED driver`: {{}} +.. _`Wifi LED driver`: {{}} +.. _`small driver`: {{}} +.. _`multichannel LED driver`: {{}} .. _`sRGB`: https://en.wikipedia.org/wiki/SRGB .. _`CC BY-SA 3.0`: https://creativecommons.org/licenses/by-sa/3.0 .. _`Color spaces`: https://en.wikipedia.org/wiki/Color_space diff --git a/content/posts/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.mkv b/content/blog/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.mkv similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.mkv rename to content/blog/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.mkv diff --git a/content/posts/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.webm b/content/blog/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.webm similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.webm rename to content/blog/led-characterization/video/led_within_srgb_fancy_camera_path_scale=2.5.webm diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=1.0.mkv b/content/blog/led-characterization/video/led_within_srgb_scale=1.0.mkv similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=1.0.mkv rename to content/blog/led-characterization/video/led_within_srgb_scale=1.0.mkv diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=1.0.webm b/content/blog/led-characterization/video/led_within_srgb_scale=1.0.webm similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=1.0.webm rename to content/blog/led-characterization/video/led_within_srgb_scale=1.0.webm diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=2.5.mkv b/content/blog/led-characterization/video/led_within_srgb_scale=2.5.mkv similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=2.5.mkv rename to content/blog/led-characterization/video/led_within_srgb_scale=2.5.mkv diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=2.5.webm b/content/blog/led-characterization/video/led_within_srgb_scale=2.5.webm similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=2.5.webm rename to content/blog/led-characterization/video/led_within_srgb_scale=2.5.webm diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=3.mkv b/content/blog/led-characterization/video/led_within_srgb_scale=3.mkv similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=3.mkv rename to content/blog/led-characterization/video/led_within_srgb_scale=3.mkv diff --git a/content/posts/led-characterization/video/led_within_srgb_scale=3.webm b/content/blog/led-characterization/video/led_within_srgb_scale=3.webm similarity index 100% rename from content/posts/led-characterization/video/led_within_srgb_scale=3.webm rename to content/blog/led-characterization/video/led_within_srgb_scale=3.webm diff --git a/content/posts/led-characterization/video/sRGB.mkv b/content/blog/led-characterization/video/sRGB.mkv similarity index 100% rename from content/posts/led-characterization/video/sRGB.mkv rename to content/blog/led-characterization/video/sRGB.mkv diff --git a/content/posts/led-characterization/video/sRGB.webm b/content/blog/led-characterization/video/sRGB.webm similarity index 100% rename from content/posts/led-characterization/video/sRGB.webm rename to content/blog/led-characterization/video/sRGB.webm diff --git a/content/posts/led-characterization/video/scale=1.mkv b/content/blog/led-characterization/video/scale=1.mkv similarity index 100% rename from content/posts/led-characterization/video/scale=1.mkv rename to content/blog/led-characterization/video/scale=1.mkv diff --git a/content/posts/led-characterization/video/scale=1.webm b/content/blog/led-characterization/video/scale=1.webm similarity index 100% rename from content/posts/led-characterization/video/scale=1.webm rename to content/blog/led-characterization/video/scale=1.webm diff --git a/content/posts/led-characterization/video/scale=2.5.mkv b/content/blog/led-characterization/video/scale=2.5.mkv similarity index 100% rename from content/posts/led-characterization/video/scale=2.5.mkv rename to content/blog/led-characterization/video/scale=2.5.mkv diff --git a/content/posts/led-characterization/video/scale=2.5.webm b/content/blog/led-characterization/video/scale=2.5.webm similarity index 100% rename from content/posts/led-characterization/video/scale=2.5.webm rename to content/blog/led-characterization/video/scale=2.5.webm diff --git a/content/posts/led-characterization/video/scale=5.mkv b/content/blog/led-characterization/video/scale=5.mkv similarity index 100% rename from content/posts/led-characterization/video/scale=5.mkv rename to content/blog/led-characterization/video/scale=5.mkv diff --git a/content/posts/led-characterization/video/scale=5.webm b/content/blog/led-characterization/video/scale=5.webm similarity index 100% rename from content/posts/led-characterization/video/scale=5.webm rename to content/blog/led-characterization/video/scale=5.webm diff --git a/content/posts/multichannel-led-driver/images/asymmetric_iled.svg b/content/blog/multichannel-led-driver/images/asymmetric_iled.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/asymmetric_iled.svg rename to content/blog/multichannel-led-driver/images/asymmetric_iled.svg diff --git a/content/posts/multichannel-led-driver/images/asymmetric_vgate.svg b/content/blog/multichannel-led-driver/images/asymmetric_vgate.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/asymmetric_vgate.svg rename to content/blog/multichannel-led-driver/images/asymmetric_vgate.svg diff --git a/content/posts/multichannel-led-driver/images/bcm_schema.jpg b/content/blog/multichannel-led-driver/images/bcm_schema.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/bcm_schema.jpg rename to content/blog/multichannel-led-driver/images/bcm_schema.jpg diff --git a/content/posts/multichannel-led-driver/images/corrected_brightness_sim.svg b/content/blog/multichannel-led-driver/images/corrected_brightness_sim.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/corrected_brightness_sim.svg rename to content/blog/multichannel-led-driver/images/corrected_brightness_sim.svg diff --git a/content/posts/multichannel-led-driver/images/driver_linearity_raw.svg b/content/blog/multichannel-led-driver/images/driver_linearity_raw.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/driver_linearity_raw.svg rename to content/blog/multichannel-led-driver/images/driver_linearity_raw.svg diff --git a/content/posts/multichannel-led-driver/images/driver_output_ltspice_schematic.jpg b/content/blog/multichannel-led-driver/images/driver_output_ltspice_schematic.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/driver_output_ltspice_schematic.jpg rename to content/blog/multichannel-led-driver/images/driver_output_ltspice_schematic.jpg diff --git a/content/posts/multichannel-led-driver/images/driver_pcb_built.jpg b/content/blog/multichannel-led-driver/images/driver_pcb_built.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/driver_pcb_built.jpg rename to content/blog/multichannel-led-driver/images/driver_pcb_built.jpg diff --git a/content/posts/multichannel-led-driver/images/driver_ringing_strong.jpg b/content/blog/multichannel-led-driver/images/driver_ringing_strong.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/driver_ringing_strong.jpg rename to content/blog/multichannel-led-driver/images/driver_ringing_strong.jpg diff --git a/content/posts/multichannel-led-driver/images/driver_ringing_weak.jpg b/content/blog/multichannel-led-driver/images/driver_ringing_weak.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/driver_ringing_weak.jpg rename to content/blog/multichannel-led-driver/images/driver_ringing_weak.jpg diff --git a/content/posts/multichannel-led-driver/images/led_strip_alight.jpg b/content/blog/multichannel-led-driver/images/led_strip_alight.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/led_strip_alight.jpg rename to content/blog/multichannel-led-driver/images/led_strip_alight.jpg diff --git a/content/posts/multichannel-led-driver/images/linearization_setup.jpg b/content/blog/multichannel-led-driver/images/linearization_setup.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/linearization_setup.jpg rename to content/blog/multichannel-led-driver/images/linearization_setup.jpg diff --git a/content/posts/multichannel-led-driver/images/olsndot_output_schematic.jpg b/content/blog/multichannel-led-driver/images/olsndot_output_schematic.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/olsndot_output_schematic.jpg rename to content/blog/multichannel-led-driver/images/olsndot_output_schematic.jpg diff --git a/content/posts/multichannel-led-driver/images/olsndot_pcb.png b/content/blog/multichannel-led-driver/images/olsndot_pcb.png similarity index 100% rename from content/posts/multichannel-led-driver/images/olsndot_pcb.png rename to content/blog/multichannel-led-driver/images/olsndot_pcb.png diff --git a/content/posts/multichannel-led-driver/images/olsndot_schematic.png b/content/blog/multichannel-led-driver/images/olsndot_schematic.png similarity index 100% rename from content/posts/multichannel-led-driver/images/olsndot_schematic.png rename to content/blog/multichannel-led-driver/images/olsndot_schematic.png diff --git a/content/posts/multichannel-led-driver/images/overshoot_sim_r0.svg b/content/blog/multichannel-led-driver/images/overshoot_sim_r0.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/overshoot_sim_r0.svg rename to content/blog/multichannel-led-driver/images/overshoot_sim_r0.svg diff --git a/content/posts/multichannel-led-driver/images/overshoot_sim_r100.svg b/content/blog/multichannel-led-driver/images/overshoot_sim_r100.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/overshoot_sim_r100.svg rename to content/blog/multichannel-led-driver/images/overshoot_sim_r100.svg diff --git a/content/posts/multichannel-led-driver/images/pwm_schema.jpg b/content/blog/multichannel-led-driver/images/pwm_schema.jpg similarity index 100% rename from content/posts/multichannel-led-driver/images/pwm_schema.jpg rename to content/blog/multichannel-led-driver/images/pwm_schema.jpg diff --git a/content/posts/multichannel-led-driver/images/uncorrected_brightness_sim.svg b/content/blog/multichannel-led-driver/images/uncorrected_brightness_sim.svg similarity index 100% rename from content/posts/multichannel-led-driver/images/uncorrected_brightness_sim.svg rename to content/blog/multichannel-led-driver/images/uncorrected_brightness_sim.svg diff --git a/content/posts/multichannel-led-driver/index.rst b/content/blog/multichannel-led-driver/index.rst similarity index 100% rename from content/posts/multichannel-led-driver/index.rst rename to content/blog/multichannel-led-driver/index.rst diff --git a/content/posts/multichannel-led-driver/olsndot_v02_schematics_and_pcb.pdf b/content/blog/multichannel-led-driver/olsndot_v02_schematics_and_pcb.pdf similarity index 100% rename from content/posts/multichannel-led-driver/olsndot_v02_schematics_and_pcb.pdf rename to content/blog/multichannel-led-driver/olsndot_v02_schematics_and_pcb.pdf diff --git a/content/posts/private-contact-discovery/index.rst b/content/blog/private-contact-discovery/index.rst similarity index 100% rename from content/posts/private-contact-discovery/index.rst rename to content/blog/private-contact-discovery/index.rst diff --git a/content/posts/private-contact-discovery/mori_semi_psi_talk.odp b/content/blog/private-contact-discovery/mori_semi_psi_talk.odp similarity index 100% rename from content/posts/private-contact-discovery/mori_semi_psi_talk.odp rename to content/blog/private-contact-discovery/mori_semi_psi_talk.odp diff --git a/content/posts/private-contact-discovery/mori_semi_psi_talk.pdf b/content/blog/private-contact-discovery/mori_semi_psi_talk.pdf similarity index 100% rename from content/posts/private-contact-discovery/mori_semi_psi_talk.pdf rename to content/blog/private-contact-discovery/mori_semi_psi_talk.pdf diff --git a/content/posts/serial-protocols/index.rst b/content/blog/serial-protocols/index.rst similarity index 100% rename from content/posts/serial-protocols/index.rst rename to content/blog/serial-protocols/index.rst diff --git a/content/posts/sybil-resistance-identity/images/succulents.jpg b/content/blog/sybil-resistance-identity/images/succulents.jpg similarity index 100% rename from content/posts/sybil-resistance-identity/images/succulents.jpg rename to content/blog/sybil-resistance-identity/images/succulents.jpg diff --git a/content/posts/sybil-resistance-identity/index-old.rst b/content/blog/sybil-resistance-identity/index-old.rst similarity index 100% rename from content/posts/sybil-resistance-identity/index-old.rst rename to content/blog/sybil-resistance-identity/index-old.rst diff --git a/content/posts/sybil-resistance-identity/index.rst b/content/blog/sybil-resistance-identity/index.rst similarity index 100% rename from content/posts/sybil-resistance-identity/index.rst rename to content/blog/sybil-resistance-identity/index.rst diff --git a/content/posts/telekom-gpon-sfp/images/edgerouter_interface_config.png b/content/blog/telekom-gpon-sfp/images/edgerouter_interface_config.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/edgerouter_interface_config.png rename to content/blog/telekom-gpon-sfp/images/edgerouter_interface_config.png diff --git a/content/posts/telekom-gpon-sfp/images/edgerouter_route_config.png b/content/blog/telekom-gpon-sfp/images/edgerouter_route_config.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/edgerouter_route_config.png rename to content/blog/telekom-gpon-sfp/images/edgerouter_route_config.png diff --git a/content/posts/telekom-gpon-sfp/images/edgerouter_sfp_config.png b/content/blog/telekom-gpon-sfp/images/edgerouter_sfp_config.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/edgerouter_sfp_config.png rename to content/blog/telekom-gpon-sfp/images/edgerouter_sfp_config.png diff --git a/content/posts/telekom-gpon-sfp/images/edgerouter_snat_config.png b/content/blog/telekom-gpon-sfp/images/edgerouter_snat_config.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/edgerouter_snat_config.png rename to content/blog/telekom-gpon-sfp/images/edgerouter_snat_config.png diff --git a/content/posts/telekom-gpon-sfp/images/edgerouter_snat_config2.png b/content/blog/telekom-gpon-sfp/images/edgerouter_snat_config2.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/edgerouter_snat_config2.png rename to content/blog/telekom-gpon-sfp/images/edgerouter_snat_config2.png diff --git a/content/posts/telekom-gpon-sfp/images/sfp_onu_ploam_pw_config.png b/content/blog/telekom-gpon-sfp/images/sfp_onu_ploam_pw_config.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/sfp_onu_ploam_pw_config.png rename to content/blog/telekom-gpon-sfp/images/sfp_onu_ploam_pw_config.png diff --git a/content/posts/telekom-gpon-sfp/images/sfp_onu_reset.png b/content/blog/telekom-gpon-sfp/images/sfp_onu_reset.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/sfp_onu_reset.png rename to content/blog/telekom-gpon-sfp/images/sfp_onu_reset.png diff --git a/content/posts/telekom-gpon-sfp/images/sfp_onu_web_if.png b/content/blog/telekom-gpon-sfp/images/sfp_onu_web_if.png similarity index 100% rename from content/posts/telekom-gpon-sfp/images/sfp_onu_web_if.png rename to content/blog/telekom-gpon-sfp/images/sfp_onu_web_if.png diff --git a/content/posts/telekom-gpon-sfp/index.rst b/content/blog/telekom-gpon-sfp/index.rst similarity index 100% rename from content/posts/telekom-gpon-sfp/index.rst rename to content/blog/telekom-gpon-sfp/index.rst diff --git a/content/posts/thors-hammer/images/thors_hammer_breadboard.jpg b/content/blog/thors-hammer/images/thors_hammer_breadboard.jpg similarity index 100% rename from content/posts/thors-hammer/images/thors_hammer_breadboard.jpg rename to content/blog/thors-hammer/images/thors_hammer_breadboard.jpg diff --git a/content/posts/thors-hammer/images/thors_hammer_schematic.jpg b/content/blog/thors-hammer/images/thors_hammer_schematic.jpg similarity index 100% rename from content/posts/thors-hammer/images/thors_hammer_schematic.jpg rename to content/blog/thors-hammer/images/thors_hammer_schematic.jpg diff --git a/content/posts/thors-hammer/index.rst b/content/blog/thors-hammer/index.rst similarity index 100% rename from content/posts/thors-hammer/index.rst rename to content/blog/thors-hammer/index.rst diff --git a/content/posts/thors-hammer/video/thors_hammer.mkv b/content/blog/thors-hammer/video/thors_hammer.mkv similarity index 100% rename from content/posts/thors-hammer/video/thors_hammer.mkv rename to content/blog/thors-hammer/video/thors_hammer.mkv diff --git a/content/posts/thors-hammer/video/thors_hammer.mov b/content/blog/thors-hammer/video/thors_hammer.mov similarity index 100% rename from content/posts/thors-hammer/video/thors_hammer.mov rename to content/blog/thors-hammer/video/thors_hammer.mov diff --git a/content/posts/thors-hammer/video/thors_hammer.webm b/content/blog/thors-hammer/video/thors_hammer.webm similarity index 100% rename from content/posts/thors-hammer/video/thors_hammer.webm rename to content/blog/thors-hammer/video/thors_hammer.webm diff --git a/content/posts/wifi-led-driver/images/board_in_case.jpg b/content/blog/wifi-led-driver/images/board_in_case.jpg similarity index 100% rename from content/posts/wifi-led-driver/images/board_in_case.jpg rename to content/blog/wifi-led-driver/images/board_in_case.jpg diff --git a/content/posts/wifi-led-driver/images/board_in_case.small.jpg b/content/blog/wifi-led-driver/images/board_in_case.small.jpg similarity index 100% rename from content/posts/wifi-led-driver/images/board_in_case.small.jpg rename to content/blog/wifi-led-driver/images/board_in_case.small.jpg diff --git a/content/posts/wifi-led-driver/images/boards.jpg b/content/blog/wifi-led-driver/images/boards.jpg similarity index 100% rename from content/posts/wifi-led-driver/images/boards.jpg rename to content/blog/wifi-led-driver/images/boards.jpg diff --git a/content/posts/wifi-led-driver/images/boards.small.jpg b/content/blog/wifi-led-driver/images/boards.small.jpg similarity index 100% rename from content/posts/wifi-led-driver/images/boards.small.jpg rename to content/blog/wifi-led-driver/images/boards.small.jpg diff --git a/content/posts/wifi-led-driver/images/layout.png b/content/blog/wifi-led-driver/images/layout.png similarity index 100% rename from content/posts/wifi-led-driver/images/layout.png rename to content/blog/wifi-led-driver/images/layout.png diff --git a/content/posts/wifi-led-driver/images/schematic.png b/content/blog/wifi-led-driver/images/schematic.png similarity index 100% rename from content/posts/wifi-led-driver/images/schematic.png rename to content/blog/wifi-led-driver/images/schematic.png diff --git a/content/posts/wifi-led-driver/index.rst b/content/blog/wifi-led-driver/index.rst similarity index 98% rename from content/posts/wifi-led-driver/index.rst rename to content/blog/wifi-led-driver/index.rst index 8e8b24d..f1e53a9 100644 --- a/content/posts/wifi-led-driver/index.rst +++ b/content/blog/wifi-led-driver/index.rst @@ -121,8 +121,8 @@ unless you're on a beefy machine or interrupt it when it starts auto-rendering t The board is mounted into the enclosure using knurled insert nuts that are pressed into a 3D-printed hole using a bit of violence. -.. _`multichannel LED driver`: {{}} -.. _`LED characterization`: {{}} +.. _`multichannel LED driver`: {{}} +.. _`LED characterization`: {{}} .. _ESP8266: https://en.wikipedia.org/wiki/ESP8266 .. _RS485: https://en.wikipedia.org/wiki/RS-485 .. _Phoenix-style: https://www.phoenixcontact.com/online/portal/de?uri=pxc-oc-itemdetail:pid=1757019&library=dede&tab=1 diff --git a/content/posts/wifi-led-driver/resource/lyza_schematic_and_pcb.pdf b/content/blog/wifi-led-driver/resource/lyza_schematic_and_pcb.pdf similarity index 100% rename from content/posts/wifi-led-driver/resource/lyza_schematic_and_pcb.pdf rename to content/blog/wifi-led-driver/resource/lyza_schematic_and_pcb.pdf diff --git a/content/projects/_index.rst b/content/projects/_index.rst new file mode 100644 index 0000000..c975627 --- /dev/null +++ b/content/projects/_index.rst @@ -0,0 +1,6 @@ +--- +title: Projects +--- +I maintain a number of open-source projects. Most of these I started out of some personal need or interest. +I strive to keep all of them up to date and maintained, so if you notice an issue with one of them, please +open an issue on the project's issue tracker. diff --git a/content/projects/gerbolyze/README.rst b/content/projects/gerbolyze/README.rst new file mode 100644 index 0000000..cfa7673 --- /dev/null +++ b/content/projects/gerbolyze/README.rst @@ -0,0 +1,700 @@ +Gerbolyze renders SVG vector and PNG/JPG raster images into existing gerber PCB manufacturing files. +Vector data from SVG files is rendered losslessly *without* an intermediate rasterization/revectorization step. +Still, gerbolyze supports (almost) the full SVG 1.1 spec including complex, self-intersecting paths with holes, +patterns, dashes and transformations. + +Raster images can either be vectorized through contour tracing (like gerbolyze v1.0 did) or they can be embedded using +high-resolution grayscale emulation while (mostly) guaranteeing trace/space design rules. + +Try gerbolyze online at https://dyna.kokoroyukuma.de/gerboweb + +.. figure:: pics/pcbway_sample_02_small.jpg + :width: 800px + + Drawing by `トーコ Toko `__ converted using Gerbolyze and printed at PCBWay. + + +Tooling for PCB art is quite limited in both open source and closed source ecosystems. Something as simple as putting a +pretty picture on a PCB can be an extremely tedious task. Depending on the PCB tool used, various arcane incantations +may be necessary and even modestly complex images will slow down most PCB tools to a crawl. + +Gerbolyze solves this problem in a toolchain-agnostic way by directly vectorizing SVG vector and PNG or JPG bitmap files +onto existing gerber layers. Gerbolyze processes any spec-compliant SVG and "gerbolyzes" SVG vector data into a Gerber +spec-compliant form. Gerbolyze has been tested against both the leading open-source KiCAD toolchain and the +industry-standard Altium Designer. Gerbolyze is written with performance in mind and will happily vectorize tens of +thousands of primitives, generating tens of megabytes of gerber code without crapping itself. With gerbolyze you can +finally be confident that your PCB fab's toolchain will fall over before yours does if you overdo it with the high-poly +anime silkscreen. + +Gerbolyze is based on gerbonara_. + +.. image:: pics/process-overview.png + :width: 800px + +.. contents:: + +Tl;dr: Produce high-quality artistic PCBs in three easy steps! +-------------------------------------------------------------- + +Gerbolyze works in three steps. + +1. Generate a scale-accurate template of the finished PCB from your CAD tool's gerber output: + + .. code:: + + $ gerbolyze template --top template_top.svg [--bottom template_bottom.svg] my_gerber_dir + +2. Load the resulting template image Inkscape_ or another SVG editing program. Put your artwork on the appropriate SVG + layer. Dark colors become filled gerber primitives, bright colors become unfilled primitives. You can directly put + raster images (PNG/JPG) into this SVG as well, just position and scale them like everything else. SVG clips work for + images, too. Masks are not supported. + +3. Vectorize the edited SVG template image drectly into the PCB's gerber files: + + .. code:: + + $ gerbolyze paste --top template_top_edited.svg [--bottom ...] my_gerber_dir output_gerber_dir + +Quick Start Installation (Any Platform) +--------------------------------------- + +.. code-block:: shell + + python -m pip install --user gerbolyze + +To uninstall, run + +.. code-block:: shell + + python -m pip uninstall gerbolyze gerbonara resvg-wasi svg-flatten-wasi + +To update, run + +.. code-block:: shell + + python -m pip install --user --upgrade --upgrade-strategy eager gerbolyze + +Speeding up gerbolyze using natively-built binaries +--------------------------------------------------- + +This will install gerbolyze's binary dependency resvg and gerbolyze's svg-flatten utility as pre-built cross-platform +WASM binaries. When you first run gerbolyze, it will take some time (~30s) to link these binaries for your system. The +output is cached, so any future run is going to be fast. + +WASM is slower than natively-built binaries. To speed up gerbolyze, you can natively build its two binary dependencies: + +1. Install resvg natively using rust's cargo package manager: ``cargo install resvg`` +2. Install gerbolyze's svg-flatten utility natively. You can get pre-built binaries from gerbolyze's gitlab CI jobs `at + this link `__ by clicking the three dots on the + right next to the version you want. These pre-built binaries should work on any x86_64 linux since they are + statically linked. You can also build svg-flatten yourself by running ``make`` inside the ``svg-flatten`` folder from + a gerbolyze checkout. + +Gerbolyze will pick up these binaries when installed in your ``$PATH``. resvg is also picked up when it is installed by +cargo in your home's ``~/.cargo``, even if it's not in your ``$PATH``. You can override the resvg, usvg or svg-flatten +binary that gerbolyze uses by giving it the absoulute path to a binary in the ``$RESVG``, ``$USVG`` and ``$SVG_FLATTEN`` +environment variables. + + +Build from source (any distro) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: shell + + git clone --recurse-submodules https://git.jaseg.de/gerbolyze.git + cd gerbolyze + + python3 -m venv + source venv/bin/activate + python3 setup.py install + +Features +-------- + +Input on the left, output on the right. + +.. image:: pics/test_svg_readme_composited.png + :width: 800px + +* Almost full SVG 1.1 static spec coverage (!) + + * Paths with beziers, self-intersections and holes + * Strokes, even with dashes and markers + * Pattern fills and strokes + * Transformations and nested groups + * Proper text rendering with support for complex text layout (e.g. Arabic) + * elements via either built-in vectorizer or built-in halftone processor + * (some) CSS + +* Writes Gerber, SVG or KiCAD S-Expression (``.kicad_mod``) formats +* Can export from top/bottom SVGs to a whole gerber layer stack at once with filename autodetection +* Can export SVGs to ``.kicad_mod`` files like svg2mod (but with full SVG support) +* Beziers flattening with configurable tolerance using actual math! +* Polygon intersection removal +* Polygon hole removal (!) +* Optionally vector-compositing of output: convert black/white/transparent image to black/transparent image +* Renders SVG templates from input gerbers for accurate and easy scaling and positioning of artwork +* layer masking with offset (e.g. all silk within 1mm of soldermask) +* Can read gerbers from zip files +* Limited SVG support for board outline layers (no fill/region support) +* Dashed lines supported on board outline layers + +Gerbolyze is the end-to-end "paste this svg into these gerbers" command that handles all layers on both board sides at +once. The heavy-duty computer geometry logic of gerbolyze is handled by the svg-flatten utility (``svg-flatten`` +directory). svg-flatten reads an SVG file and renders it into a variety of output formats. svg-flatten can be used like +a variant of the popular svg2mod that supports all of SVG and handles arbitrary input ```` elements. + +Algorithm Overview +------------------ + +This is the algorithm gerbolyze uses to process a stack of gerbers. + +* Map input files to semantic layers by their filenames +* For each layer: + + * load input gerber + * Pass mask layers through ``gerbv`` for conversion to SVG + * Pass mask layers SVG through ``svg-flatten --dilate`` + * Pass input SVG through ``svg-flatten --only-groups [layer]`` + * Overlay input gerber, mask and input svg + * Write result to output gerber + +This is the algorithm svg-flatten uses to process an SVG. + +* pass input SVG through usvg_ +* iterate depth-first through resulting SVG. + + * for groups: apply transforms and clip and recurse + * for images: Vectorize using selected vectorizer + * for paths: + + * flatten path using Cairo + * remove self-intersections using Clipper + * if stroke is set: process dash, then offset using Clipper + * apply pattern fills + * clip to clip-path + * remove holes using Clipper + +* for KiCAD S-Expression export: vector-composite results using CavalierContours: subtract each clear output primitive + from all previous dark output primitives + +Web interface +------------- + +You can try gerbolyze online at https://dyna.kokoroyukuma.de/gerboweb + +The web interface does not expose all of gerbolyze's bells and whistles, but it allows you to simply paste a single SVG +file on a board to try out gerbolyze. Upload your design on the web interface, then download the template for either the +top or bottom side, and put your artwork on the appropriate layer of that template using Inkscape_. Finally, upload the +modified template and let gerbolyze process your design. + +Command-line usage +------------------ +.. _command_line_usage: + +Generate SVG template from Gerber files: + +.. code-block:: shell + + gerbolyze template [options] [--top|--bottom] input_dir_or.zip output.svg + +Render design from an SVG made with the template above into a set of gerber files: + +.. code-block:: shell + + gerbolyze paste [options] artwork.svg input_dir_or.zip output_dir_or.zip + +Use svg-flatten to convert an SVG file into Gerber or flattened SVG: + +.. code-block:: shell + + svg-flatten [options] --format [gerber|svg] [input_file.svg] [output_file] + +Use svg-flatten to convert an SVG file into the given layer of a KiCAD S-Expression (``.kicad_mod``) file: + +.. code-block:: shell + + svg-flatten [options] --format kicad --sexp-layer F.SilkS --sexp-mod-name My_Module [input_file.svg] [output_file] + +Use svg-flatten to convert an SVG file into a ``.kicad_mod`` with SVG layers fed into separate KiCAD layers based on +their IDs like the popular ``svg2mod`` is doing: + +Note: + Right now, the input SVG's layers must have *ids* that match up KiCAD's s-exp layer names. Note that when you name + a layer in Inkscape that only sets a ``name`` attribute, but does not change the ID. In order to change the ID in + Inkscape, you have to use Inkscape's "object properties" context menu function. + + Also note that svg-flatten expects the layer names KiCAD uses in their S-Expression format. These are *different* to + the layer names KiCAD exposes in the UI (even though most of them match up!). + + For your convenience, there is an SVG template with all the right layer names and IDs located next to this README. + +.. code-block:: shell + + svg-flatten [options] --format kicad --sexp-mod-name My_Module [input_file.svg] [output_file] + +``gerbolyze template`` +~~~~~~~~~~~~~~~~~~~~~~ + +Usage: ``gerbolyze template [OPTIONS] INPUT`` + +Generate SVG template for gerbolyze paste from gerber files. + +INPUT may be a gerber file, directory of gerber files or zip file with gerber files. The output file contains a preview +image of the input gerbers to allow you to position your artwork, as well as prepared Inkscape layers corresponding to +each gerber layer. Simply place your artwork in this SVG template using Inkscape. Starting in v3.0, gerbolyze +automatically keeps track of which board side (top or bottom) is contained in an SVG template. + +Options: +******** +``--top | --bottom`` + Output top or bottom side template. This affects both the preview image and the prepared Inkscape layers. + +``--vector | --raster`` + Embed preview renders into output file as SVG vector graphics instead of rendering them to PNG bitmaps. The + resulting preview may slow down your SVG editor. + +``--raster-dpi FLOAT`` + DPI for rastering preview + +``--bbox TEXT`` + Output file bounding box. Format: "w,h" to force [w] mm by [h] mm output canvas OR "x,y,w,h" to force [w] mm by [h] + mm output canvas with its bottom left corner at the given input gerber coördinates. + + +``gerbolyze paste`` +~~~~~~~~~~~~~~~~~~~ +(see `below `__) + +Usage: ``gerbolyze paste [OPTIONS] INPUT_GERBERS OVERLAY_SVG OUTPUT_GERBERS`` + +Render vector data and raster images from SVG file into gerbers. The SVG input file can be generated using ``gerbolyze +template`` and contains the name and board side of each layer. Note that for board outline layers, handling slightly +differs from other layers as PCB fabs do not support filled Gerber regions on these layers. + +Options: +******** + +``--bbox TEXT`` + Output file bounding box. Format: "w,h" to force [w] mm by [h] mm output canvas OR "x,y,w,h" to force [w] mm by [h] + mm output canvas with its bottom left corner at the given input gerber coördinates. This **must match the ``--bbox`` value given to + template**! + +``--subtract TEXT`` + Use user subtraction script from argument (see `below `_) + +``--no-subtract`` + Disable subtraction (see `below `_) + +``--dilate FLOAT`` + Default dilation for subtraction operations in mm (see `below `_) + +``--trace-space FLOAT`` + Passed through to svg-flatten, see `below `__. + +``--vectorizer TEXT`` + Passed through to svg-flatten, see `its description below `__. Also have a look at `the examples below `_. + +``--vectorizer-map TEXT`` + Passed through to svg-flatten, see `below `__. + +``--exclude-groups TEXT`` + Passed through to svg-flatten, see `below `__. + + +.. _outline_layers: + +Outline layers +************** + +Outline layers require special handling since PCB fabs do not support filled G36/G37 polygons on these layers. The main +difference between normal layers and outline layers is how strokes are handled. On outline layers, strokes are +translated to normal Gerber draw commands (D01, D02 etc.) with an aperture set to the stroke's width instead of tracing +them to G36/G37 filled regions. This means that on outline layers, SVG end caps and line join types do not work: All +lines are redered with round joins and end caps. + +One exception from this are patterns, which work as expected for both fills and strokes with full support for joins and +end caps. + +Dashed strokes are supported on outline layers and can be used to make easy mouse bites. + +.. _subtraction_script: + +Subtraction scripts +******************* + +.. image:: pics/subtract_example.png + :width: 800px + +Subtraction scripts tell ``gerbolyze paste`` to remove an area around certain input layers to from an overlay layer. +When a input layer is given in the subtraction script, gerbolyze will dilate (extend outwards) everything on this input +layer and remove it from the target overlay layer. By default, Gerbolyze subtracts the mask layer from the silk layer to +make sure there are no silk primitives that overlap bare copper, and subtracts each input layer from its corresponding +overlay to make sure the two do not overlap. In the picture above you can see both at work: The overlay contains +halftone primitives all over the place. The subtraction script has cut out an area around all pads (mask layer) and all +existing silkscreen. You can turn off this behavior by passing ``--no-subtract`` or pass your own "script". + +The syntax of these scripts is: + +.. code-block:: + + {target layer} -= {source layer} {dilation} [; ...] + +The target layer must be ``out.{layer name}`` and the source layer ``in.{layer name}``. The layer names are gerbolyze's +internal layer names, i.e.: ``paste, silk, mask, copper, outline, drill`` + +The dilation value is optional, but can be a float with a leading ``+`` or ``-``. If given, before subtraction the +source layer's features will be extended by that many mm. If not given, the dilation defaults to the value given by +``--dilate`` if given or 0.1 mm otherwise. To disable dilation, simply pass ``+0`` here. + +Multiple commands can be separated by semicolons ``;`` or line breaks. + +The default subtraction script is: + +.. code-block:: + + out.silk -= in.mask + out.silk -= in.silk+0.5 + out.mask -= in.mask+0.5 + out.copper -= in.copper+0.5 + +.. _svg_flatten: + +``svg-flatten`` +~~~~~~~~~~~~~~~ + +Usage: ``svg-flatten [OPTIONS]... [INPUT_FILE] [OUTPUT_FILE]`` + +Specify ``-`` for stdin/stdout. + +Options: +******** + +``-h, --help`` + Print help and exit + +``-v, --version`` + Print version and exit + +``-o, --format`` + Output format. Supported: gerber, gerber-outline (for board outline layers), svg, s-exp (KiCAD S-Expression) + +``-p, --precision`` + Number of decimal places use for exported coordinates (gerber: 1-9, SVG: >=0). Note that not all gerber viewers are + happy with too many digits. 5 or 6 is a reasonable choice. + +``--clear-color`` + SVG color to use in SVG output for "clear" areas (default: white) + +``--dark-color`` + SVG color to use in SVG output for "dark" areas (default: black) + +``-f, --flip-gerber-polarity`` + Flip polarity of all output gerber primitives for --format gerber. + +``-d, --trace-space`` + Minimum feature size of elements in vectorized graphics (trace/space) in mm. Default: 0.1mm. + +``--no-header`` + Do not export output format header/footer, only export the primitives themselves + +``--flatten`` + Flatten output so it only consists of non-overlapping white polygons. This perform composition at the vector level. + Potentially slow. This defaults to on when using KiCAD S-Exp export because KiCAD does not know polarity or colors. + +``--no-flatten`` + Disable automatic flattening for KiCAD S-Exp export + +``--dilate`` + Dilate output gerber primitives by this amount in mm. Used for masking out other layers. + +``-g, --only-groups`` + Comma-separated list of group IDs to export. + +``-b, --vectorizer`` + Vectorizer to use for bitmap images. One of poisson-disc (default), hex-grid, square-grid, binary-contours, + dev-null. Have a look at `the examples below `_. + +``--vectorizer-map`` + Map from image element id to vectorizer. Overrides --vectorizer. Format: id1=vectorizer,id2=vectorizer,... + + You can use this to set a certain vectorizer for specific images, e.g. if you want to use both halftone + vectorization and contour tracing in the same SVG. Note that you can set an ```` element's SVG ID from within + Inkscape though the context menu's Object Properties tool. + +``--force-svg`` + Force SVG input irrespective of file name + +``--force-png`` + Force bitmap graphics input irrespective of file name + +``-s, --size`` + Bitmap mode only: Physical size of output image in mm. Format: 12.34x56.78 + +``--sexp-mod-name`` + Module name for KiCAD S-Exp output. This is a mandatory argument if using S-Exp output. + +``--sexp-layer`` + Layer for KiCAD S-Exp output. Defaults to auto-detect layers from SVG layer/top-level group IDs. If given, SVG + groups and layers are completely ignored and everything is simply vectorized into this layer, though you cna still + use ``-g`` for group selection. + +``-a, --preserve-aspect-ratio`` + Bitmap mode only: Preserve aspect ratio of image. Allowed values are meet, slice. Can also parse full SVG + preserveAspectRatio syntax. + +``--no-usvg`` + Do not preprocess input using usvg (do not use unless you know *exactly* what you're doing) + +``--usvg-dpi`` + Passed through to usvg's --dpi, in case the input file has different ideas of DPI than usvg has. + +``--scale`` + Scale input svg lengths by this factor (-o gerber only). + +``-e, --exclude-groups`` + Comma-separated list of group IDs to exclude from export. Takes precedence over --only-groups. + +.. _vectorization: + +Gerbolyze image vectorization +----------------------------- + +Gerbolyze has two built-in strategies to translate pixel images into vector images. One is its built-in halftone +processor that tries to approximate grayscale. The other is its built-in binary vectorizer that traces contours in +black-and-white images. Below are examples for the four options. + +The vectorizers can be used in isolation through ``svg-flatten`` with either an SVG input that contains an image or a +PNG/JPG input. + +The vectorizer can be controlled globally using the ``--vectorizer`` flag in both ``gerbolyze`` and ``svg-flatten``. It +can also be set on a per-image basis in both using ``--vectorizer-map [image svg id]=[option]["," ...]``. + +.. for f in vec_*.png; convert -background white -gravity center $f -resize 500x500 -extent 500x500 (basename -s .png $f)-square.png; end +.. for vec in hexgrid square poisson contours; convert vec_"$vec"_whole-square.png vec_"$vec"_detail-square.png -background transparent -splice 25x0+0+0 +append -chop 25x0+0+0 vec_"$vec"_composited.png; end + +``--vectorizer poisson-disc`` (the default) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: pics/vec_poisson_composited.png + :width: 800px + +``--vectorizer hex-grid`` +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: pics/vec_hexgrid_composited.png + :width: 800px + +``--vectorizer square-grid`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: pics/vec_square_composited.png + :width: 800px + +``--vectorizer binary-contours`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: pics/vec_contours_composited.png + :width: 800px + +The binary contours vectorizer requires a black-and-white binary input image. As you can see, like every bitmap tracer +it will produce some artifacts. For artistic input this is usually not too bad as long as the input data is +high-resolution. Antialiased edges in the input image are not only OK, they may even help with an accurate +vectorization. + +GIMP halftone preprocessing guide +--------------------------------- + +Gerbolyze has its own built-in halftone processor, but you can also use the high-quality "newsprint" filter built into +GIMP_ instead if you like. This section will guide you through this. The PNG you get out of this can then be fed into +gerbolyze using ``--vectorizer binary-contours``. + +1 Import your desired artwork +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Though anime or manga pictures are highly recommended, you can use any image including photographs. Be careful to select +a picture with comparatively low detail that remains recognizable at very low resolution. While working on a screen this +is hard to vizualize, but the grain resulting from the low resolution of a PCB's silkscreen is quite coarse. + +.. image:: screenshots/02import02.png + :width: 800px + +2 Convert the image to grayscale +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: screenshots/06grayscale.png + :width: 800px + +3 Fine-tune the image's contrast +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To look well on the PCB, contrast is critical. If your source image is in color, you may have lost some contrast during +grayscale conversion. Now is the time to retouch that using the GIMP's color curve tool. + +When using the GIMP's newsprint filter, bright grays close to white and dark grays close to black will cause very small +dots that might be beyond your PCB manufacturer's maximum resolution. To control this case, add small steps at the ends +of the grayscale value curve as shown (exaggerated) in the picture below. These steps saturate very bright grays to +white and very dark grays to black while preserving the values in the middle. + +.. image:: screenshots/08curve_cut.png + :width: 800px + +4 Retouch details +~~~~~~~~~~~~~~~~~ + +Therer might be small details that don't look right yet, such as the image's background color or small highlights that +merge into the background now. You can manually change the color of any detail now using the GIMP's flood-fill tool. + +If you don't want the image's background to show up on the final PCB at all, just make it black. + +Particularly on low-resolution source images it may make sense to apply a blur with a radius similar to the following +newsprint filter's cell size (10px) to smooth out the dot pattern generated by the newsprint filter. + +.. image:: screenshots/09retouch.png + :width: 800px + +In the following example, I retouched the highlights in the hair of the character in the picture to make them completely +white instead of light-gray, so they still stand out nicely in the finished picture. + +.. image:: screenshots/10retouched.png + :width: 800px + +5 Run the newsprint filter +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Now, run the GIMP's newsprint filter, under filters, distorts, newsprint. + +The first important settings is the spot size, which should be larger than your PCB's minimum detail size (about 10px +with ``gerbolyze render`` default settings for good-quality silkscreen). In general the cheap and fast standard option of chinese PCB houses will require a larger detail size, but when you order specialty options like large size, 4-layer or non-green color along with a longer turnaround time you'll get much better-quality silk screen. + +The second important setting is oversampling, which should be set to four or slightly higher. This improves the result +of the edge reconstruction of ``gerbolyze vectorize``. + +.. image:: screenshots/11newsprint.png + :width: 800px + +The following are examples on the detail resulting from the newsprint filter. + +.. image:: screenshots/12newsprint.png + :width: 800px + +6 Export the image for use with ``gerbolyze vectorize`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Simply export the image as a PNG file. Below are some pictures of the output ``gerbolyze vectorize`` produced for this +example. + +.. image:: screenshots/14result_cut.png + :width: 800px + +.. image:: screenshots/15result_cut.png + :width: 800px + +Manufacturing Considerations +---------------------------- + +The main consideration when designing artwork for PCB processes is the processes' trace/space design rule. The two +things you can do here is one, to be creative with graphical parts of the design and avoid extremely narrow lines, +wedges or other thin features that will not come out well. Number two is to keep detail in raster images several times +larger than the manufacturing processes native capability. For example, to target a trace/space design rule of 100 µm, +the smallest detail in embedded raster graphics should not be much below 1mm. + +Gerbolyze's halftone vectorizers have built-in support for trace/space design rules. While they can still produce small +artifacts that violate these rules, their output should be close enough to satifsy board houses and close enough for the +result to look good. The way gerbolyze does this is to clip the halftone cell's values to zero whenevery they get too +small, and to forcefully split or merge two neighboring cells when they get too close. While this process introduces +slight steps at the top and bottom of grayscale response, for most inputs these are not noticeable. + +On the other hand, for SVG vector elements as well as for traced raster images, Gerbolyze cannot help with these design +rules. There is no heuristic that would allow Gerbolyze to non-destructively "fix" a design here, so all that's on the +roadmap here is to eventually include a gerber-level design rule checker. + +As far as board houses go, I have made good experiences with the popular Chinese board houses. In my experience, JLC +will just produce whatever you send them with little fucks being given about design rule adherence or validity of the +input gerbers. This is great if you just want artistic circuit boards without much of a hassle, and you don't care if +they come out exactly as you imagined. The worst I've had happen was when an older version of gerbolyze generated +polygons with holes assuming standard fill-rule processing. The in the board house's online gerber viewer things looked +fine, and neither did they complain during file review. However, the resulting boards looked completely wrong because +all the dark halftones were missing. + +PCBWay on the other hand has a much more rigurous file review process. They will complain when you throw +illegal garbage gerbers at them, and they will helpfully guide you through your design rule violations. In this way you +get much more of a professional service from them and for designs that have to be functional their higher level of +scrutiny definitely is a good thing. For the design you saw in the first picture in this article, I ended up begging +them to just plot my files if it doesn't physically break their machines and to their credit, while they seemed unhappy +about it they did it and the result looks absolutely stunning. + +PCBWay is a bit more expensive on their lowest-end offering than JLC, but I found that for anything else (large boards, +multi-layer, gold plating etc.) their prices match. PCBWay offers a much broader range of manufacturing options such as +flexible circuit boards, multi-layer boards, thick or thin substrates and high-temperature substrates. + +When in doubt about how your design is going to come out on the board, do not hesitate to contact your board house. Most +of the end customer-facing online PCB services have a number of different factories that do a number of different +fabrication processes for them depending on order parameters. Places like PCBWay have exceptional quality control and +good customer service, but that is mostly focused on the technical aspects of the PCB. If you rely on visual aspects +like silkscreen uniformity or solder mask color that is a strong no concern to everyone else in the electronics +industry, you may find significant variations between manufacturers or even between orders with the same manufacturer +and you may encounter challenges communicating your requirements. + +Limitations +----------- + +SVG raster features +~~~~~~~~~~~~~~~~~~~ + +Currently, SVG masks and filters are not supported. Though SVG is marketed as a "vector graphics format", these two +features are really raster primitives that all SVG viewers perform at the pixel level after rasterization. Since +supporting these would likely not end up looking like what you want, it is not a planned feature. If you need masks or +filters, simply export the relevant parts of the SVG as a PNG then include that in your template. + +Gerber pass-through +~~~~~~~~~~~~~~~~~~~ + +Since gerbolyze has to composite your input gerbers with its own output, it has to fully parse and re-serialize them. +gerbolyze gerbonara_ for all its gerber parsing needs. Thus, gerbonara will interpret your gerbers and output will be in +gerbonara's gerber "dialect". If you find a corner case where this does not work and the output looks wrong, please file +a bug report with an example file on the gerbonara_ bug tracker. *Always* check the output files for errors before +submitting them to production. + +Gerbolyze is provided without any warranty, but still please open an issue or `send me an email +`__ if you find any errors or inconsistencies. + +Trace/Space design rule adherence +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +While the grayscale halftone vectorizers do a reasonable job adhering to a given trace/space design rule, they can still +produce small parts of output that violate it. For the contour vectorizer as well as for all SVG primitives, you are +responsible for adhering to design rules yourself as there is no algorithm that gerboyze could use to "fix" its input. + +A design rule checker is planned as a future addition to gerbolyze, but is not yet part of it. If in doubt, talk to your +fab and consider doing a test run of your design before ordering assembled boards ;) + +Gallery +------- + +.. image:: pics/sample3.jpg + :width: 400px + +For a demonstration of ``gerbolyze convert``, check out the `Gerbolyze Protoboard Index`_, where you can download gerber +files for over 7.000 SMD and THT protoboard layouts. + +Licensing +--------- + +This tool is licensed under the rather radical AGPLv3 license. Briefly, this means that you have to provide users of a +webapp using this tool in the backend with this tool's source. + +I get that some people have issues with the AGPL. In case this license prevents you from using this software, please +send me `an email `__ and I can grant you an exception. I want this software to be useful to as +many people as possible and I wouldn't want the license to be a hurdle to anyone. OTOH I see a danger of some cheap +board house just integrating a fork into their webpage without providing their changes back upstream, and I want to +avoid that so the default license is still AGPL. + +.. _usvg: https://github.com/RazrFalcon/resvg +.. _Inkscape: https://inkscape.org/ +.. _pcb-tools: https://github.com/curtacircuitos/pcb-tools +.. _pcb-tools-extension: https://github.com/opiopan/pcb-tools-extension +.. _GIMP: https://gimp.org/ +.. _gerbonara: https://gitlab.com/gerbolyze/gerbonara +.. _`Gerbolyze Protoboard Index`: https://dyna.kokoroyukuma.de/protos/ + diff --git a/content/projects/gerbolyze/index.rst b/content/projects/gerbolyze/index.rst new file mode 100644 index 0000000..47022ee --- /dev/null +++ b/content/projects/gerbolyze/index.rst @@ -0,0 +1,17 @@ +--- +title: "Gerbolyze" +external_links: + - name: Sources + url: "https://git.jaseg.de/gerbolyze.git" + - name: Issues + url: "https://github.com/jaseg/gerbolyze/issues" + - name: Docs + url: "https://gerbolyze.gitlab.io/gerbolyze" + - name: PyPI + url: "https://pypi.org/projects/gerbolyze" +summary: > + Gerbolyze is a tool that allows the modification of Gerber PCB artwork with a vector graphics editor like Inkscape. + Gerbolyze directly converts between SVG and Gerber, and accurately reproduces details that other tools can not. +--- + +.. include:: content/projects/gerbolyze/README.rst diff --git a/content/projects/gerbolyze/pics/ex-flattening.png b/content/projects/gerbolyze/pics/ex-flattening.png new file mode 100644 index 0000000..e702733 Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-flattening.png differ diff --git a/content/projects/gerbolyze/pics/ex-intersections.png b/content/projects/gerbolyze/pics/ex-intersections.png new file mode 100644 index 0000000..05ccc59 Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-intersections.png differ diff --git a/content/projects/gerbolyze/pics/ex-strokes.png b/content/projects/gerbolyze/pics/ex-strokes.png new file mode 100644 index 0000000..5ef3c49 Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-strokes.png differ diff --git a/content/projects/gerbolyze/pics/ex-svg-joins.png b/content/projects/gerbolyze/pics/ex-svg-joins.png new file mode 100644 index 0000000..534e4c2 Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-svg-joins.png differ diff --git a/content/projects/gerbolyze/pics/ex-svg-strokes.png b/content/projects/gerbolyze/pics/ex-svg-strokes.png new file mode 100644 index 0000000..bec71c0 Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-svg-strokes.png differ diff --git a/content/projects/gerbolyze/pics/ex-svg-winding.png b/content/projects/gerbolyze/pics/ex-svg-winding.png new file mode 100644 index 0000000..3f85f6f Binary files /dev/null and b/content/projects/gerbolyze/pics/ex-svg-winding.png differ diff --git a/content/projects/gerbolyze/pics/fr4_comparison2.jpg b/content/projects/gerbolyze/pics/fr4_comparison2.jpg new file mode 100644 index 0000000..fa7c92e Binary files /dev/null and b/content/projects/gerbolyze/pics/fr4_comparison2.jpg differ diff --git a/content/projects/gerbolyze/pics/pcbway_sample_01_small.jpg b/content/projects/gerbolyze/pics/pcbway_sample_01_small.jpg new file mode 100644 index 0000000..f8d6397 Binary files /dev/null and b/content/projects/gerbolyze/pics/pcbway_sample_01_small.jpg differ diff --git a/content/projects/gerbolyze/pics/pcbway_sample_02_small.jpg b/content/projects/gerbolyze/pics/pcbway_sample_02_small.jpg new file mode 100644 index 0000000..ba8e984 Binary files /dev/null and b/content/projects/gerbolyze/pics/pcbway_sample_02_small.jpg differ diff --git a/content/projects/gerbolyze/pics/pcbway_sample_03_small.jpg b/content/projects/gerbolyze/pics/pcbway_sample_03_small.jpg new file mode 100644 index 0000000..1336739 Binary files /dev/null and b/content/projects/gerbolyze/pics/pcbway_sample_03_small.jpg differ diff --git a/content/projects/gerbolyze/pics/process-overview.png b/content/projects/gerbolyze/pics/process-overview.png new file mode 100644 index 0000000..01d3811 Binary files /dev/null and b/content/projects/gerbolyze/pics/process-overview.png differ diff --git a/content/projects/gerbolyze/pics/process-overview.svg b/content/projects/gerbolyze/pics/process-overview.svg new file mode 100644 index 0000000..b21aa70 --- /dev/null +++ b/content/projects/gerbolyze/pics/process-overview.svg @@ -0,0 +1,7230 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + KiCAD/Altium + SVG + Gerber! + + + + + + + + + + + + diff --git a/content/projects/gerbolyze/pics/sample1.jpg b/content/projects/gerbolyze/pics/sample1.jpg new file mode 100644 index 0000000..948da6f Binary files /dev/null and b/content/projects/gerbolyze/pics/sample1.jpg differ diff --git a/content/projects/gerbolyze/pics/sample2.jpg b/content/projects/gerbolyze/pics/sample2.jpg new file mode 100644 index 0000000..ef47bd4 Binary files /dev/null and b/content/projects/gerbolyze/pics/sample2.jpg differ diff --git a/content/projects/gerbolyze/pics/sample3.jpg b/content/projects/gerbolyze/pics/sample3.jpg new file mode 100644 index 0000000..780c080 Binary files /dev/null and b/content/projects/gerbolyze/pics/sample3.jpg differ diff --git a/content/projects/gerbolyze/pics/subtract_example.png b/content/projects/gerbolyze/pics/subtract_example.png new file mode 100644 index 0000000..f8e138a Binary files /dev/null and b/content/projects/gerbolyze/pics/subtract_example.png differ diff --git a/content/projects/gerbolyze/pics/test_svg_readme.svg b/content/projects/gerbolyze/pics/test_svg_readme.svg new file mode 100644 index 0000000..1a0178e --- /dev/null +++ b/content/projects/gerbolyze/pics/test_svg_readme.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + सर्वे मानवाः स्वतन्त्राः समुत्पन्नाः वर्तन्ते अपि च, गौरवदृशा + + + + + لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار + + This is a gerber export test + + diff --git a/content/projects/gerbolyze/pics/test_svg_readme_composited.png b/content/projects/gerbolyze/pics/test_svg_readme_composited.png new file mode 100644 index 0000000..f686e19 Binary files /dev/null and b/content/projects/gerbolyze/pics/test_svg_readme_composited.png differ diff --git a/content/projects/gerbolyze/pics/vec_contours_composited.png b/content/projects/gerbolyze/pics/vec_contours_composited.png new file mode 100644 index 0000000..aa826f8 Binary files /dev/null and b/content/projects/gerbolyze/pics/vec_contours_composited.png differ diff --git a/content/projects/gerbolyze/pics/vec_hexgrid_composited.png b/content/projects/gerbolyze/pics/vec_hexgrid_composited.png new file mode 100644 index 0000000..9578260 Binary files /dev/null and b/content/projects/gerbolyze/pics/vec_hexgrid_composited.png differ diff --git a/content/projects/gerbolyze/pics/vec_poisson_composited.png b/content/projects/gerbolyze/pics/vec_poisson_composited.png new file mode 100644 index 0000000..e3ac758 Binary files /dev/null and b/content/projects/gerbolyze/pics/vec_poisson_composited.png differ diff --git a/content/projects/gerbolyze/pics/vec_square_composited.png b/content/projects/gerbolyze/pics/vec_square_composited.png new file mode 100644 index 0000000..02a89ea Binary files /dev/null and b/content/projects/gerbolyze/pics/vec_square_composited.png differ diff --git a/content/projects/gerbonara/index.rst b/content/projects/gerbonara/index.rst new file mode 100644 index 0000000..be28fb4 --- /dev/null +++ b/content/projects/gerbonara/index.rst @@ -0,0 +1,141 @@ +--- +title: "Gerbonara" +external_links: + - name: Sources + url: "https://git.jaseg.de/gerbonara.git" + - name: Issues + url: "https://gitlab.com/gerbolyze/gerbonara/issues" + - name: Docs + url: "https://gerbolyze.gitlab.io/gerbonara" + - name: PyPI + url: "https://pypi.org/projects/gerbonara" +summary: > + Gerbonara is a user-friendly, powerful tool for reading, writing, modification and rendering of Gerber PCB artwork + from the command line or from Python code. Gerbonara supports the Gerber dialects of all industry-standard EDA + tools. +--- + +Gerbonara is a library to read, modify and write PCB manufacturing files such as Gerber, Excellon and IPC-356 through a +pythonic API. Gerbonara can open a folder of manufacturing files, and parse file names and metadata to figure out which +file contains what. Gerbonara is tested using an extensive library of real-world example files from CAD tools including +KiCAD, Altium, Eagle, Allegro, gEDA, Fritzing, Siemens/Mentor Graphics PADS, and Target3001!. + +Gerbonara's API is built on two principles: + +**Meaningful, object-oriented API** + Gerbonara abstracts away the details of the underlying file format such as tool indices, coordinate notation and + graphical state, and presents meaningful "graphical objects" such as a `primitives.Line`, + `primitives.Arc`, or `Region` through its API. These objects can be easily created, + manipulated or deleted from code without breaking anything else. You can even copy graphical objects between files, + and Gerbonara will automatically convert coordinate format, units etc. for you. `GerberFile` and + `ExcellonFile` use the same types of `graphic objects `, so objects can be directly + copied between file types without conversion. + +**Unit-safety** + Gerbonara embeds physical `LengthUnit` information in all objects. The high-level API such as + `LayerStack.merge` or `GerberFile.offset` accepts arguments with an explicitly given unit and + automatically converts them as needed. Objects can be copied between `GerberFile` instances and unit + conversion will be handled transparently in the background. + +Gerbonara was started as an extensive refactoring of the pcb-tools_ and pcb-tools-extension_ packages. Both of these +have statement-based APIs, that is, they parse input files into one python object for every line in the file. This means +that when saving files they can recreate the input file almost byte by byte, but manipulating a file by changing +statements without breaking things is *hard*. + +Gerbonara powers gerbolyze_, a tool for converting SVG_ vector graphics files into Gerber, and embedding SVG_ into +existing Gerber files exported from a normal PCB tool for artistic purposes. + +Features +======== + + * File I/O + * Gerber, Excellon (drill file), IPC-356 (netlist) read and write + * supports file-level operations: offset, rotate, merge for all file types + * Modification API (`GraphicObject`) + * Rendering API (`GraphicPrimitive`) + * SVG export + * Full aperture macro support, including transformations (offset, rotation) + +Quick Start +=========== + +First, install gerbonara from PyPI using pip: + +.. code-block:: shell + + pip install --user gerbonara + +Then, you are ready to read and write gerber files: + +.. code-block:: python + + from gerbonara import LayerStack + + stack = LayerStack.from_directory('output/gerber') + w, h = stack.outline.size('mm') + print(f'Board size is {w:.1f} mm x {h:.1f} mm') + +Command-Line Interface +====================== + +Gerbonara comes with a `built-in command-line interface` that has functions for analyzing, rendering, +modifying, and merging Gerber files. To access it, use either the ``gerbonara`` command that is part of the python +package, or run ``python -m gerbonara`` For a list of functions or help on their usage, you can use: + +.. code:: console + + $ python -m gerbonara --help + [...] + $ python -m gerbonara render --help + +Development +=========== + +Gerbonara is developed on Gitlab under the gerbolyze org: + +https://gitlab.com/gerbolyze/gerbonara/ + +A mirror of the repository can be found at: + +https://git.jaseg.de/gerbonara + +Our issue tracker is also on Gitlab: + +https://gitlab.com/gerbolyze/gerbonara/-/issues + +The documentation can be found at gitlab: + +https://gerbolyze.gitlab.io/gerbonara/ + +With Gerbonara, we aim to support as many different format variants as possible. If you have a file that Gerbonara can't +open, please file an issue on our issue tracker. Even if Gerbonara can open all your files, for regression testing we +are very interested in example files generated by any CAD or CAM tool that is not already on the list of supported +tools. + +Supported CAD Tools +=================== + +Compatibility with the output of these CAD tools is tested as part of our test suite using example files generated by +these tools. Note that not all of these tools come with default Gerber file naming rules, so YMMV if your Gerbers use +some non-standard naming convention. + + * Allegro + * Altium + * Diptrace + * Eagle + * EasyEDA + * Fritzing + * gEDA + * KiCAD + * pcb-rnd + * Siemens / Mentor Graphics Xpedition + * Siemens PADS + * Target 3001! + * Upverter + * Zuken CR-8000 + +.. _pcb-tools: https://github.com/opiopan/pcb-tools-extension +.. _pcb-tools-extension: https://github.com/curtacircuitos/pcb-tools/issues +.. _gerbolyze: https://github.com/jaseg/gerbolyze +.. _SVG: https://en.wikipedia.org/wiki/Scalable_Vector_Graphics + diff --git a/content/projects/lolcat-c/LOLCat-Rainbow.jpg b/content/projects/lolcat-c/LOLCat-Rainbow.jpg new file mode 100644 index 0000000..9524d26 Binary files /dev/null and b/content/projects/lolcat-c/LOLCat-Rainbow.jpg differ diff --git a/content/projects/lolcat-c/index.rst b/content/projects/lolcat-c/index.rst new file mode 100644 index 0000000..6217b34 --- /dev/null +++ b/content/projects/lolcat-c/index.rst @@ -0,0 +1,105 @@ +--- +title: "lolcat-c" +external_links: + - name: Sources + url: "https://git.jaseg.de/lolcat.git" + - name: Issues + url: "https://github.com/jaseg/lolcat/issues" +summary: > + lolcat-c is a small, high-performance re-implementation of the + `lolcat `__ + rainbow cat utility. lolcat-c is meant as a lolcat that you can actually use in production. It is fast, not slowing + down whatever you pipe through it, and it robustly handles real-world terminal output including escape sequences. +--- + +What? +===== + +.. image:: LOLCat-Rainbow.jpg + +Screenshot +========== + +.. image:: screenshot.png + +.. image:: sl.gif + +Installation +============ + +Archlinux +--------- + +There's an `AUR package `__: + +.. code:: sh + + $ git clone https://aur.archlinux.org/packages/c-lolcat + $ cd c-lolcat + $ makepkg -csi + +Fedora +------ + +.. code:: sh + + $ dnf install lolcat + +Ubuntu (Snap) +------------- + +See `this awesome blog post by a kind person from the internet `__: + +.. code:: sh + + $ snap install lolcat-c + +Mac +--- + +Build loclcat with: + +.. code:: sh + + $ make lolcat + +...and put the resulting binary at a place of your choice. + +Others +------ + +.. code:: sh + + $ make && sudo make install + +Why? +==== + +This `lolcat` clone is an attempt to reduce the world's carbon dioxide emissions by optimizing inefficient code. It's +>10x as fast and <0.1% as large as the original one. + +.. code:: sh + + newton~/d/lolcat <3 dmesg>foo + newton~/d/lolcat <3 time upstream/bin/lolcat foo + 13.51user 1.34system 0:15.99elapsed 92%CPU (0avgtext+0avgdata 10864maxresident)k + 0inputs+0outputs (0major+1716minor)pagefaults 0swaps + newton~/d/lolcat <3 time ./lolcat foo + 0.02user 0.00system 0:00.09elapsed 34%CPU (0avgtext+0avgdata 1936maxresident)k + 0inputs+0outputs (0major+117minor)pagefaults 0swaps + +Bonus comparison with `python-lolcat `__: + +.. code:: sh + + newton~/d/lolcat <3 dmesg>foo + $ time python-lolcat foo + 12.27user 0.00system 0:12.29elapsed 99%CPU (0avgtext+0avgdata 11484maxresident)k + 0inputs+0outputs (0major+1627minor)pagefaults 0swaps + $ time c-lolcat foo + 0.29user 0.00system 0:00.30elapsed 98%CPU (0avgtext+0avgdata 468maxresident)k + 0inputs+0outputs (0major+21minor)pagefaults 0swaps + +(Read: `c-lolcat << python-lolcat << ruby-lolcat`) + + diff --git a/content/projects/lolcat-c/screenshot.png b/content/projects/lolcat-c/screenshot.png new file mode 100644 index 0000000..56282af Binary files /dev/null and b/content/projects/lolcat-c/screenshot.png differ diff --git a/content/projects/lolcat-c/sl.gif b/content/projects/lolcat-c/sl.gif new file mode 100644 index 0000000..9d994e8 Binary files /dev/null and b/content/projects/lolcat-c/sl.gif differ diff --git a/content/projects/python-mpv/README.rst b/content/projects/python-mpv/README.rst new file mode 100644 index 0000000..26815d1 --- /dev/null +++ b/content/projects/python-mpv/README.rst @@ -0,0 +1,401 @@ +.. vim: tw=120 sw=4 et + +python-mpv is a ctypes-based python interface to the mpv media player. It gives you more or less full control of all +features of the player, just as the lua interface does. + +Installation +------------ + +.. code:: bash + + pip install mpv + + +...though you can also realistically just copy `mpv.py`_ into your project as it's all nicely contained in one file. + +Requirements +~~~~~~~~~~~~ + +libmpv +...... +``libmpv.so`` either locally (in your current working directory) or somewhere in your system library search path. This +module is somewhat lenient as far as ``libmpv`` versions are concerned but since ``libmpv`` is changing quite frequently +you'll only get all the newest features when using an up-to-date version of this module. The unit tests for this module +do some basic automatic version compatibility checks. If you discover anything missing here, please open an `issue`_ or +submit a `pull request`_ on github. + +On Windows you can place libmpv anywhere in your ``%PATH%`` (e.g. next to ``python.exe``) or next to this module's +``mpv.py``. Before falling back to looking in the mpv module's directory, python-mpv uses the DLL search order built +into ctypes, which is different to the one Windows uses internally. Consult `this stackoverflow post +`__ for details. + +Python >= 3.7 (officially) +.......................... +The ``main`` branch officially only supports recent python releases (3.5 onwards), but there is the somewhat outdated +but functional `py2compat branch`_ providing Python 2 compatibility. + +.. _`py2compat branch`: https://github.com/jaseg/python-mpv/tree/py2compat +.. _`issue`: https://github.com/jaseg/python-mpv/issues +.. _`pull request`: https://github.com/jaseg/python-mpv/pulls + +Supported Platforms +................... + +**Linux**, **Windows** and **OSX** all seem to work mostly fine. For some notes on the installation on Windows see +`this comment`__. Shared library handling is quite bad on windows, so expect some pain there. On OSX there seems to be +some bug int the event logic. See `issue 36`_ and `issue 61`_ for details. Creating a pyQT window and having mpv draw +into it seems to be a workaround (about 10loc), but in case you want this fixed please weigh in on the issue tracker +since right now there is not many OSX users. + +.. __: https://github.com/jaseg/python-mpv/issues/60#issuecomment-352719773 +.. _`issue 61`: https://github.com/jaseg/python-mpv/issues/61 +.. _`issue 36`: https://github.com/jaseg/python-mpv/issues/36 + +Usage +----- + +.. code:: python + + import mpv + player = mpv.MPV(ytdl=True) + player.play('https://youtu.be/DOmdB7D-pUU') + player.wait_for_playback() + +python-mpv mostly exposes mpv's built-in API to python, adding only some porcelain on top. Most "`input commands `_" are mapped to methods of the MPV class. Check out these methods and their docstrings in `the source `__ for things you can do. Additional controls and status information are exposed through `MPV properties `_. These can be accessed like ``player.metadata``, ``player.fullscreen`` and ``player.loop_playlist``. + +Threading +~~~~~~~~~ + +The ``mpv`` module starts one thread for event handling, since MPV sends events that must be processed quickly. The +event queue has a fixed maxmimum size and some operations can cause a large number of events to be sent. + +If you want to handle threading yourself, you can pass ``start_event_thread=False`` to the ``MPV`` constructor and +manually call the ``MPV`` object's ``_loop`` function. If you have some strong need to not use threads and use some +external event loop (such as asyncio) instead you can do that, too with some work. The API of the backend C ``libmpv`` +has a function for producing a sort of event file descriptor for a handle. You can use that to produce a file descriptor +that can be passed to an event loop to tell it to wake up the python-mpv event handler on every incoming event. + +All API functions are thread-safe. If one is not, please file an issue on github. + +Advanced Usage +~~~~~~~~~~~~~~ + +Logging, Properties, Python Key Bindings, Screenshots and youtube-dl +.................................................................... + +.. code:: python + + #!/usr/bin/env python3 + import mpv + + def my_log(loglevel, component, message): + print('[{}] {}: {}'.format(loglevel, component, message)) + + player = mpv.MPV(log_handler=my_log, ytdl=True, input_default_bindings=True, input_vo_keyboard=True) + + # Property access, these can be changed at runtime + @player.property_observer('time-pos') + def time_observer(_name, value): + # Here, _value is either None if nothing is playing or a float containing + # fractional seconds since the beginning of the file. + print('Now playing at {:.2f}s'.format(value)) + + player.fullscreen = True + player.loop_playlist = 'inf' + # Option access, in general these require the core to reinitialize + player['vo'] = 'gpu' + + @player.on_key_press('q') + def my_q_binding(): + print('THERE IS NO ESCAPE') + + @player.on_key_press('s') + def my_s_binding(): + pillow_img = player.screenshot_raw() + pillow_img.save('screenshot.png') + + player.play('https://youtu.be/DLzxrzFCyOs') + player.wait_for_playback() + + del player + +Skipping silence using libav filters +.................................... + +The following code uses the libav silencedetect filter to skip silence at the beginning of a file. It works by loading +the filter, then parsing its output from mpv's log. Thanks to Sean DeNigris on github (#202) for the original code! + +.. code:: python + + #!/usr/bin/env python3 + import sys + import mpv + + p = mpv.MPV() + p.play(sys.argv[1]) + + def skip_silence(): + p.set_loglevel('debug') + p.af = 'lavfi=[silencedetect=n=-20dB:d=1]' + p.speed = 100 + def check(evt): + toks = evt['event']['text'].split() + if 'silence_end:' in toks: + return float(toks[2]) + p.time_pos = p.wait_for_event('log_message', cond=check) + p.speed = 1 + p.af = '' + + skip_silence() + p.wait_for_playback() + +Video overlays +.............. + +.. code:: python + + #!/usr/bin/env python3 + import time + from PIL import Image, ImageDraw, ImageFont + import mpv + + player = mpv.MPV() + + player.loop = True + player.play('test.webm') + player.wait_until_playing() + + font = ImageFont.truetype('DejaVuSans.ttf', 40) + + while not player.core_idle: + + time.sleep(0.5) + overlay = player.create_image_overlay() + + for pos in range(0, 500, 5): + ts = player.time_pos + if ts is None: + break + + img = Image.new('RGBA', (400, 150), (255, 255, 255, 0)) + d = ImageDraw.Draw(img) + d.text((10, 10), 'Hello World', font=font, fill=(0, 255, 255, 128)) + d.text((10, 60), f't={ts:.3f}', font=font, fill=(255, 0, 255, 255)) + + overlay.update(img, pos=(2*pos, pos)) + time.sleep(0.05) + + overlay.remove() + + +Playlist handling +................. + +.. code:: python + + #!/usr/bin/env python3 + import mpv + + player = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True) + + player.playlist_append('https://youtu.be/PHIGke6Yzh8') + player.playlist_append('https://youtu.be/Ji9qSuQapFY') + player.playlist_append('https://youtu.be/6f78_Tf4Tdk') + + player.playlist_pos = 0 + + while True: + # To modify the playlist, use player.playlist_{append,clear,move,remove}. player.playlist is read-only + print(player.playlist) + player.wait_for_playback() + +Directly feeding mpv data from python +..................................... + +.. code:: python + + #!/usr/bin/env python3 + import mpv + + player = mpv.MPV() + @player.python_stream('foo') + def reader(): + with open('test.webm', 'rb') as f: + while True: + yield f.read(1024*1024) + + player.play('python://foo') + player.wait_for_playback() + +Using external subtitles +........................ + +The easiest way to load custom subtitles from a file is to pass the ``--sub-file`` option to the ``loadfile`` call: + +.. code:: python + + #!/usr/bin/env python3 + import mpv + + player = mpv.MPV() + player.loadfile('test.webm', sub_file='test.srt') + player.wait_for_playback() + +Note that you can also pass many other options to ``loadfile``. See the mpv docs for details. + +If you want to add subtitle files or streams at runtime, you can use the ``sub-add`` command. ``sub-add`` can only be +called once the player is done loading the file and starts playing. An easy way to wait for this is to wait for the +``core-idle`` property. + +.. code:: python + + #!/usr/bin/env python3 + import mpv + + player = mpv.MPV() + player.play('test.webm') + player.wait_until_playing() + player.sub_add('test.srt') + player.wait_for_playback() + +Using MPV's built-in GUI +........................ + +python-mpv is using mpv via libmpv. libmpv is meant for embedding into other applications and by default disables most +GUI features such as the OSD or keyboard input. To enable the built-in GUI, use the following options when initializing +the MPV instance. See `Issue 102`_ for more details + +.. _`issue 102`: https://github.com/jaseg/python-mpv/issues/61 + +.. code:: python + + # Enable the on-screen controller and keyboard shortcuts + player = mpv.MPV(input_default_bindings=True, input_vo_keyboard=True, osc=True) + + # Alternative version using the old "floating box" style on-screen controller + player = mpv.MPV(player_operation_mode='pseudo-gui', + script_opts='osc-layout=box,osc-seekbarstyle=bar,osc-deadzonesize=0,osc-minmousemove=3', + input_default_bindings=True, + input_vo_keyboard=True, + osc=True) + +PyQT embedding +.............. + +.. code:: python + + #!/usr/bin/env python3 + import mpv + import sys + + from PyQt5.QtWidgets import * + from PyQt5.QtCore import * + + class Test(QMainWindow): + def __init__(self, parent=None): + super().__init__(parent) + self.container = QWidget(self) + self.setCentralWidget(self.container) + self.container.setAttribute(Qt.WA_DontCreateNativeAncestors) + self.container.setAttribute(Qt.WA_NativeWindow) + player = mpv.MPV(wid=str(int(self.container.winId())), + vo='x11', # You may not need this + log_handler=print, + loglevel='debug') + player.play('test.webm') + + app = QApplication(sys.argv) + + # This is necessary since PyQT stomps over the locale settings needed by libmpv. + # This needs to happen after importing PyQT before creating the first mpv.MPV instance. + import locale + locale.setlocale(locale.LC_NUMERIC, 'C') + win = Test() + win.show() + sys.exit(app.exec_()) + +PyGObject embedding +................... + +.. code:: python + + #!/usr/bin/env python3 + import gi + + import mpv + + gi.require_version('Gtk', '3.0') + from gi.repository import Gtk + + + class MainClass(Gtk.Window): + + def __init__(self): + super(MainClass, self).__init__() + self.set_default_size(600, 400) + self.connect("destroy", self.on_destroy) + + widget = Gtk.Frame() + self.add(widget) + self.show_all() + + # Must be created >after< the widget is shown, else property 'window' will be None + self.mpv = mpv.MPV(wid=str(widget.get_property("window").get_xid())) + self.mpv.play("test.webm") + + def on_destroy(self, widget, data=None): + self.mpv.terminate() + Gtk.main_quit() + + + if __name__ == '__main__': + # This is necessary since like Qt, Gtk stomps over the locale settings needed by libmpv. + # Like with Qt, this needs to happen after importing Gtk but before creating the first mpv.MPV instance. + import locale + locale.setlocale(locale.LC_NUMERIC, 'C') + + application = MainClass() + Gtk.main() + +Using OpenGL from PyGObject +........................... + +Just like it is possible to render into a GTK widget through X11 windows, it `also is possible to render into a GTK +widget using OpenGL `__ through this python API. + +Using OpenGL from PyQt5/QML +........................... + +Robozman_ has mangaed to `make mpv render into a PyQt5/QML widget using OpenGL +`__ through this python API. + +Using mpv inside imgui inside OpenGL via GLFW +............................................. + +dfaker_ has written a demo (`link `__) that uses mpv to render video into an `imgui `__ UI running on an OpenGL context inside `GLFW `__. Check out their demo to see how to integrate with imgui/OpenGL and how to access properties and manage the lifecycle of an MPV instance. + +Running tests +------------- + +Use pytest to run tests. + +Coding Conventions +------------------ + +The general aim is `PEP 8`_, with liberal application of the "consistency" section. 120 cells line width. Four spaces. +No tabs. Probably don't bother making pure-formatting PRs except if you think it *really* helps readability or it +*really* irks you if you don't. + +License +------- + +python-mpv inherits the underlying libmpv's license, which can be either GPLv2 or later (default) or LGPLv2.1 or later. +For details, see `the mpv copyright page`_. + +.. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/ +.. _`mpv.py`: https://raw.githubusercontent.com/jaseg/python-mpv/main/mpv.py +.. _cosven: https://github.com/cosven +.. _Robozman: https://gitlab.com/robozman +.. _dfaker: https://github.com/dfaker +.. _`the mpv copyright page`: https://github.com/mpv-player/mpv/blob/master/Copyright + diff --git a/content/projects/python-mpv/index.rst b/content/projects/python-mpv/index.rst new file mode 100644 index 0000000..a1bdcd5 --- /dev/null +++ b/content/projects/python-mpv/index.rst @@ -0,0 +1,18 @@ +--- +title: "python-mpv" +external_links: + - name: Sources + url: "https://git.jaseg.de/python-mpv.git" + - name: Issues + url: "https://github.com/jaseg/python-mpv/issues" + - name: Docs + url: "https://neinseg.gitlab.io/python-mpv" + - name: PyPI + url: "https://pypi.org/projects/mpv" +summary: > + python-mpv is a small, ctypes-based Python library wrapping the libmpv media player library. Despite its small size + and simple API, python-mpv allows advanced control over libmpv and beyond simple remote control of mpv can be used + to embed mpv in OpenGL, Qt, and GTK-based Python applications. +--- + +.. include:: content/projects/python-mpv/README.rst diff --git a/content/projects/svg-flatten/index.rst b/content/projects/svg-flatten/index.rst new file mode 100644 index 0000000..1554bcf --- /dev/null +++ b/content/projects/svg-flatten/index.rst @@ -0,0 +1,15 @@ +--- +title: "svg-flatten" +external_links: + - name: Sources + url: "https://git.jaseg.de/gerbolyze.git/tree/svg-flatten?h=main" + - name: Issues + url: "https://github.com/jaseg/gerbolyze/issues" + - name: Docs + url: "https://gerbolyze.gitlab.io/svg-flatten" +summary: > + svg-flatten is a command-line utility that performs vector occlusion and clipping on SVG files, producing a + flattened SVG file without overlapping elements, without changing what the file looks like. svg-flatten is used as a + part of gerbolyze. +--- + diff --git a/content/projects/wsdiff/index.rst b/content/projects/wsdiff/index.rst new file mode 100644 index 0000000..8c2a7bc --- /dev/null +++ b/content/projects/wsdiff/index.rst @@ -0,0 +1,63 @@ +--- +title: "wsdiff" +external_links: + - name: Sources + url: "https://git.jaseg.de/wsdiff.git" + - name: Issues + url: "https://github.com/jaseg/wsdiff/issues" + - name: Docs + url: "https://pypi.org/projects/wsdiff" +summary: > + wsdiff is a command-line utility that produces self-contained, syntax-highlighted, HTML-formatted diffs that support + both unified and side-by-side diffs from a single source file using nothing but CSS magic. +--- + +wsdiff is a python script that produces a diff of two files or directories as a single, self-contained HTML file. The +resulting diff works without Javascript and will automatically switch between inline and side-by-side formats depending +on available screen space. + +Installation +============ + +.. code:: sh + + $ pip install wsdiff + +Usage +===== + +:: + + usage: wsdiff [-h] [-b] [-s SYNTAX_CSS] [-l LEXER] [-L] [-t PAGETITLE] + [-o OUTPUT] [--header] [--content] + [old] [new] + + Given two source files or directories this application creates an html page + that highlights the differences between the two. + + positional arguments: + old source file or directory to compare ("before" file) + new source file or directory to compare ("after" file) + + options: + -h, --help show this help message and exit + -b, --open Open output file in a browser + -s SYNTAX_CSS, --syntax-css SYNTAX_CSS + Path to custom Pygments CSS file for code syntax + highlighting + -l LEXER, --lexer LEXER + Manually select pygments lexer (default: guess from + filename, use -L to list available lexers.) + -L, --list-lexers List available lexers for -l/--lexer + -t PAGETITLE, --pagetitle PAGETITLE + Override page title of output HTML file + -o OUTPUT, --output OUTPUT + Name of output file (default: stdout) + --header Only output HTML header with stylesheets and stuff, + and no diff + --content Only output HTML content, without header + +Example Output +============== + +.. image:: latest.png diff --git a/content/projects/wsdiff/latest.png b/content/projects/wsdiff/latest.png new file mode 100644 index 0000000..039fa46 Binary files /dev/null and b/content/projects/wsdiff/latest.png differ diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index 3e988aa..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Disallow: /categories/ -Disallow: /tags/ -Disallow: /imprint/ - -User-agent: Googlebot-Image -Disallow: / - -Sitemap: https://blog.jaseg.de/sitemap.xml diff --git a/themes/blog.jaseg.de/README.md b/themes/blog.jaseg.de/README.md deleted file mode 100644 index 5135313..0000000 --- a/themes/blog.jaseg.de/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Hugo.io - Classic Theme - -Classic is forked from the **XMin** theme, written by [Yihui Xie](https://yihui.name). I made a fresh remix of it for my [personal blog](https://goodroot.ca). It provides some simplifications, `highlight.js` for syntax highlighting, emoji support, and slick fonts. - -### Instructions - -1: Install Hugo. - -``` -brew install hugo -``` - -2: Create a new site. - -``` -hugo new site classic -``` - -3: Change to themes dir. - -``` -cd classic/themes -``` - -4: Clone the repo - -``` -git clone git@github.com:goodroot/hugo-classic.git -``` - -5: Copy the contents of the `exampleSite` directory into {dir}/classic. - -6: Enjoy and customize to your hearts content! - -### New Posts - -To make new posts, simply use the command line: - -``` -hugo new post/good-to-great.md -``` - -### Header Colour - -To adjust the header colour, head to `static/css/style.css` and change... - -``` -header { - background: #613DC1; -} -``` - -... `background:` to any colour value you'd like! - -For header font: - -``` -header a { - color: #fff; -} -``` - -Change `color:` to a nice matching colour. - -#### Screenshot - -![Screenshot of Hugo Classic](https://github.com/goodroot/hugo-classic/raw/master/images/screenshot.png) - -## Blog Posts - -hugo-classic has appeared in... - -[15 Hugo Framework blog themes](https://terrty.net/2018/15-hugo-framework-blog-themes/) by [paskal](https://github.com/paskal) diff --git a/themes/blog.jaseg.de/archetypes/default.md b/themes/blog.jaseg.de/archetypes/default.md deleted file mode 100644 index fb98e92..0000000 --- a/themes/blog.jaseg.de/archetypes/default.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: '' -date: '' ---- diff --git a/themes/blog.jaseg.de/exampleSite/config.toml b/themes/blog.jaseg.de/exampleSite/config.toml deleted file mode 100644 index f5ff3dd..0000000 --- a/themes/blog.jaseg.de/exampleSite/config.toml +++ /dev/null @@ -1,33 +0,0 @@ -baseurl = "/" -languageCode = "en-us" -title = "Classic" -theme = "hugo-classic" -googleAnalytics = "" -ignoreFiles = ["\\.Rmd$", "_files$", "_cache$"] -preserveTaxonomyNames = true -enableEmoji = true -footnotereturnlinkcontents = "↩" - -[permalinks] - post = "/post/:year/:month/:day/:slug/" - -[[menu.main]] - name = "Home" - url = "/" - weight = 1 -[[menu.main]] - name = "Categories" - url = "/categories/" - weight = 2 -[[menu.main]] - name = "Tags" - url = "/tags/" - weight = 3 -[[menu.feed]] - name = "Subscribe" - url = "/index.xml" - -[params] - description = "A simple, minimal blog for those who love text." - footer = "Open-Source | [Github](https://github.com/goodroot/hugo-classic) | [Twitter](https://twitter.com/thegoodroot)" - custom_css = ["css/theme-override.css"] diff --git a/themes/blog.jaseg.de/exampleSite/content/_index.md b/themes/blog.jaseg.de/exampleSite/content/_index.md deleted file mode 100644 index 32af099..0000000 --- a/themes/blog.jaseg.de/exampleSite/content/_index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Home ---- - -[Github repo](https://github.com/goodroot/hugo-classic) - -# Hugo.io - Classic - -### For text focused goodness - -About twenty years ago Jobs and Wozniak, the founders of Apple, came up with the very strange idea of selling information processing machines for use in the home. The business took off, and its founders made a lot of money and received the credit they deserved for being daring visionaries. But around the same time, Bill Gates and Paul Allen came up with an idea even stranger and more fantastical: **selling computer operating systems**. This was much weirder than the idea of Jobs and Wozniak. - -~~~ruby -def with_value_from_database(value) - self.class.from_database(name, value, type) -end - -def with_cast_value(value) - self.class.with_cast_value(name, value, type) -end -end -~~~ - -A computer at least had some sort of physical reality to it. It came in a box, you could open it up and plug it in and watch lights blink. An operating system had no tangible incarnation at all. It arrived on a disk, of course, but the disk was, in effect, nothing more than the box that the OS came in. - -
- -### Blog diff --git a/themes/blog.jaseg.de/exampleSite/content/post/2012-01-23-juicy-code.md b/themes/blog.jaseg.de/exampleSite/content/post/2012-01-23-juicy-code.md deleted file mode 100644 index 4614e74..0000000 --- a/themes/blog.jaseg.de/exampleSite/content/post/2012-01-23-juicy-code.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Juicy Code -author: Open Source -date: '2012-01-23' -categories: - - Code -tags: - - Juicy -slug: juicy-code ---- - -Check out this JUICY! code: - -~~~ruby -def with_value_from_database(value) - self.class.from_database(name, value, type) -end - -def with_cast_value(value) - self.class.with_cast_value(name, value, type) -end - -def with_type(type) - if changed_in_place? - with_value_from_user(value).with_type(type) - else - self.class.new(name, value_before_type_cast, type, original_attribute) - end -end -~~~ diff --git a/themes/blog.jaseg.de/exampleSite/content/post/2012-04-23-hacker-with-horn.md b/themes/blog.jaseg.de/exampleSite/content/post/2012-04-23-hacker-with-horn.md deleted file mode 100644 index 8511d11..0000000 --- a/themes/blog.jaseg.de/exampleSite/content/post/2012-04-23-hacker-with-horn.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Hacker with Bullhorn -author: Open-Source -date: '2012-04-23' -categories: - - Bullhorn - - Example -slug: hacker-with-horn ---- - -Hacker with bullhorn: "Save your money! Accept one of our free tanks! It is invulnerable, and can drive across rocks and swamps at ninety miles an hour while getting a hundred miles to the gallon!" - -Prospective station wagon buyer: "I know what you say is true...but...er...I don't know how to maintain a tank!" - -Bullhorn: "You don't know how to maintain a station wagon either!" - -Buyer: "But this dealership has mechanics on staff. If something goes wrong with my station wagon, I can take a day off work, bring it here, and pay them to work on it while I sit in the waiting room for hours, listening to elevator music." - -Bullhorn: "But if you accept one of our free tanks we will send volunteers to your house to fix it for free while you sleep!" - -Buyer: "Stay away from my house, you freak!" - -Bullhorn: "But..." - -Buyer: "Can't you see that everyone is buying station wagons?" diff --git a/themes/blog.jaseg.de/exampleSite/content/post/2015-07-23-command-line-awesomeness.md b/themes/blog.jaseg.de/exampleSite/content/post/2015-07-23-command-line-awesomeness.md deleted file mode 100644 index 6914648..0000000 --- a/themes/blog.jaseg.de/exampleSite/content/post/2015-07-23-command-line-awesomeness.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Command Line Awesomeness" -date: '2012-03-12' -categories: - - Blog -tags: - - HTML ---- - -This crud is called HTML (HyperText Markup Language) and it is basically a very simple programming language instructing your web browser how to draw a page on a screen. Anyone can learn HTML and many people do. The important thing is that no matter what splendid multimedia web pages they might represent, HTML files are just telegrams. - -> When Ronald Reagan was a radio announcer, he used to call baseball games by reading the terse descriptions that trickled in over the telegraph wire and were printed out on a paper tape. He would sit there, all by himself in a padded room with a microphone, and the paper tape would eke out of the machine and crawl over the palm of his hand printed with cryptic abbreviations. If the count went to three and two, Reagan would describe the scene as he saw it in his mind's eye: "The brawny left-hander steps out of the batter's box to wipe the sweat from his brow. The umpire steps forward to sweep the dirt from home plate." and so on. When the cryptogram on the paper tape announced a base hit, he would whack the edge of the table with a pencil, creating a little sound effect, and describe the arc of the ball as if he could actually see it. His listeners, many of whom presumably thought that Reagan was actually at the ballpark watching the game, would reconstruct the scene in their minds according to his descriptions. - -This is exactly how the World Wide Web works: the HTML files are the pithy description on the paper tape, and your Web browser is Ronald Reagan. The same is true of Graphical User Interfaces in general. diff --git a/themes/blog.jaseg.de/exampleSite/content/post/2016-02-14-markdown-guide.md b/themes/blog.jaseg.de/exampleSite/content/post/2016-02-14-markdown-guide.md deleted file mode 100644 index fc64964..0000000 --- a/themes/blog.jaseg.de/exampleSite/content/post/2016-02-14-markdown-guide.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Markdown Guide -author: Open Source -date: '2014-03-14' -categories: - - Example -tags: - - Markdown ---- - -An h1 header -============ - -Paragraphs are separated by a blank line. - -2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists -look like: - - * this one - * that one - * the other one - -Note that --- not considering the asterisk --- the actual text -content starts at 4-columns in. - -> Block quotes are -> written like so. -> -> They can span multiple paragraphs, -> if you like. - -Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all -in chapters 12--14"). Three dots ... will be converted to an ellipsis. -Unicode is supported. ☺ - - - -An h2 header ------------- - -Here's a numbered list: - - 1. first item - 2. second item - 3. third item - -Note again how the actual text starts at 4 columns in (4 characters -from the left side). Here's a code sample: - - # Let me re-iterate ... - for i in 1 .. 10 { do-something(i) } - -As you probably guessed, indented 4 spaces. By the way, instead of -indenting the block, you can use delimited blocks, if you like: - -~~~ -define foobar() { - print "Welcome to flavor country!"; -} -~~~ - -(which makes copying & pasting easier). You can optionally mark the -delimited block for Pandoc to syntax highlight it: - -~~~python -import time -# Quick, count to ten! -for i in range(10): - # (but not *too* quick) - time.sleep(0.5) - print i -~~~ - - - -### An h3 header ### - -Now a nested list: - - 1. First, get these ingredients: - - * carrots - * celery - * lentils - - 2. Boil some water. - - 3. Dump everything in the pot and follow - this algorithm: - - find wooden spoon - uncover pot - stir - cover pot - balance wooden spoon precariously on pot handle - wait 10 minutes - goto first step (or shut off burner when done) - - Do not bump wooden spoon or it will fall. - -Notice again how text always lines up on 4-space indents (including -that last line which continues item 3 above). - -Here's a link to [a website](http://foo.bar), to a [local -doc](local-doc.html), and to a [section heading in the current -doc](#an-h2-header). Here's a footnote [^1]. - -[^1]: Footnote text goes here. - -Tables can look like this: - -size material color ----- ------------ ------------ -9 leather brown -10 hemp canvas natural -11 glass transparent - -Table: Shoes, their sizes, and what they're made of - -(The above is the caption for the table.) Pandoc also supports -multi-line tables: - --------- ----------------------- -keyword text --------- ----------------------- -red Sunsets, apples, and - other red or reddish - things. - -green Leaves, grass, frogs - and other things it's - not easy being. --------- ----------------------- - -A horizontal rule follows. - -*** - -Here's a definition list: - -apples - : Good for making applesauce. -oranges - : Citrus! -tomatoes - : There's no "e" in tomatoe. - -Again, text is indented 4 spaces. (Put a blank line between each -term/definition pair to spread things out more.) - -Here's a "line block": - -| Line one -| Line too -| Line tree - -and images can be specified like so: - -![example image](example-image.jpg "An exemplary image") - -Inline math equations go in like so: $\omega = d\phi / dt$. Display -math should get its own line and be put in in double-dollarsigns: - -$$I = \int \rho R^{2} dV$$ - -And note that you can backslash-escape any punctuation characters -which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc. - -#### Images auto center: - -![Party](http://emojis.slackmojis.com/emojis/images/1475875185/1223/party-dinosaur.gif?1475875185) diff --git a/themes/blog.jaseg.de/exampleSite/static/css/theme-override.css b/themes/blog.jaseg.de/exampleSite/static/css/theme-override.css deleted file mode 100644 index c761e7f..0000000 --- a/themes/blog.jaseg.de/exampleSite/static/css/theme-override.css +++ /dev/null @@ -1 +0,0 @@ -footer { font-size: 90%; font-family: monospace; } diff --git a/themes/blog.jaseg.de/images/partywizard.gif b/themes/blog.jaseg.de/images/partywizard.gif deleted file mode 100644 index 1c1d813..0000000 Binary files a/themes/blog.jaseg.de/images/partywizard.gif and /dev/null differ diff --git a/themes/blog.jaseg.de/images/screenshot.png b/themes/blog.jaseg.de/images/screenshot.png deleted file mode 100644 index 56f82ac..0000000 Binary files a/themes/blog.jaseg.de/images/screenshot.png and /dev/null differ diff --git a/themes/blog.jaseg.de/images/tn.png b/themes/blog.jaseg.de/images/tn.png deleted file mode 100644 index f58c780..0000000 Binary files a/themes/blog.jaseg.de/images/tn.png and /dev/null differ diff --git a/themes/blog.jaseg.de/layouts/404.html b/themes/blog.jaseg.de/layouts/404.html deleted file mode 100644 index c2e4e40..0000000 --- a/themes/blog.jaseg.de/layouts/404.html +++ /dev/null @@ -1,5 +0,0 @@ -{{ partial "header.html" . }} - -404 NOT FOUND - -{{ partial "footer.html" . }} diff --git a/themes/blog.jaseg.de/layouts/_default/list.html b/themes/blog.jaseg.de/layouts/_default/list.html deleted file mode 100644 index 41d9d89..0000000 --- a/themes/blog.jaseg.de/layouts/_default/list.html +++ /dev/null @@ -1,18 +0,0 @@ -{{ partial "header.html" . }} - -{{if not .IsHome }} -

{{ .Title }}

-{{ end }} - -{{ .Content }} - -
    - {{ range (where .Data.Pages "Section" "!=" "") }} -
  • - {{ .Date.Format "2006/01/02" }} - {{ .Title }} -
  • - {{ end }} -
- -{{ partial "footer.html" . }} diff --git a/themes/blog.jaseg.de/layouts/_default/single.html b/themes/blog.jaseg.de/layouts/_default/single.html deleted file mode 100644 index b3b5570..0000000 --- a/themes/blog.jaseg.de/layouts/_default/single.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ partial "header.html" . }} - - -{{ if .Params.toc }} -{{ .TableOfContents }} -{{ end }} - -
-{{ .Content }} -
- -{{ partial "footer.html" . }} diff --git a/themes/blog.jaseg.de/layouts/_default/terms.html b/themes/blog.jaseg.de/layouts/_default/terms.html deleted file mode 100644 index 4f6f544..0000000 --- a/themes/blog.jaseg.de/layouts/_default/terms.html +++ /dev/null @@ -1,16 +0,0 @@ -{{ partial "header.html" . }} - -

{{ .Title }}

- -
    - {{ range $key, $value := .Data.Terms }} -
  • - - {{ $key }} - - ({{ len $value }}) -
  • - {{ end }} -
- -{{ partial "footer.html" . }} diff --git a/themes/blog.jaseg.de/layouts/index.html b/themes/blog.jaseg.de/layouts/index.html deleted file mode 100644 index 0c885ce..0000000 --- a/themes/blog.jaseg.de/layouts/index.html +++ /dev/null @@ -1,14 +0,0 @@ -{{ partial "header.html" . }} - -

{{ site.Title }}

- -
    - {{ range (where site.RegularPages "Section" "==" "posts") }} -
  • - {{ .Date.Format "2006/01/02" }} - {{ .Title }} -
  • - {{ end }} -
- -{{ partial "footer.html" . }} diff --git a/themes/blog.jaseg.de/layouts/partials/foot_custom.html b/themes/blog.jaseg.de/layouts/partials/foot_custom.html deleted file mode 100644 index 3d9fb1d..0000000 --- a/themes/blog.jaseg.de/layouts/partials/foot_custom.html +++ /dev/null @@ -1,25 +0,0 @@ - - diff --git a/themes/blog.jaseg.de/layouts/partials/footer.html b/themes/blog.jaseg.de/layouts/partials/footer.html deleted file mode 100644 index 9a6f133..0000000 --- a/themes/blog.jaseg.de/layouts/partials/footer.html +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/themes/blog.jaseg.de/layouts/partials/head_custom.html b/themes/blog.jaseg.de/layouts/partials/head_custom.html deleted file mode 100644 index 6520ca0..0000000 --- a/themes/blog.jaseg.de/layouts/partials/head_custom.html +++ /dev/null @@ -1,33 +0,0 @@ -
- - - - - - -
diff --git a/themes/blog.jaseg.de/layouts/partials/header.html b/themes/blog.jaseg.de/layouts/partials/header.html deleted file mode 100644 index 6ef9a69..0000000 --- a/themes/blog.jaseg.de/layouts/partials/header.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - {{ .Title }} | {{ .Site.Title }} - - - {{ range .Site.Params.custom_css -}} - - {{- end }} - {{ partial "head_custom.html" . }} - - - -
diff --git a/themes/blog.jaseg.de/static/css/fonts.css b/themes/blog.jaseg.de/static/css/fonts.css deleted file mode 100644 index c851143..0000000 --- a/themes/blog.jaseg.de/static/css/fonts.css +++ /dev/null @@ -1,7 +0,0 @@ -body { - font-family: -apple-system, BlinkMacSystemFont, 'Avenir Next', Avenir, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; -} -code { - font-family: "Lucida Console", Monaco, monospace; - font-size: 85%; -} diff --git a/themes/blog.jaseg.de/static/css/style.css b/themes/blog.jaseg.de/static/css/style.css deleted file mode 100644 index 47e5233..0000000 --- a/themes/blog.jaseg.de/static/css/style.css +++ /dev/null @@ -1,273 +0,0 @@ -/* @import url('https://fonts.googleapis.com/css?family=Roboto+Slab:400,700|Source+Serif+Pro'); */ -/* @import url('https://fonts.googleapis.com/css?family=Fredoka+One|Source+Serif+Pro'); */ -@import url('https://fonts.googleapis.com/css?family=Baloo|Source+Serif+Pro'); -@import url('https://fonts.googleapis.com/css?family=Ubuntu+Mono'); - -body { - max-width: 800px; - margin: auto; - padding: .2em; - line-height: 20pt; - font-size: 12pt; -} - -/* Table of Contents, if wanted - -Add to yaml: - -output: -blogdown::html_page: -toc: true - - */ - -#TableOfContents, #TOC { - border: 1px solid #eee; -} - -/* Header and Footer */ -.menu li { display: inline-block; } -.article-meta, .menu a { - text-decoration: none; - background: #ff99cc; - color: #FFF; - padding: 5px; - text-shadow: 0px 1px 1px #fe3ea0; -} - - -.article-meta h1, .article-meta h2 { - margin-top: 1em; - color: white; -} - - -.terms { font-size: .9em; } -.menu, .article-meta, footer { text-align: center; } -.title { font-size: 1.1em; } -footer a { text-decoration: none; } - -.pull-left { - float: left -} -.pull-right { - float: right -} - -a { - color: #ff6bb6; - text-decoration: none; -} - -a:hover { - background: #83cbe3; - color: white; -} - -/* Adjust background at your leisure! */ -header { - position: relative; - width: 100%; - height: 1.75rem; - font-size: .875rem; - background: #83cbe3; - font-family: 'Baloo', sans-serif; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 2em; - font-family: 'Baloo', sans-serif; - /* color: #ff99cc; */ - color: #ff6bb6; -} - -li { - padding-bottom: 1em; -} - -header ul, -header ol { - margin: 0; - padding: 0; - list-style: none -} -header nav { - padding: 0 0.5rem -} - -header a { - color: #fff; - line-height: 1.75rem; - padding: 0 0.5rem -} -header a:hover, -header .current a { - color: #fff -} - -/* Code Boxes */ -pre { - border: 1px solid #ddd; - box-shadow: 5px 5px 5px #eee; - background: #f8f8f8; - padding: 1em; - overflow-x: auto; -} -code { background: #f9f9f9; } -pre code { background: none; } - -/* Images, tables, misc. */ -img, iframe, video { max-width: 100%; } -main { - text-align: justify; - word-wrap: break-word; - font-family: "Source Serif Pro", "Times New Roman", serif; - color: #555; - hyphens: auto; -} - -/* Caution! duplicate this rule below. */ -::selection { - background: #83cbe3; - color: white; -} - -::-moz-selection { - background: #83cbe3; - color: white; -} - -/* Caution! duplicate this rule below. */ -figcaption::selection { - background: #ff99cc; - color: white; -} - -figcaption::-moz-selection { - background: #ff99cc; - color: white; -} - -/* Caution! duplicate this rule below. */ -a::-moz-selection { - background: #ff99cc; - color: white; -} - -a::selection { - background: #ff99cc; - color: white; -} - -blockquote { - background: #f9f9f9; - border-left: 5px solid #ffc6e3; - padding: 3px 1em 3px; -} - -table { - margin: auto; - border-top: 1px solid #666; - border-bottom: 1px solid #666; -} -table thead th { border-bottom: 1px solid #ddd; } -th, td { padding: 5px; } -tr:nth-child(even) { background: #eee } - -table.footnote { - margin: 0; - border: 0; -} - -table.footnote:nth-of-type(1) { - position: relative; - margin-top: 6em; -} - -table.footnote:nth-of-type(1)::before { - content: "Footnotes:"; - position: absolute; - top: -2em; - border-top: 1px solid black; - border-bottom: 0; - width: 20em; -} - -/* Inline code markup */ -tt.literal { - font-family: 'Ubuntu Mono', monospace; - background: #e2f3f8; - color: #164d60; - font-weight: bold; - font-size: 10pt; - padding: 2px; - border-radius: 0.3em; -} - -figure.side-by-side { - width: 49%; - min-width: 15em; - display: inline-block; - margin: 0 0 0 0; - padding: 0 40px 0 0; - vertical-align: top; - box-sizing: border-box; -} - -/* -figure figure.side-by-side:nth-of-type(2) { - padding: 0; -} -*/ - -figure img, figure video { - display: block; - margin-left: auto; - margin-right: auto; - width: 100%; -} - -figcaption a { - background: white; - color: #83cbe3; -} - -figcaption a:hover { - background: #ff6bb6; -} - -figcaption { - display: block; - line-height: 16pt; - background: #83cbe3; - color: white; - font-family: 'Baloo', sans-serif; - padding: 1em; - border-radius: 0 0 0.5em 0.5em; -} - -figure { - margin-top: 3em; - margin-bottom: 3em; -} - -figure.header { - margin-left: 0; - margin-right: 0; - margin-top: 0; -} - -#license-info img { - vertical-align: middle; -} - -#license-info, -#imprint-info { - color: #aaa; - font-size: 10pt; - font-family: "Source Serif Pro", "Times New Roman", serif; -} - -div.document { - margin-bottom: 4em; -} diff --git a/themes/blog.jaseg.de/theme.toml b/themes/blog.jaseg.de/theme.toml deleted file mode 100644 index 13deae2..0000000 --- a/themes/blog.jaseg.de/theme.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "blog.jaseg.de" -license = "MIT" -licenselink = "https://github.com/goodroot/hugo-classic/blob/master/LICENSE.md" -description = "Custom theme for blog.jaseg.de" -homepage = "https://goodroot.ca" -tags = ["blog", "personal", "simple"] -features = ["blog"] -min_version = "0.18" - -[author] - name = "jaseg" - homepage = "https://blog.jaseg.de" - -[original] - author = "Yihui Xui" - homepage = "https://xmin.yihui.name/" - repo = "https://github.com/yihui/hugo-xmin" diff --git a/themes/blog.jaseg.de/LICENSE.md b/themes/conspiracy/LICENSE similarity index 96% rename from themes/blog.jaseg.de/LICENSE.md rename to themes/conspiracy/LICENSE index c7d9150..17993f6 100644 --- a/themes/blog.jaseg.de/LICENSE.md +++ b/themes/conspiracy/LICENSE @@ -1,5 +1,7 @@ The MIT License (MIT) +Copyright (c) 2023 YOUR_NAME_HERE + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to diff --git a/themes/conspiracy/archetypes/default.md b/themes/conspiracy/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/themes/conspiracy/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/themes/conspiracy/assets/css/style.css b/themes/conspiracy/assets/css/style.css new file mode 100644 index 0000000..9ab9203 --- /dev/null +++ b/themes/conspiracy/assets/css/style.css @@ -0,0 +1,269 @@ + +@font-face { + font-family: "Manuskript Gothisch"; + src: url("{{ (resources.Get "fonts/manuskript_gothisch/Manuskript Gothisch UNZ1A.ttf").RelPermalink }}"); +} + +@font-face { + font-family: "Roboto Slab"; + src: url("{{ (resources.Get "fonts/roboto_slab/RobotoSlab-VariableFont_wght.ttf").RelPermalink }}") format("truetype-variations"); + font-weight: 100 200 300 400 500 600 700 800 900; +} + +@font-face { + font-family: "Bodoni Moda"; + src: url("{{ (resources.Get "fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-MediumItalic.ttf").RelPermalink }}"); + font-style: italic; +} + +html, body { + border: 0; + margin: 0; + padding: 0; +} + +body { + display: flex; + flex-direction: column; + align-items: stretch; + font-family: "Roboto Slab"; + font-weight: 350; + color: #d0d0d0; + background-color: #0d1015; +} + +strong { + font-family: "Bodoni Moda"; + font-style: italic; +} + +a:hover, a:visited, a:active, a:link { + color: #ff9449; + text-decoration: none; +} + +a:hover { + background: #fc0daf; + color: #d0d0d0; +} + +nav { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + background-color: #272c35; + box-shadow: 0 0 3px 2px rgba(0, 0, 0, 0.8); + padding: 0 10px 0 10px; +} + +nav > a:link, nav > a:active, nav > a:visited, nav > a:hover { + flex-grow: 1; + color: inherit; + padding: 10px 10px 10px 10px; +} + +nav > a:hover { + background: #fc0daf; +} + +nav > .spacer { + flex-grow: 100; +} + +.breadcrumbs { + max-width: 40em; + text-align: center; + align-self: center; + margin: 0; + padding: 0; +} + +.breadcrumbs li { + list-style: none; + display: inline; +} + +.breadcrumbs li + li::before { + content: "/"; + margin: 0 5px 0 5px; +} + +main { + align-self: center; + margin-top: -100px; + padding: 100px 100px 40px 100px; + max-width: 40em; + background-color: #272c35; + box-shadow: 0 0 3px 2px rgba(0, 0, 0, 0.5); + text-align: justify; + hyphens: auto; +} + +main > .intro { + margin-top: 40px; +} + +h1, h2, h3, h4, h5, h6 { + font-family: "Manuskript Gothisch"; + margin-top: 50px; + margin-bottom: 8px; +} + +body > header { + z-index: 1; + margin-top: 100px; + margin-bottom: 0; + text-align: center; + display: flex; + flex-direction: column; + align-items: center; +} + +body > header > h1 { + text-align: center; + background-image: linear-gradient(to right, #fc00b9, #ff9449); + background-clip: text; + -webkit-background-clip: text; + color: transparent; + filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.8)); + font-size: 32px; +} + +body > header > h1::first-line { + /* https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/ */ + --min-fs: 3; + --max-fs: 10; + --min-vw: 20; + --max-vw: 40; + + --min-fs-rem: var(--min-fs) * 1rem; + --max-fs-rem: var(--max-fs) * 1rem; + --min-vw-rem: var(--min-vw) * 1rem; + + --slope: (var(--max-fs) - var(--min-fs)) * (100vw - var(--min-vw-rem)) / (var(--max-vw) - var(--min-vw)); + + font-size: clamp(var(--min-fs-rem), var(--min-fs-rem) + var(--slope), var(--max-fs-rem)); +} + + +main.cards { + background-color: #1f232a; +} + +.card { + background-color: #272c35; + box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.2); + padding: 30px 20px 30px 20px; + margin-top: 50px; + +} + +.card > .links { + margin-left: -20px; + margin-bottom: -30px; + border-top: 0.5px dotted rgba(255, 255, 255, 0.3); + margin-top: 20px; + width: calc(100% + 40px); + display: flex; + flex-direction: row; + justify-content: space-around; +} + +.card > .links > a { + padding: 10px 10px 10px 10px; + flex-grow: 1; + text-align: center; +} + +/* un-mess-up rst2html output */ +.card > .summary > .document, .card > .summary > .document > p { + display: inline; +} + +.card > h1, +.card > h2, +.card > h3, +.card > h4, +.card > h5, +.card > h6 { + margin-top: 0px; +} + +tt { + font-family: monospace; + font-weight: bold; + font-size: 14px; +} + +cite { + font-family: monospace; + font-weight: bold; + font-size: 14px; + font-style: normal; +} + +figure { + margin-top: 2em; + margin-bottom: 2em; + margin-left: auto; + margin-right: auto; + background-color: #b5bcc8; + box-shadow: 0 0 3px 2px rgba(0, 0, 0, 0.5); + display: flex; + flex-direction: column; +} + +.subfigure { + margin-top: 2em; + margin-bottom: 2em; + display: grid; + grid-template-columns: 1fr 1fr; + justify-items: stretch; + align-items: stretch; + column-gap: 40px; + row-gap: 40px; +} + +.subfigure > figure { + margin-top: 0; + margin-bottom: 0; +} + +figure.side-by-side { + min-width: 15em; + margin: 0 0 0 0; + padding: 0 40px 0 0; +} + +figure img, figure video { + display: block; + margin-left: auto; + margin-right: auto; + width: 100%; +} + +figcaption { + background-color: #383f4c; + line-height: 16pt; + padding: 1em; + flex-grow: 1; +} + + +figure.header { + margin-left: 0; + margin-right: 0; + margin-top: 0; +} + +img { + max-width: 100%; + margin: 40px auto 40px auto; + display: block; +} + +footer { + margin-top: 30px; + align-self: center; + margin-bottom: 10px; +} diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-Italic-VariableFont_opsz,wght.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-Italic-VariableFont_opsz,wght.ttf new file mode 100644 index 0000000..c07e0ea Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-Italic-VariableFont_opsz,wght.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-VariableFont_opsz,wght.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-VariableFont_opsz,wght.ttf new file mode 100644 index 0000000..f943195 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/BodoniModa-VariableFont_opsz,wght.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/OFL.txt b/themes/conspiracy/assets/fonts/bodoni_moda/OFL.txt new file mode 100644 index 0000000..ac5c663 --- /dev/null +++ b/themes/conspiracy/assets/fonts/bodoni_moda/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Bodoni Moda Project Authors (https://github.com/indestructible-type/Bodoni) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/README.txt b/themes/conspiracy/assets/fonts/bodoni_moda/README.txt new file mode 100644 index 0000000..d0fc50f --- /dev/null +++ b/themes/conspiracy/assets/fonts/bodoni_moda/README.txt @@ -0,0 +1,124 @@ +Bodoni Moda Variable Font +========================= + +This download contains Bodoni Moda as both variable fonts and static fonts. + +Bodoni Moda is a variable font with these axes: + opsz + wght + +This means all the styles are contained in these files: + BodoniModa-VariableFont_opsz,wght.ttf + BodoniModa-Italic-VariableFont_opsz,wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Bodoni Moda: + static/BodoniModa_9pt/BodoniModa_9pt-Regular.ttf + static/BodoniModa_9pt/BodoniModa_9pt-Medium.ttf + static/BodoniModa_9pt/BodoniModa_9pt-SemiBold.ttf + static/BodoniModa_9pt/BodoniModa_9pt-Bold.ttf + static/BodoniModa_9pt/BodoniModa_9pt-ExtraBold.ttf + static/BodoniModa_9pt/BodoniModa_9pt-Black.ttf + static/BodoniModa_18pt/BodoniModa_18pt-Regular.ttf + static/BodoniModa_18pt/BodoniModa_18pt-Medium.ttf + static/BodoniModa_18pt/BodoniModa_18pt-SemiBold.ttf + static/BodoniModa_18pt/BodoniModa_18pt-Bold.ttf + static/BodoniModa_18pt/BodoniModa_18pt-ExtraBold.ttf + static/BodoniModa_18pt/BodoniModa_18pt-Black.ttf + static/BodoniModa_28pt/BodoniModa_28pt-Regular.ttf + static/BodoniModa_28pt/BodoniModa_28pt-Medium.ttf + static/BodoniModa_28pt/BodoniModa_28pt-SemiBold.ttf + static/BodoniModa_28pt/BodoniModa_28pt-Bold.ttf + static/BodoniModa_28pt/BodoniModa_28pt-ExtraBold.ttf + static/BodoniModa_28pt/BodoniModa_28pt-Black.ttf + static/BodoniModa_48pt/BodoniModa_48pt-Regular.ttf + static/BodoniModa_48pt/BodoniModa_48pt-Medium.ttf + static/BodoniModa_48pt/BodoniModa_48pt-SemiBold.ttf + static/BodoniModa_48pt/BodoniModa_48pt-Bold.ttf + static/BodoniModa_48pt/BodoniModa_48pt-ExtraBold.ttf + static/BodoniModa_48pt/BodoniModa_48pt-Black.ttf + static/BodoniModa_72pt/BodoniModa_72pt-Regular.ttf + static/BodoniModa_72pt/BodoniModa_72pt-Medium.ttf + static/BodoniModa_72pt/BodoniModa_72pt-SemiBold.ttf + static/BodoniModa_72pt/BodoniModa_72pt-Bold.ttf + static/BodoniModa_72pt/BodoniModa_72pt-ExtraBold.ttf + static/BodoniModa_72pt/BodoniModa_72pt-Black.ttf + static/BodoniModa_9pt/BodoniModa_9pt-Italic.ttf + static/BodoniModa_9pt/BodoniModa_9pt-MediumItalic.ttf + static/BodoniModa_9pt/BodoniModa_9pt-SemiBoldItalic.ttf + static/BodoniModa_9pt/BodoniModa_9pt-BoldItalic.ttf + static/BodoniModa_9pt/BodoniModa_9pt-ExtraBoldItalic.ttf + static/BodoniModa_9pt/BodoniModa_9pt-BlackItalic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-Italic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-MediumItalic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-SemiBoldItalic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-BoldItalic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-ExtraBoldItalic.ttf + static/BodoniModa_18pt/BodoniModa_18pt-BlackItalic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-Italic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-MediumItalic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-SemiBoldItalic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-BoldItalic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-ExtraBoldItalic.ttf + static/BodoniModa_28pt/BodoniModa_28pt-BlackItalic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-Italic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-MediumItalic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-SemiBoldItalic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-BoldItalic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-ExtraBoldItalic.ttf + static/BodoniModa_48pt/BodoniModa_48pt-BlackItalic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-Italic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-MediumItalic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-SemiBoldItalic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-BoldItalic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-ExtraBoldItalic.ttf + static/BodoniModa_72pt/BodoniModa_72pt-BlackItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Black.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Black.ttf new file mode 100644 index 0000000..185d01d Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BlackItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BlackItalic.ttf new file mode 100644 index 0000000..0135e30 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BlackItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Bold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Bold.ttf new file mode 100644 index 0000000..f47dfbf Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BoldItalic.ttf new file mode 100644 index 0000000..aa8c674 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-BoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBold.ttf new file mode 100644 index 0000000..6f20a92 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBoldItalic.ttf new file mode 100644 index 0000000..fd47a26 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-ExtraBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Italic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Italic.ttf new file mode 100644 index 0000000..a5e3586 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Italic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Medium.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Medium.ttf new file mode 100644 index 0000000..18728fc Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-MediumItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-MediumItalic.ttf new file mode 100644 index 0000000..becd9ad Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-MediumItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Regular.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Regular.ttf new file mode 100644 index 0000000..508beea Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBold.ttf new file mode 100644 index 0000000..65533fa Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBoldItalic.ttf new file mode 100644 index 0000000..91b43ed Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_18pt/BodoniModa_18pt-SemiBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Black.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Black.ttf new file mode 100644 index 0000000..eba4705 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BlackItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BlackItalic.ttf new file mode 100644 index 0000000..6e44d6a Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BlackItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Bold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Bold.ttf new file mode 100644 index 0000000..c1fa8ab Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BoldItalic.ttf new file mode 100644 index 0000000..fd03a9e Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-BoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBold.ttf new file mode 100644 index 0000000..2a1297d Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBoldItalic.ttf new file mode 100644 index 0000000..18ff90f Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-ExtraBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Italic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Italic.ttf new file mode 100644 index 0000000..fc6e85b Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Italic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Medium.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Medium.ttf new file mode 100644 index 0000000..da3c186 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-MediumItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-MediumItalic.ttf new file mode 100644 index 0000000..024c962 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-MediumItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Regular.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Regular.ttf new file mode 100644 index 0000000..469edd3 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBold.ttf new file mode 100644 index 0000000..43849f4 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBoldItalic.ttf new file mode 100644 index 0000000..90cf8c5 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_28pt/BodoniModa_28pt-SemiBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Black.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Black.ttf new file mode 100644 index 0000000..839aae8 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BlackItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BlackItalic.ttf new file mode 100644 index 0000000..79c3ac0 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BlackItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Bold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Bold.ttf new file mode 100644 index 0000000..2da9788 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BoldItalic.ttf new file mode 100644 index 0000000..a819d79 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-BoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBold.ttf new file mode 100644 index 0000000..d44e897 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBoldItalic.ttf new file mode 100644 index 0000000..065496b Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-ExtraBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Italic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Italic.ttf new file mode 100644 index 0000000..011b785 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Italic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Medium.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Medium.ttf new file mode 100644 index 0000000..b452607 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-MediumItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-MediumItalic.ttf new file mode 100644 index 0000000..6adcb7c Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-MediumItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Regular.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Regular.ttf new file mode 100644 index 0000000..591f543 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBold.ttf new file mode 100644 index 0000000..26f1e0f Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBoldItalic.ttf new file mode 100644 index 0000000..1331fbc Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_48pt/BodoniModa_48pt-SemiBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Black.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Black.ttf new file mode 100644 index 0000000..a4afc93 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BlackItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BlackItalic.ttf new file mode 100644 index 0000000..d177644 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BlackItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Bold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Bold.ttf new file mode 100644 index 0000000..6bd141d Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BoldItalic.ttf new file mode 100644 index 0000000..2e3df3d Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-BoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBold.ttf new file mode 100644 index 0000000..0652136 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBoldItalic.ttf new file mode 100644 index 0000000..f0abc45 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-ExtraBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Italic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Italic.ttf new file mode 100644 index 0000000..157066c Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Italic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Medium.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Medium.ttf new file mode 100644 index 0000000..df6c77e Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-MediumItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-MediumItalic.ttf new file mode 100644 index 0000000..487d436 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-MediumItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Regular.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Regular.ttf new file mode 100644 index 0000000..599ef60 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBold.ttf new file mode 100644 index 0000000..637df88 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBoldItalic.ttf new file mode 100644 index 0000000..831a4c5 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_72pt/BodoniModa_72pt-SemiBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Black.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Black.ttf new file mode 100644 index 0000000..157ba8c Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BlackItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BlackItalic.ttf new file mode 100644 index 0000000..ff3e3cf Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BlackItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Bold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Bold.ttf new file mode 100644 index 0000000..cb232c8 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BoldItalic.ttf new file mode 100644 index 0000000..d838ee6 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-BoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBold.ttf new file mode 100644 index 0000000..6d7cd44 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBoldItalic.ttf new file mode 100644 index 0000000..7d3195d Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-ExtraBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Italic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Italic.ttf new file mode 100644 index 0000000..eaf7aaf Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Italic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Medium.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Medium.ttf new file mode 100644 index 0000000..76747c2 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-MediumItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-MediumItalic.ttf new file mode 100644 index 0000000..30e82bd Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-MediumItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Regular.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Regular.ttf new file mode 100644 index 0000000..a85bcac Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBold.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBold.ttf new file mode 100644 index 0000000..510f964 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBoldItalic.ttf b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBoldItalic.ttf new file mode 100644 index 0000000..77f97e9 Binary files /dev/null and b/themes/conspiracy/assets/fonts/bodoni_moda/static/BodoniModa_9pt/BodoniModa_9pt-SemiBoldItalic.ttf differ diff --git a/themes/conspiracy/assets/fonts/manuskript_gothisch/Manuskript Gothisch UNZ1A.ttf b/themes/conspiracy/assets/fonts/manuskript_gothisch/Manuskript Gothisch UNZ1A.ttf new file mode 100644 index 0000000..f90ba01 Binary files /dev/null and b/themes/conspiracy/assets/fonts/manuskript_gothisch/Manuskript Gothisch UNZ1A.ttf differ diff --git a/themes/conspiracy/assets/fonts/manuskript_gothisch/OFL-FAQ.txt b/themes/conspiracy/assets/fonts/manuskript_gothisch/OFL-FAQ.txt new file mode 100644 index 0000000..1b67d59 --- /dev/null +++ b/themes/conspiracy/assets/fonts/manuskript_gothisch/OFL-FAQ.txt @@ -0,0 +1,242 @@ +Eine kurze deutsche Zusammenfassung der OFL finden Sie auf: +http://de.wikipedia.org/wiki/SIL_Open_Font_License + + + +OFL FAQ - Frequently Asked Questions about the SIL Open Font License (OFL) +Version 1.1-update1 - 31 March 2009 +(See http://scripts.sil.org/OFL for updates) + + +1 ABOUT USING AND DISTRIBUTING FONTS LICENSED UNDER THE OFL + +1.1 Can I use the fonts in any publication, even embedded in the file? +Yes. You may use them like most other fonts, but unlike some fonts you may include an embedded subset of the fonts in your document. Such use does not require you to include this license or other files (listed in OFL condition 2), nor does it require any type of acknowledgement within the publication. Some mention of the font name within the publication information (such as in a colophon) is usually appreciated. If you wish to include the complete font as a separate file, you should distribute the full font package, including all existing acknowledgements, and comply with the OFL conditions. Of course, referencing or embedding an OFL font in any document does not change the license of the document itself. The requirement for fonts to remain under the OFL does not apply to any document created using the fonts and their derivatives. Similarly, creating any kind of graphic using a font under OFL does not make the resulting artwork subject to the OFL. + +1.2 Can I make web pages using these fonts? +Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. Direct usage of fonts retrieved from a remote server - also referred to as font linking - using cross-platform open standards like @font-face is encouraged. This is considered to be use and distribution for which the OFL explicitly grants permission. The font file itself is not embedded in the webpage but referenced through a web address (i.e. a URI regardless of file format or access protocol) which will cause the browser to retrieve and use the corresponding font to render the webpage. This usage scenario is different from font embedding within a document (i.e. a PDF) where the font or some of its elements become part of the document. Note that embedding in a document is also permitted by the license as indicated in 1.1. (See 1.10 for details related to URL-based access restrictions methods or DRM mechanisms). + +1.3 Can I make the fonts available to others from my web site? +Yes, as long as you meet the conditions of the license (do not sell by itself, include the necessary files, include the necessary copyright and license information, rename Modified Versions, do not abuse the Author(s)' name(s) and do not sublicense). In the case where you are hosting fonts to be served on the web, make sure the file contains the needed copyright notice(s) and licensing information in its metadata. Please double-check the accuracy of every field to prevent contradictory information. If you are making the font available for use via the @font-face open standard, putting this information in the standard font metadata fields is sufficient. Other font formats, including EOT and proposed superior alternatives, already provide fields for this information. + +1.4 Can the fonts be included with Free/Libre and Open Source Software collections such as GNU/Linux and BSD distributions? +Yes! Fonts licensed under the OFL can be freely aggregated with software under FLOSS (Free/Libre and Open Source Software) licenses. Since fonts are much more useful aggregated to than merged with existing software, possible incompatibility with existing software licenses is not a problem. You can also repackage the fonts and the accompanying components in a .rpm or .deb package and include them in distro CD/DVDs and online repositories. + +1.5 I want to distribute the fonts with my program. Does this mean my program also has to be free/libre and open source software? +No. Only the portions based on the Font Software are required to be released under the OFL. The intent of the license is to allow aggregation or bundling with software under restricted licensing as well. + +1.6 Can I include the fonts on a CD of freeware or commercial fonts? +Yes, as long some other font or software is also on the disk, so the OFL font is not sold by itself. + +1.7 Can I sell a software package that includes these fonts? +Yes, you can do this with both the Original Version and a Modified Version. Examples of bundling made possible by the OFL would include: word processors, design and publishing applications, training and educational software, edutainment software, etc. + +1.8 Why won't the OFL let me sell the fonts alone? +The intent is to keep people from making money by simply redistributing the fonts. The only people who ought to profit directly from the fonts should be the original authors, and those authors have kindly given up potential direct income to distribute their fonts under the OFL. Please honor and respect their contribution! + +1.9 I've come across a font released under the OFL. How can I easily get more information about the Original Version? How can I know where it stands compared to the Original Version or other Modified Versions? +Consult the copyright statement(s) in the license for ways to contact the original authors. Consult the FONTLOG for information on how the font differs from the Original Version, and get in touch with the various contributors via the information in the acknowledgment section. Please consider using the Original Versions of the fonts whenever possible. + +1.10 What do you mean in condition 4? Can you provide examples of abusive promotion / endorsement / advertisement vs. normal acknowledgement? +The intent is that the goodwill and reputation of the author(s) should not be used in a way that makes it sound like the original author(s) endorse or approve of a specific Modified Version or software bundle. For example, it would not be right to advertise a word processor by naming the author(s) in a listing of software features, or to promote a Modified Version on a web site by saying "designed by ...". However, it would be appropriate to acknowledge the author(s) if your software package has a list of people who deserve thanks. We realize that this can seem to be a gray area, but the standard used to judge an acknowledgement is that if the acknowledgement benefits the author(s) it is allowed, but if it primarily benefits other parties, or could reflect poorly on the author(s), then it is not. + +1.11 Can Font Software released under the OFL be subject to URL-based access restrictions methods or DRM mechanisms? +Yes, but these issues are out-of-scope for the OFL. The license itself neither encourages their use nor prohibits them since such mechanisms are not implemented in the components of the Font Software but through external software. Such restrictions are put in place for many different purposes corresponding to various usage scenarios. One common example is to limit potentially dangerous cross-site scripting attacks. However, in the spirit of libre/open fonts and unrestricted writing systems, we strongly encourage open sharing and reuse of OFL fonts, and the establishment of an environment where such restrictions are unnecessary. Note that whether you wish to use such mechanisms or you prefer not to, you must still abide by the rules set forth by the OFL when using fonts released by their authors under this license. Derivative fonts must be licensed under the OFL, even if they are part of a service for which you charge fees and/or for which access to source code is restricted. You may not sell the fonts on their own - they must be part of a larger software package or bundle. For example, even if the OFL font is distributed in a software package or via an online service using a DRM mechanism, the user would still have the right to extract that font, use, study, modify and redistribute it under the OFL. + +1.12 What about distributing fonts with a document? Within a compressed folder structure like an OpenDocument file (.odt) for example? Is it redistribution, bundling or embedding? +The vast majority of the time, documents circulated in electronic form reference a font name which will match the corresponding font on the target system but do not carry the font within themselves. There may, however, be some cases where you need to bundle a font with the document. Certain document formats may allow the inclusion of an unmodified font within their file structure which consists of a compressed folder containing the various resources forming the document (such as pictures and thumbnails). Including fonts within such a structure is understood as being different from embedding but rather similar to bundling (or mere aggregation) for which the licensing makes explicit provision. In this case the font is conveyed unchanged whereas embedding a font transforms it from the original format. The OFL does not allow anyone to extract the font from such a structure to then redistribute it under another license. The explicit permission to redistribute and embed does not cancel the requirement for the Font Software to remain under the license chosen by its Author(s). + +1.13 If OFL fonts are extracted from a document in which they are embedded (such as a PDF file), what can be done with them? Is this a risk to Author(s)? +The few utilities that can extract fonts embedded in a PDF will only output limited amounts of outlines - not a complete font. To create a working font from this method is much more difficult than finding the source of the original OFL font. So there is little chance that an OFL font would be extracted and redistributed inappropriately through this method. Even so, copyright laws address any misrepresentation of authorship. All Font Software released under the OFL and marked as such by the Author(s) is intended to remain under this license regardless of the distribution method, and cannot be redistributed under any other license. We strongly discourage any font extraction - we recommend directly using the font sources instead - but if you extract font outlines from a document please be considerate, use your common sense and respect the work of the Author(s) and the licensing model. + +1.14 What about sharing OFL fonts with friends on a CD, DVD or USB stick? +You are very welcome to share open fonts with friends, family and colleagues on such removable media. Please make sure that you share and share-alike as much as possible from what the Author(s) released and that you don't strip away useful information which may not be present in the binary font files themselves. Just remember that in the case where you sell the font, it has to come bundled with software. + + +2 ABOUT MODIFYING OFL LICENSED FONTS + +2.1 Can I change the fonts? Are there any limitations to what things I can and cannot change? +You are allowed to change anything, as long as such changes do not violate the terms of the license. In other words, you are not allowed to remove the copyright statement(s) from the font, but you could add additional information into it that covers your contribution. + +2.2 I have a font that needs a few extra glyphs - can I take them from an OFL licensed font and copy them into mine? +Yes, but if you distribute that font to others it must be under the OFL, and include the information mentioned in condition 2 of the license. + +2.3 Can I charge people for my additional work? In other words, if I add a bunch of special glyphs and/or OpenType/Graphite code, can I sell the enhanced font? +Not by itself. Derivative fonts must be released under the OFL and cannot be sold by themselves. It is permitted, however, to include them in a larger software package (such as text editors, office suites or operating systems), even if the larger package is sold. In that case, you are strongly encouraged, but not required, to also make that derived font easily and freely available outside of the larger package. + +2.4 Can I pay someone to enhance the fonts for my use and distribution? +Yes. This is a good way to fund the further development of the fonts. Keep in mind, however, that if the font is distributed to others it must be under the OFL. You won't be able to recover your investment by exclusively selling the font, but you will be making a valuable contribution to the community. Please remember how you have benefitted from the contributions of others. + +2.5 I need to make substantial revisions to the font to make it work with my program. It will be a lot of work, and a big investment, and I want to be sure that it can only be distributed with my program. Can I restrict its use? +No. If you redistribute a Modified Version of the font it must be under the OFL. You may not restrict it in any way. This is intended to ensure that all released improvements to the fonts become available to everyone. But you will likely get an edge over competitors by being the first to distribute a bundle with the enhancements. Again, please remember how you have benefitted from the contributions of others. + +2.6 Do I have to make any derivative fonts (including extended source files, build scripts, documentation, etc.) publicly available? +No, but please do share your improvements with others. You may find that you receive more than what you gave in return. + +2.7 Why can't I use the Reserved Font Name(s) in my derivative font names? I'd like people to know where the design came from. +The best way to acknowledge the source of the design is to thank the original authors and any other contributors in the files that are distributed with your revised font (although no acknowledgement is required). The FONTLOG is a natural place to do this. Reserved Font Name(s) ensure that the only fonts that have the original names are the unmodified Original Versions. This allows designers to maintain artistic integrity while allowing collaboration to happen. It eliminates potential confusion and name conflicts. When choosing a name be creative and avoid names that reuse almost all the same letters in the same order or sound like the original. Keep in mind that the Copyright Holder(s) can allow a specific trusted partner to use Reserved Font Name(s) through a separate written agreement. + +2.8 What do you mean by "primary name as presented to the user"? Are you referring to the font menu name? +Yes, the requirement to change the visible name used to differentiate the font from others applies to the font menu name and other mechanisms to specify a font in a document. It would be fine, for example, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement; see section 2.7). Users who install derivatives ("Modified Versions") on their systems should not see any of the original names ("Reserved Font Names") in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake a font for another and so expect features only another derivative or the Original Version can actually offer. Ultimately, creating name conflicts will cause many problems for the users as well as for the designer of both the Original and Modified versions, so please think ahead and find a good name for your own derivative. Font substitution systems like fontconfig, or application-level font fallback configuration within OpenOffice.org or Scribus, will also get very confused if the name of the font they are configured to substitute to actually refers to another physical font on the user's hard drive. It will help everyone if Original Versions and Modified Versions can easily be distinguished from one another and from other derivatives. The substitution mechanism itself is outside the scope of the license. Users can always manually change a font reference in a document or set up some kind of substitution at a higher level but at the lower level the fonts themselves have to respect the Reserved Font Name(s) requirement to prevent ambiguity. If a substitution is currently active the user should be aware of it. + +2.9 Am I not allowed to use any part of the Reserved Font Names? +You may not use the words of the font names, but you would be allowed to use parts of words, as long as you do not use any word from the Reserved Font Names entirely. We do not recommend using parts of words because of potential confusion, but it is allowed. For example, if "Foobar" was a Reserved Font Name, you would be allowed to use "Foo" or "bar", although we would not recommend it. Such an unfortunate choice would confuse the users of your fonts as well as make it harder for other designers to contribute. + +2.10 So what should I, as an author, identify as Reserved Font Names? +Original authors are encouraged to name their fonts using clear, distinct names, and only declare the unique parts of the name as Reserved Font Names. For example, the author of a font called "Foobar Sans" would declare "Foobar" as a Reserved Font Name, but not "Sans", as that is a common typographical term, and may be a useful word to use in a derivative font name. Reserved Font Names should also be single words. A font called "Flowing River" should have Reserved Font Names "Flowing" and "River", not "Flowing River". + +2.11 Do I, as an author, have to identify any Reserved Font Names? +No, but we strongly encourage you to do so. This is to avoid confusion between your work and Modified versions. You may, however, give certain trusted parties the right to use any of your Reserved Font Names through separate written agreements. For example, even if "Foobar" is a RFN, you could write up an agreement to give company "XYZ" the right to distribute a modified version with a name that includes "Foobar". This allows for freedom without confusion. + +2.12 Are any names (such as the main font name) reserved by default? +No. That is a change to the license as of version 1.1. If you want any names to be Reserved Font Names, they must be specified after the copyright statement(s). + +2.13 What is this FONTLOG thing exactly? +It has three purposes: 1) to provide basic information on the font to users and other developers, 2) to document changes that have been made to the font or accompanying files, either by the original authors or others, and 3) to provide a place to acknowledge the authors and other contributors. Please use it! See below for details on how changes should be noted. + +2.14 Am I required to update the FONTLOG? +No, but users, designers and other developers might get very frustrated at you if you don't! People need to know how derivative fonts differ from the original, and how to take advantage of the changes, or build on them. + + +3 ABOUT THE FONTLOG + +The FONTLOG can take a variety of formats, but should include these four sections: + +3.1 FONTLOG for +This file provides detailed information on the Font Software. This information should be distributed along with the fonts and any derivative works. + +3.2 Basic Font Information +(Here is where you would describe the purpose and brief specifications for the font project, and where users can find more detailed documentation. It can also include references to how changes can be contributed back to the Original Version. You may also wish to include a short guide to the design, or a reference to such a document.) + +3.3 ChangeLog +(This should list both major and minor changes, most recent first. Here are some examples:) + +7 February 2007 (Pat Johnson) Version 1.3 +- Added Greek and Cyrillic glyphs +- Released as "" + +7 March 2006 (Fred Foobar) Version 1.2 +- Tweaked contextual behaviours +- Released as "" + +1 Feb 2005 (Jane Doe) Version 1.1 +- Improved build script performance and verbosity +- Extended the smart code documentation +- Corrected minor typos in the documentation +- Fixed position of combining inverted breve below (U+032F) +- Added OpenType/Graphite smart code for Armenian +- Added Armenian glyphs (U+0531 -> U+0587) +- Released as "" + +1 Jan 2005 (Joe Smith) Version 1.0 +- Initial release of font "" + +3.4 Acknowledgements +(Here is where contributors can be acknowledged. + +If you make modifications be sure to add your name (N), email (E), web-address (W) and description (D). This list is sorted by last name in alphabetical order.) + +N: Jane Doe +E: jane@university.edu +W: http://art.university.edu/projects/fonts +D: Contributor - Armenian glyphs and code + +N: Fred Foobar +E: fred@foobar.org +W: http://foobar.org +D: Contributor - misc Graphite fixes + +N: Pat Johnson +E: pat@fontstudio.org +W: http://pat.fontstudio.org +D: Designer - Greek & Cyrillic glyphs based on Roman design + +N: Tom Parker +E: tom@company.com +W: http://www.company.com/tom/projects/fonts +D: Engineer - original smart font code + +N: Joe Smith +E: joe@fontstudio.org +W: http://joe.fontstudio.org +D: Designer - original Roman glyphs + +(Original authors can also include information here about their organization.) + + +4 ABOUT MAKING CONTRIBUTIONS + +4.1 Why should I contribute my changes back to the original authors? +It would benefit many people if you contributed back to what you've received. Providing your contributions and improvements to the fonts and other components (data files, source code, build scripts, documentation, etc.) could be a tremendous help and would encourage others to contribute as well and 'give back', which means you will have an opportunity to benefit from other people's contributions as well. Sometimes maintaining your own separate version takes more effort than merging back with the original. Be aware that any contributions, however, must be either your own original creation or work that you own, and you may be asked to affirm that clearly when you contribute. + +4.2 I've made some very nice improvements to the font, will you consider adopting them and putting them into future Original Versions? +Most authors would be very happy to receive such contributions. Keep in mind that it is unlikely that they would want to incorporate major changes that would require additional work on their end. Any contributions would likely need to be made for all the fonts in a family and match the overall design and style. Authors are encouraged to include a guide to the design with the fonts. It would also help to have contributions submitted as patches or clearly marked changes (the use of smart source revision control systems like subversion, svk, mercurial, git or bzr is a good idea). Examples of useful contributions are bug fixes, additional glyphs, stylistic alternates (and the smart font code to access them) or improved hinting. + +4.3 How can I financially support the development of OFL fonts? +It is likely that most authors of OFL fonts would accept financial contributions - contact them for instructions on how to do this. Such contributions would support future development. You can also pay for others to enhance the fonts and contribute the results back to the original authors for inclusion in the Original Version. + +(In case of the font, that comes with this copy of the FAQ-file, you will find a paypal(tm) donation link on the fonts-page of www.peter-wiegel.de) + + +5 ABOUT THE LICENSE + +5.1 I see that this is version 1.1 of the license. Will there be later changes? +Version 1.1 is the first minor revision of the OFL. We are confident that version 1.1 will meet most needs, but are open to future improvements. Any revisions would be for future font releases, and previously existing licenses would remain in effect. No retroactive changes are possible, although the Copyright Holder(s) can re-release the font under a revised OFL. All versions will be available on our web site: http://scripts.sil.org/OFL. + +5.2 Can I use the SIL Open Font License for my own fonts? +Yes! We heartily encourage anyone to use the OFL to distribute their own original fonts. It is a carefully constructed license that allows great freedom along with enough artistic integrity protection for the work of the authors as well as clear rules for other contributors and those who redistribute the fonts. Some additional information about using the OFL is included at the end of this FAQ. + +5.3 Does this license restrict the rights of the Copyright Holder(s)? +No. The Copyright Holder(s) still retain(s) all the rights to their creation; they are only releasing a portion of it for use in a specific way. For example, the Copyright Holder(s) may choose to release a 'basic' version of their font under the OFL, but sell a restricted 'enhanced' version. Only the Copyright Holder(s) can do this. + +5.4 Is the OFL a contract or a license? +The OFL is a license and not a contract and so does not require you to sign it to have legal validity. By using, modifying and redistributing components under the OFL you indicate that you accept the license. + +5.5 How about translating the license and the FAQ into other languages? +SIL certainly recognises the need for people who are not familiar with English to be able to understand the OFL and this FAQ better in their own language. Making the license very clear and readable is a key goal of the OFL. + +If you are an experienced translator, you are very welcome to help by translating the OFL and its FAQ so that designers and users in your language community can understand the license better. But only the original English version of the license has legal value and has been approved by the community. Translations do not count as legal substitutes and should only serve as a way to explain the original license. SIL - as the author and steward of the license for the community at large - does not approve any translation of the OFL as legally valid because even small translation ambiguities could be abused and create problems. + +We give permission to publish unofficial translations into other languages provided that they comply with the following guidelines: + +- put the following disclaimer in both English and the target language stating clearly that the translation is unofficial: + +"This is an unofficial translation of the SIL Open Font License into $language. It was not published by SIL International, and does not legally state the distribution terms for fonts that use the OFL. A release under the OFL is only valid when using the original English text. + +However, we recognize that this unofficial translation will help users and designers not familiar with English to understand the SIL OFL better and make it easier to use and release font families under this collaborative font design model. We encourage designers who consider releasing their creation under the OFL to read the FAQ in their own language if it is available. + +Please go to http://scripts.sil.org/OFL for the official version of the license and the accompanying FAQ." + +- keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion. + +If you start such a unofficial translation effort of the OFL and its accompanying FAQ please let us know, thank you. + + +6 ABOUT SIL INTERNATIONAL + +6.1 Who is SIL International and what does it do? +SIL International is a worldwide faith-based education and development organization (NGO) that studies, documents, and assists in developing the world's lesser-known languages through literacy, linguistics, translation, and other academic disciplines. SIL makes its services available to all without regard to religious belief, political ideology, gender, race, or ethnic background. SIL's members and volunteers share a Christian commitment. + +6.2 What does this have to do with font licensing? +The ability to read, write, type and publish in one's own language is one of the most critical needs for millions of people around the world. This requires fonts that are widely available and support lesser-known languages. SIL develops - and encourages others to develop - a complete stack of writing systems implementation components available under open licenses. This open stack includes input methods, smart fonts, smart rendering libraries and smart applications. There has been a need for a common open license that is specifically applicable to fonts and related software (a crucial component of this stack) so SIL developed the SIL Open Font License with the help of the FLOSS community. + +6.3 How can I contact SIL? +Our main web site is: http://www.sil.org/ +Our site about complex scripts is: http://scripts.sil.org/ +Information about this license (including contact email information) is at: http://scripts.sil.org/OFL + + +7 ABOUT USING THE OFL FOR YOUR ORIGINAL FONTS + +If you want to release your fonts under the OFL, you only need to do the following: + +7.1 Put your copyright and reserved font names information in the beginning of the main OFL file (simply use the dedicated placeholders). +7.2 Put your copyright and the OFL references in your various font files (such as in the copyright, license and description fields) and in your other components (build scripts, glyph databases, documentation, rendering samples, etc). Accurate metadata in your font files is beneficial to you as an increasing number of applications are exposing this information to the user. For example, clickable links can bring users back to your website and let them know about other work you have done or services you provide. Depending on the format of your fonts and sources, you can use template human-readable headers or machine-readable metadata. +7.3 Write an initial FONTLOG for your font and include it in the release package. +7.4 Include the OFL license file in your release package. +7.5 We also highly recommend you include the relevant practical documentation on the license by putting the OFL-FAQ in your package. +7.6 If you wish, you can use the OFL Graphics on your web page. + +That's all. If you have any more questions please get in touch with us. + + diff --git a/themes/conspiracy/assets/fonts/manuskript_gothisch/Open Font License.txt b/themes/conspiracy/assets/fonts/manuskript_gothisch/Open Font License.txt new file mode 100644 index 0000000..71d47ee --- /dev/null +++ b/themes/conspiracy/assets/fonts/manuskript_gothisch/Open Font License.txt @@ -0,0 +1,95 @@ +Copyright (c) 2013, Peter Wiegel, www.peter-wiegel.de, wiegel@peter-wiegel.de +with Reserved Font Name Manuskript Gothisch + + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/themes/conspiracy/assets/fonts/manuskript_gothisch/download.txt b/themes/conspiracy/assets/fonts/manuskript_gothisch/download.txt new file mode 100644 index 0000000..0fa3517 --- /dev/null +++ b/themes/conspiracy/assets/fonts/manuskript_gothisch/download.txt @@ -0,0 +1,2 @@ +Downloaded from: https://www.dafont.com/manuskript-gothisch.font +License included in download: OFL diff --git a/themes/conspiracy/assets/fonts/roboto_slab/LICENSE.txt b/themes/conspiracy/assets/fonts/roboto_slab/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/themes/conspiracy/assets/fonts/roboto_slab/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/themes/conspiracy/assets/fonts/roboto_slab/README.txt b/themes/conspiracy/assets/fonts/roboto_slab/README.txt new file mode 100644 index 0000000..091e21f --- /dev/null +++ b/themes/conspiracy/assets/fonts/roboto_slab/README.txt @@ -0,0 +1,71 @@ +Roboto Slab Variable Font +========================= + +This download contains Roboto Slab as both a variable font and static fonts. + +Roboto Slab is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + RobotoSlab-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Roboto Slab: + static/RobotoSlab-Thin.ttf + static/RobotoSlab-ExtraLight.ttf + static/RobotoSlab-Light.ttf + static/RobotoSlab-Regular.ttf + static/RobotoSlab-Medium.ttf + static/RobotoSlab-SemiBold.ttf + static/RobotoSlab-Bold.ttf + static/RobotoSlab-ExtraBold.ttf + static/RobotoSlab-Black.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (LICENSE.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/themes/conspiracy/assets/fonts/roboto_slab/RobotoSlab-VariableFont_wght.ttf b/themes/conspiracy/assets/fonts/roboto_slab/RobotoSlab-VariableFont_wght.ttf new file mode 100644 index 0000000..c7204ce Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/RobotoSlab-VariableFont_wght.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Black.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Black.ttf new file mode 100644 index 0000000..0c57d86 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Black.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Bold.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Bold.ttf new file mode 100644 index 0000000..596898c Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Bold.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraBold.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraBold.ttf new file mode 100644 index 0000000..e8dd4f9 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraLight.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraLight.ttf new file mode 100644 index 0000000..b152888 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-ExtraLight.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Light.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Light.ttf new file mode 100644 index 0000000..1c204ae Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Light.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Medium.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Medium.ttf new file mode 100644 index 0000000..50657b8 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Medium.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Regular.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Regular.ttf new file mode 100644 index 0000000..cf612b8 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Regular.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-SemiBold.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-SemiBold.ttf new file mode 100644 index 0000000..644abc4 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-SemiBold.ttf differ diff --git a/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Thin.ttf b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Thin.ttf new file mode 100644 index 0000000..3e7d3d3 Binary files /dev/null and b/themes/conspiracy/assets/fonts/roboto_slab/static/RobotoSlab-Thin.ttf differ diff --git a/themes/conspiracy/layouts/404.html b/themes/conspiracy/layouts/404.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/conspiracy/layouts/_default/baseof.html b/themes/conspiracy/layouts/_default/baseof.html new file mode 100644 index 0000000..c4963da --- /dev/null +++ b/themes/conspiracy/layouts/_default/baseof.html @@ -0,0 +1,9 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} + {{- block "main" . }}{{- end }} + {{- partial "footer.html" . -}} + + diff --git a/themes/conspiracy/layouts/_default/list.html b/themes/conspiracy/layouts/_default/list.html new file mode 100644 index 0000000..02703b4 --- /dev/null +++ b/themes/conspiracy/layouts/_default/list.html @@ -0,0 +1,18 @@ +{{- define "main" }} + {{- if not .IsHome | and .Title }} +
+

{{ .Title }}

+ {{- partial "breadcrumbs.html" . }} +
+ {{- end }} +
+ {{- if .Content }} +
+ {{ .Content }} +
+ {{- end }} + {{- range .Pages }} + {{ partial "card.html" . }} + {{- end }} +
+{{- end }} diff --git a/themes/conspiracy/layouts/_default/single.html b/themes/conspiracy/layouts/_default/single.html new file mode 100644 index 0000000..9f3ff8d --- /dev/null +++ b/themes/conspiracy/layouts/_default/single.html @@ -0,0 +1,12 @@ +{{- define "main" }} + {{- if not .IsHome | and .Title }} +
+

{{ .Title }}

+ {{- partial "breadcrumbs.html" . }} + {{- if .Params.Date }} {{ .Date.Format "2006-01-02" }}{{- end }} +
+ {{- end }} +
+ {{ .Content }} +
+{{- end }} diff --git a/themes/conspiracy/layouts/index.html b/themes/conspiracy/layouts/index.html new file mode 100644 index 0000000..28b5cc5 --- /dev/null +++ b/themes/conspiracy/layouts/index.html @@ -0,0 +1,22 @@ +{{- define "main" }} +
+

{{ .Title }}

+
+
+ {{- if .Content }} +
+ {{ .Content }} +
+ {{- end }} + +

Recently updated projects

+ {{ range first 2 (where site.RegularPages "Section" "==" "projects") }} + {{ partial "card.html" . }} + {{- end }} + +

Blog

+ {{ range (where site.RegularPages "Section" "==" "blog") }} + {{ partial "card.html" . }} + {{- end }} +
+{{- end }} diff --git a/themes/conspiracy/layouts/partials/breadcrumbs.html b/themes/conspiracy/layouts/partials/breadcrumbs.html new file mode 100644 index 0000000..ff82e73 --- /dev/null +++ b/themes/conspiracy/layouts/partials/breadcrumbs.html @@ -0,0 +1,7 @@ +{{/* https://github.com/adityatelange/hugo-PaperMod/blob/master/layouts/partials/breadcrumbs.html */}} + diff --git a/themes/conspiracy/layouts/partials/card.html b/themes/conspiracy/layouts/partials/card.html new file mode 100644 index 0000000..167a9d5 --- /dev/null +++ b/themes/conspiracy/layouts/partials/card.html @@ -0,0 +1,17 @@ +
+ {{- if .Title }}

{{ .Title }}

{{- end }} + {{- if .Date }}{{ .Date.Format "2006-01-02" }}{{- end }} + +
+ {{ .Summary | safeHTML }} + Read more +
+ + {{- if .Params.external_links }} + + {{- end }} +
diff --git a/themes/conspiracy/layouts/partials/footer.html b/themes/conspiracy/layouts/partials/footer.html new file mode 100644 index 0000000..6071d43 --- /dev/null +++ b/themes/conspiracy/layouts/partials/footer.html @@ -0,0 +1,6 @@ +
+ Copyright © {{ now.Year }} {{ site.Copyright }} + {{- range site.Params.footer_links }} + / {{ .name }} + {{- end }} +
diff --git a/themes/conspiracy/layouts/partials/head.html b/themes/conspiracy/layouts/partials/head.html new file mode 100644 index 0000000..1196d00 --- /dev/null +++ b/themes/conspiracy/layouts/partials/head.html @@ -0,0 +1,10 @@ + + + {{ if .IsHome }}{{ else }}{{ if .Title }}{{ .Title }} | {{ end }}{{ end }}{{ site.Title }} + + + + + {{- $stylesheet := resources.Get "css/style.css" | resources.ExecuteAsTemplate "style.css" . }} + + diff --git a/themes/conspiracy/layouts/partials/header.html b/themes/conspiracy/layouts/partials/header.html new file mode 100644 index 0000000..675f899 --- /dev/null +++ b/themes/conspiracy/layouts/partials/header.html @@ -0,0 +1,17 @@ + diff --git a/themes/conspiracy/theme.toml b/themes/conspiracy/theme.toml new file mode 100644 index 0000000..dbae125 --- /dev/null +++ b/themes/conspiracy/theme.toml @@ -0,0 +1,21 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Conspiracy" +license = "MIT" +licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE" +description = "" +homepage = "http://example.com/" +tags = [] +features = [] +min_version = "0.41.0" + +[author] + name = "" + homepage = "" + +# If porting an existing theme +[original] + name = "" + homepage = "" + repo = ""