protesilaos / iosevka-comfy

Custom build of Iosevka with different style and metrics than the default.
Other
252 stars 7 forks source link

Installation on macOS via brew-cask-fonts #1

Closed shamindras closed 4 days ago

shamindras commented 2 years ago

Hi @protesilaos,

Many thanks for making this package and for your wonderful emacs videos! I've just setup your modus-themes package on emacs and am enjoying it.

I'm on a macOS (Monterey v12.1), and wanted to install this cool font. A couple of questions:

  1. How do I locally install this on my macOS?
  2. Are you able to add an installer via brew-cask-fonts? If so this would mean a simple command line installation for macOS users as follows:
    $ brew tap homebrew/cask-fonts         # You only need to do this once!
    $ brew install font-iosevka-comfy

Sorry if this has already been answered before, but I thought to just check with you.

protesilaos commented 2 years ago

Hello @shamindras!

Many thanks for making this package and for your wonderful emacs videos! I've just setup your modus-themes package on emacs and am enjoying it.

You are welcome!

I'm on a macOS (Monterey v12.1), and wanted to install this cool font. A couple of questions: [...]

Unfortunately, I do not have access to macOS and am not familiar with how it works.

I am happy to add this information to the README, if someone knows the answers. And, more generally, I can facilitate linking to other sources if people want to maintain packages/recipes.

shamindras commented 2 years ago

Thanks @protesilaos - appreciate your prompt and thoughtful response.

