<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ali Oğuzhan Yıldız</title>
    <description>The latest articles on Forem by Ali Oğuzhan Yıldız (@alioguzhan).</description>
    <link>https://forem.com/alioguzhan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F14330%2F437978f3-c253-4439-a19c-791747fc69f0.jpeg</url>
      <title>Forem: Ali Oğuzhan Yıldız</title>
      <link>https://forem.com/alioguzhan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alioguzhan"/>
    <language>en</language>
    <item>
      <title>Packing Custom Fonts for NixOS</title>
      <dc:creator>Ali Oğuzhan Yıldız</dc:creator>
      <pubDate>Sun, 04 Aug 2024 18:04:00 +0000</pubDate>
      <link>https://forem.com/alioguzhan/packing-custom-fonts-for-nixos-216n</link>
      <guid>https://forem.com/alioguzhan/packing-custom-fonts-for-nixos-216n</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://yildiz.dev/posts/packing-custom-fonts-for-nixos/" rel="noopener noreferrer"&gt;yildiz.dev&lt;/a&gt; on April 5, 2024.&lt;/p&gt;

&lt;p&gt;I have been using &lt;a href="https://nixos.org" rel="noopener noreferrer"&gt;NixOS&lt;/a&gt; for a long time. And I am very happy with it. It is very stable and easy to configure.&lt;/p&gt;

&lt;p&gt;With NixOS, installing and configuring famous and open-source fonts is already very straightforward. Here is my font configuration in &lt;code&gt;configuration.nix&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="nv"&gt;fonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;fontDir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;enableGhostscriptFonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kn"&gt;with&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nv"&gt;cantarell-fonts&lt;/span&gt;
      &lt;span class="nv"&gt;hack-font&lt;/span&gt;
      &lt;span class="nv"&gt;inter&lt;/span&gt;
      &lt;span class="nv"&gt;jetbrains-mono&lt;/span&gt;
      &lt;span class="nv"&gt;liberation_ttf&lt;/span&gt;
      &lt;span class="nv"&gt;monaspace&lt;/span&gt;
      &lt;span class="nv"&gt;noto-fonts&lt;/span&gt;
      &lt;span class="nv"&gt;ubuntu_font_family&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;nerdfonts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;override&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;fonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"FiraCode"&lt;/span&gt; &lt;span class="s2"&gt;"DroidSansMono"&lt;/span&gt; &lt;span class="s2"&gt;"JetBrainsMono"&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Things get a little bit complicated when you want to use a custom or any commercial font that is not available in Nix packages. I am using &lt;a href="https://berkeleygraphics.com/typefaces/berkeley-mono" rel="noopener noreferrer"&gt;Berkeley Mono&lt;/a&gt;. It is a great font for both the editor and the terminal. And here is how I packed it for NixOS:&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding the Font to the NixOS Configuration
&lt;/h2&gt;

&lt;p&gt;We need to add the font to our NixOS configuration so it will be installed and available after the build.&lt;/p&gt;

&lt;p&gt;There are a few ways to do this. You can zip your font and add it to your config repository. Or you can serve the font files from&lt;br&gt;
a web server with some credentials. Since my config repo is not public, I am using the first option. Here is how I did it:&lt;/p&gt;

&lt;p&gt;First, create a derivation for our font:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# make a  derivation for berkeley-mono font installation&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;

&lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;stdenv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mkDerivation&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;pname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"berkeley-mono-typeface"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1.009"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nv"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sx"&gt;../../assets/berkeley-mono.zip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nv"&gt;unpackPhase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    runHook preUnpack&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;unzip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin/unzip $src&lt;/span&gt;&lt;span class="err"&gt;

&lt;/span&gt;&lt;span class="s2"&gt;    runHook postUnpack&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;  ''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nv"&gt;installPhase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    runHook preInstall&lt;/span&gt;&lt;span class="err"&gt;