I looked into this (I'm an emacs and brew-cask-fonts newb), but these are the essential steps needed.

Since ioveska-comfy is a family of fonts, one can mimick the example given for the fantasque-sans font family via the following ruby script:

cask "font-fantasque-sans-mono" do
  version :latest
  sha256 :no_check

  url "https://github.com/protesilaos/iosevka-comfy/archive/refs/tags/v#{version}.zip"
  appcast "https://github.com/protesilaos/iosevka-comfy/releases.atom"
  name "Iosevka-Comfy"
  homepage "https://github.com/protesilaos/iosevka-comfy"

  font "iosevka-comfy/ttf/iosevka-comfy-bold.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-bolditalic.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-extrabold.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-extrabolditalic.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-italic.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-light.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-lightitalic.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-regular.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-semilight.ttf"
  font "iosevka-comfy/ttf/iosevka-comfy-semilightitalic.ttf"
end

I'm not sure how to set the appcast field in this case, but here are the details.

This can be automated using their font_casker script. Asking the font-casker developers here may help speed up this process, if you should wish to undertake it.

Finally iosevka-comfy comes in many 'flavors', e.g., iosevka-comfy-wide, iosevka-comfy-duo. It may be sufficient just to make the main iosevka-comfy ttf fonts available to macOS users.

What do you think?

protesilaos commented 2 years ago

I looked into this (I'm an emacs and brew-cask-fonts newb), but these are the essential steps needed.

Since ioveska-comfy is a family of fonts, we could mimick the example given for the fantasque-sans font family via the following ruby script:

cask "font-fantasque-sans-mono" do
  version :latest
  sha256 :no_check

  url "https://github.com/protesilaos/iosevka-comfy/archive/refs/tags/v#{version}.zip"
  appcast "https://github.com/belluzj/fantasque-sans/releases.atom"
  name "Iosevka-Comfy"
  homepage "https://github.com/protesilaos/iosevka-comfy"

  font "osevka-comfy/ttf/iosevka-comfy-bold.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-bolditalic.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-extrabold.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-extrabolditalic.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-italic.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-light.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-lightitalic.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-regular.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-semilight.ttf"
  font "osevka-comfy/ttf/iosevka-comfy-semilightitalic.ttf"
end

This looks like a promising start. Thank you!

I'm not sure how to set the appcast field in this case, but here are the details.

This can be automated using their font_casker script. Asking the font-casker developers here may help speed up this process, if you should wish to undertake it.

I will need to review these tomorrow. Right now I am about to go to bed. The appcast must be the Atom feed of the tagged releases, so: https://github.com/protesilaos/iosevka-comfy/releases.atom

Finally iosevka-comfy comes in many 'flavors', e.g., iosevka-comfy-wide, iosevka-comfy-duo. It may be sufficient just to make the main iosevka-comfy ttf fonts available to macOS users.

I am not sure what the brew-cask-fonts policy is here. Does the project expect one font per cask, or can it take multiple fonts at once?

In principle, these "wide" and "duo" etc. are separate fonts due to minor differences between them. I am fine with whatever works best, though I assume someone who is interested in Iosevka Comfy might want to try all or at least some of the fonts in the family.

shamindras commented 2 years ago

This looks like a promising start. Thank you!

No problems - glad it is useful 👍🏾 .

I will need to review these tomorrow. Right now I am about to go to bed. The appcast must be the Atom feed of the tagged releases, so: protesilaos/iosevka-comfy/releases.atom

Right, I had edited my original post shortly to reflect this 😄 . Good to know that this seems like the right value for this field.

I am not sure what the brew-cask-fonts policy is here. Does the project expect one font per cask, or can it take multiple fonts at once?

In principle, these "wide" and "duo" etc. are separate fonts due to minor differences between them. I am fine with whatever works best, though I assume someone who is interested in Iosevka Comfy might want to try all or at least some of the fonts in the family.

Since ioveska-comfy comes in five variants, I believe a separate such script will need to be created for each variant.

My expectation as a macOS user is to then install all variants as follows:

$ brew tap homebrew/cask-fonts         # You only need to do this once!
$ brew install font-iosevka-comfy
$ brew install font-iosevka-comfy-wide
$ brew install font-iosevka-comfy-wide-fixed
$ brew install font-iosevka-comfy-fixed
$ brew install font-iosevka-comfy-duo

For example I currently run the following for iosevka:

$ brew tap homebrew/cask-fonts         # You only need to do this once!
$ brew install font-iosevka
$ brew install font-iosevka-slab

So I believe the above is the 'right' approach for the iosevka-comfy variants. It would be good to file an issue with the cask-font team to clarify.

If you agree with the above, then there is one further issue that needs to be clarified with the cask-font team, namely that for each of the five iosevka-comfy variants, you have a unhinted and base font subtype. I'm not sure if each of the five variants should be split into these two subtypes, or whether just the base variant subtype should be released here.

Hope this is useful. And thanks again for considering this - appreciate all your efforts.

protesilaos commented 2 years ago

So I believe the above is the 'right' approach for the iosevka-comfy variants. It would be good to file an issue with the cask-font team to clarify.

Agreed! Since Iosevka is already done that way, I don't think we need to ask for further clarification: we just follow the established precedent. If the maintainers have other ideas, we act accordingly.

If you agree with the above, then there is one further issue that needs to be clarified with the cask-font team, namely that for each of the five iosevka-comfy variants, you have a unhinted and base font subtype. I'm not sure if each of the five variants should be split into these two subtypes, or whether just the base variant subtype should be released here.

The "base" should be fine. I assume this is how other fonts do it as well.


Will you prepare a PR for homebrew-cask-fonts? I don't think I should do it, because I have no means of testing this. Plus, you already did all the research and deserve to be acknowledged for it.

Once we have this in place, we need to update our README to provide installation instructions. If you want, prepare a PR, otherwise I will do it.

shamindras commented 2 years ago

Agreed! Since Iosevka is already done that way, I don't think we need to ask for further clarification: we just follow the established precedent. If the maintainers have other ideas, we act accordingly.

Thanks for clarifying your preference. The hinted fonts (formerly referred to as base) make more sense for googlefonts (more on this below).

Will you prepare a PR for homebrew-cask-fonts? I don't think I should do it, because I have no means of testing this. Plus, you already did all the research and deserve to be acknowledged for it.

I can definitely help. However, upon further reading I think there is a much simpler and more elegant solution. Namely, I think it is best to push iosevka-comfy to google-fonts.

The reason for this is from this section (emphasis mine)

The preferred way to add a font to this repository is to submit it to Google Fonts. Shortly after its inclusion, a Cask will be automatically generated and updated on this repository.

In short I believe google-fonts will give these fonts a bigger platform and you get cask-fonts updated for free!

Based on the contributing guide for new font families, I believe it would be easiest for you (as the official font author, and this repo owner) to initiate an issue with google-fonts team directly and get their thoughts. If you amend this repo to meet their guidelines, I image the PR should be quite smooth. They have an example font template repo here and an actual font repo here. I believe it is not hard to amend this repo to match this template.

In short, I feel like google-fonts is a much more universal approach to distributing this font.

What do you think?

protesilaos commented 2 years ago

I have my reservations about the Google Fonts part, because Iosevka Comfy is not an original design and I am not sure what the legal implications could be. The project basically is a remix of Iosevka: it uses the resources found in iosevka.git.

Beside that, there are some practical difficulties with a potential contribution to Google Fonts.

[ Commenting on their CONTRIBUTING.md ]

  • All font files must be built with a scripted build process, and should use fontmake

We are using Iosevka's npm-based build process. This is what I get on the command-line:

$ npm ls
iosevka@15.4.2 /home/prot/Git/Projects/iosevka-git
+-- @iarna/toml@2.2.5
+-- @msgpack/msgpack@2.7.2
+-- @unicode/unicode-14.0.0@1.2.1
+-- cldr@7.2.0
+-- ejs@3.1.8
+-- eslint-config-prettier@8.5.0
+-- eslint@8.16.0
+-- fs-extra@10.1.0
+-- ot-builder@1.5.2
+-- otb-ttc-bundle@1.5.2
+-- patel@0.37.1
+-- prettier@2.6.2
+-- semver@7.3.7
+-- spiro@3.0.0
+-- stylus@0.58.0
+-- toposort@2.0.2
+-- typo-geom@0.12.1
+-- uuid@8.3.2
+-- verda@1.6.0
+-- wawoff2@2.0.1
`-- which@2.0.2

I cannot find any indication that fontmake is used.

I don't know what this entails. Though it is a later step in the process.

The FONTLOG is outside the scope of Iosevka Comfy because it is a derivative of Iosevka. Put differently, we do not control which glyphs are added, removed, revised.

shamindras commented 2 years ago

I have my reservations about the Google Fonts part, because Iosevka Comfy is not an original design and I am not sure what the legal implications could be. The project basically is a remix of Iosevka: it uses the resources found in iosevka.git.

Beside that, there are some practical difficulties with a potential contribution to Google Fonts.

That's reasonable - I see your point.

We can then go back to the original plan, i.e., setup cask-fonts for each of the five iosevka-comfy hinted variants.

I'm happy to help file an issue with the cask-fonts team to get this process started. But please keep in mind that I don't really know much about brew, fonts etc. Also I will be doing this outside of my usual research work. So things may take longer than expected.

Is the above all fine with you? If so, then I can then start the cask-fonts issue and tag you in.

protesilaos commented 2 years ago

Is the above all fine with you? If so, then I can then start the cask-fonts issue and tag you in.

Yes, please proceed. I will be active in the issue and help you however I can. I just can't do it myself because if I ever need to test anything, I have no means of doing it.

shamindras commented 2 years ago

Yes, please proceed. I will be active in the issue and help you however I can. I just can't do it myself because if I ever need to test anything, I have no means of doing it.

Sounds good! Let's try it.

I'm currently reading the documentation for homebrew PR and here. It is a little more involved than I thought. So will take some time to play with it.

I'll update you once I have some progress.

protesilaos commented 2 years ago

I'm currently reading the documentation for homebrew PR and here. It is a little more involved than I thought. So will take some time to play with it.

Oh, I see. This will not be an ordinary patch.

I'll update you once I have some progress.

Sure, take as much time as you need. I am ready to help however I can.

dabrahams commented 1 year ago

@protesilaos FWIW, you can use homebrew on Linux, so that may improve your local testing.

dabrahams commented 1 year ago

Here's a PR for the cask.

protesilaos commented 1 year ago

Thank you @dabrahams! I am monitoring it. Once it is done, we can mention it in our README.