&lt;/span&gt;&lt;span class="s2"&gt;    install -Dm644 berkeley-mono-patched/*.ttf -t $out/share/fonts/truetype&lt;/span&gt;&lt;span class="err"&gt;

&lt;/span&gt;&lt;span class="s2"&gt;    runHook postInstall&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;  ''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that &lt;code&gt;src&lt;/code&gt; part. It points to the zip file, which I put under the &lt;code&gt;assets&lt;/code&gt; directory in my config repository.&lt;/p&gt;

&lt;p&gt;I save this file as &lt;code&gt;berkeley-mono-typeface.nix&lt;/code&gt; under the &lt;code&gt;packages&lt;/code&gt; directory alongside my other custom packages.&lt;/p&gt;

&lt;p&gt;Now we need to access this package from our &lt;code&gt;configuration.nix&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;berkeley-mono-typeface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;callPackage&lt;/span&gt; &lt;span class="sx"&gt;./packages/berkeley-mono-typeface&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
&lt;span class="c"&gt;# other configurations&lt;/span&gt;
&lt;span class="c"&gt;# ....&lt;/span&gt;

&lt;span class="nv"&gt;fonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;fontDir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;enableGhostscriptFonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kn"&gt;with&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nv"&gt;cantarell-fonts&lt;/span&gt;
      &lt;span class="nv"&gt;hack-font&lt;/span&gt;
      &lt;span class="nv"&gt;inter&lt;/span&gt;
      &lt;span class="nv"&gt;jetbrains-mono&lt;/span&gt;
      &lt;span class="nv"&gt;liberation_ttf&lt;/span&gt;
      &lt;span class="nv"&gt;monaspace&lt;/span&gt;
      &lt;span class="nv"&gt;noto-fonts&lt;/span&gt;
      &lt;span class="nv"&gt;ubuntu_font_family&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;nerdfonts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;override&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;fonts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"FiraCode"&lt;/span&gt; &lt;span class="s2"&gt;"DroidSansMono"&lt;/span&gt; &lt;span class="s2"&gt;"JetBrainsMono"&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="nv"&gt;berkeley-mono-typeface&lt;/span&gt; &lt;span class="c"&gt;# It is here!&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it. Now rebuild your NixOS and you should be able to use your font.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Patching the Font
&lt;/h2&gt;

&lt;p&gt;Specifically, Berkeley Mono provides very few glyphs. To have all those fancy icons and symbols used in your editors and terminal, we&lt;br&gt;
need to patch the font. Thankfully, it is very easy to patch the font with &lt;a href="https://github.com/ryanoasis/nerd-fonts?tab=readme-ov-file#font-patcher" rel="noopener noreferrer"&gt;Nerd Font Patcher&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; ./berkeley-mono:/in:Z &lt;span class="nt"&gt;-v&lt;/span&gt; ./berkeley-mono-patched:/out:Z nerdfonts/patcher &lt;span class="nt"&gt;--mono&lt;/span&gt; &lt;span class="nt"&gt;--adjust-line-height&lt;/span&gt; &lt;span class="nt"&gt;--progressbars&lt;/span&gt; &lt;span class="nt"&gt;--complete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assuming your &lt;code&gt;berkeley-mono&lt;/code&gt; directory, which contains the &lt;code&gt;TTF&lt;/code&gt; and &lt;code&gt;OTF&lt;/code&gt; folders, this command will patch the fonts&lt;br&gt;
and put them into the &lt;code&gt;berkeley-mono-patched&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;If you also want to patch your font before using it on your system, you can tweak the above command and use it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;With the above patch command, our font will be available with the name &lt;code&gt;BerkeleyMono Nerd Font Mono&lt;/code&gt;. So you need to use this name when you want to use it in your editor or terminal. If you remove the &lt;code&gt;--mono&lt;/code&gt; flag, then it will be &lt;code&gt;BerkeleyMono Nerd Font&lt;/code&gt;. You get the idea.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enjoy your new font!&lt;/p&gt;

</description>
      <category>nixos</category>
      <category>fonts</category>
      <category>nix</category>
      <category>berkeleymono</category>
    </item>
    <item>
      <title>React Typescript Library Template</title>
      <dc:creator>Ali Oğuzhan Yıldız</dc:creator>
      <pubDate>Sat, 29 Feb 2020 21:18:40 +0000</pubDate>
      <link>https://forem.com/alioguzhan/react-typescript-library-template-2b24</link>
      <guid>https://forem.com/alioguzhan/react-typescript-library-template-2b24</guid>
      <description>&lt;p&gt;Hey dev.to, &lt;/p&gt;

&lt;p&gt;I just published a template repository at Github to start a React library with Typescript. Any kind of feedback and PR are welcome! Thanks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alioguzhan/react-typescript-library" rel="noopener noreferrer"&gt;https://github.com/alioguzhan/react-typescript-library&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>React EdiText - Inline Editable Text Component</title>
      <dc:creator>Ali Oğuzhan Yıldız</dc:creator>
      <pubDate>Sat, 22 Sep 2018 19:13:02 +0000</pubDate>
      <link>https://forem.com/ali0guzhan/react-editext---inline-editable-text-component-27c5</link>
      <guid>https://forem.com/ali0guzhan/react-editext---inline-editable-text-component-27c5</guid>
      <description>&lt;p&gt;I just published my first open source library for React. EdiText is a React component provides inline editing for texts. &lt;/p&gt;

&lt;p&gt;You can see examples and usage on the Github page. Any kind of feedback is welcome. Here its Github Page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://alioguzhan.github.io/react-editext/"&gt;https://alioguzhan.github.io/react-editext/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
