Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macOS support #131

Open
arcticicestudio opened this issue Sep 14, 2018 · 0 comments
Open

macOS support #131

arcticicestudio opened this issue Sep 14, 2018 · 0 comments

Comments

@arcticicestudio
Copy link
Owner

arcticicestudio commented Sep 14, 2018

Goodybe archbook

Because of the regularly/periodically exchanged hardware at my workplace the MacBook Pro 11,2 (2016) got exchanged for one of the latest MacBook's Pro 15,2 (2018) with the touch bar.
I'm a really long time Arch Linux user and all of my systems are designed for it. Based on the information gathered by the community about the state of Linux on the MacBook Pro 2016 & 2017 almost everything works fine out-of-the-kernel (box) even on a MacBook Pro 14,1/2. Unfortunately Apple changed a lot of the internal hardware architecture again for the latest 15,1/2 models so that it is currently not possible to natively install Linux.
I've posted a detailed description in the original Gist about how I was able to create an ext4 filesystem partition anyway and copying a complete Arch Linux installation (full / filesystem structure) to it, but know I know it won't boot (partition is not found regardless of whether using LABEL, UUID or PARTUUID) because the SSD is not recognized by Linux due to these new creepy NVMe controller. See Dunedan/mbp-2016-linux#71 for details and more information.

The previous host archbook will be removed from the whole repository and replaced by the new host called iceowl that currently runs on an MacBook Pro 15,1 (15-inch, 2018) with macOS High Sierra version 10.13.6 (2,2 GHz Intel Core i7, 16 GB 2400 MHz DDR4, Radeon Pro 560X 4096 MB and Intel UHD Graphics 630 1536 MB).

The further proceed

I will switch to macOS for my daily job business as the host named iceowl. Maybe I'll try to use Parallels Desktop Lite (free for Linux) that uses native macOS API's (GPU pass-through) for better performance than VirtualBox/QEMU etc. which allows to use Arch Linux in full-screen with multiple monitor support, but this is just experimental to gather some info about the performance and usability.

The goal and issue progress tracking

This regularly updated epic documents the process and issue's progress to reach the goal of fully customizing macOS to fit my needs and linuxify/unixify it as close as possible.

Homebrew

Tracked by #140

To keep control over the required and installed software the Homebrew package manager will be used including a Brewfile handled by Homebrew Bundle.

macOS Defaults

Tracked by -

To manipulate many hidden features and plist files of stock macOS and other third-party apps the system CLI tool defaults will be used. See default-write.com as reference.

iTerm2

Tracked by #135

Since Tilix is designed for Linux the most popular macOS terminal emulator iTerm2 will be used as replacement.

launchd

Tracked by #133

As equivalent to systemd the builtin service manager launchd will be used to create user-specific jobs provided via user agents and daemons.

Other issues bound to this epic

@arcticicestudio arcticicestudio added this to the macOS Support milestone Sep 14, 2018
arcticicestudio added a commit that referenced this issue Sep 15, 2018
> Changed the default socket file paths.

There was a problem where the `gpg-agent` was not able to create the
socket files within the `~/.gnupg` folder that is symlinked to the
gocryptfs (1) container to securely (encrypted) store the GPG keys:

```
gpg: can’t connect to the agent: IPC connect call failed
```

This might be caused by either the macOS filesystem (APFS) that doesn't
support the creation of sockets (it works fine on other Arch Linux hosts
like `igloo`) or by restrictions due to read/write permissions that are
not passed through.

This solution/workaround is to change the default absolute file paths of
the socket files:

1. Created a `S.gpg-agent` and `S.gpg-agent.ssh` file manually in the
   `$GNUPGPHOME` folder (defaults to `~/.gnupg`).
2. Added the `extra-socket` and `browser-socket` options in the
   `gpg-agent.conf` file with the desired paths.

The created `S.gpg-agent` and `S.gpg-agent.ssh` files allow to use
values of environment variables via string interpolation (2), e.g.
`${HOME}`.

NOTE: It is important to make sure that the target folder exists and
the permissions are set to 700!

> macOS pinentry tool

Set the `pinentry-programm` option in the `gpg-agent.conf` file to use
pinentry-mac (3). Note that this requires the Homebrew formula
pinentry-mac (4) to be installed!

```conf
pinentry-program /usr/local/bin/pinentry-mac
```

> More references

* „gpg: can’t connect to the agent: IPC connect call failed“ (5)

* GNUPG bugtracker - “gpg-agent 2.1 socket and nfs /home“ (6)
* „How to configure GnuPG's S.gpg-agent socket location?“ (7)

References:

  (1) https://github.com/rfjakob/gocryptfs
  (2) https://en.wikipedia.org/wiki/String_interpolation
  (3) https://github.com/GPGTools/pinentry-mac
  (4) https://formulae.brew.sh/formula/pinentry-mac
  (5) https://michaelheap.com/gpg-cant-connect-to-the-agent-ipc-connect-call-failed
  (6) https://dev.gnupg.org/T1752
  (7) https://askubuntu.com/a/1053594

Epic: GH-131
Closes GH-132
arcticicestudio added a commit that referenced this issue Sep 15, 2018
Created a new snowblock for launchd (1) snowblock includes a user agent
defining a job to auto-mount the `sync` gocryptfs (2) volume located in
the Dropbox (3) folder receiving the password stored in the macOS
Keychain (4) via the macOS builtin system CLI tool `security`.

It also includes a documentation to describe the requirements for
the `com.arcticicestudio.igloo.launchd.igloosync` agent. It consists of
information about dependencies and how to create the required
`gocryptfs` password stored- and received via the macOS builtin system
CLI tool `security`.

Note that this is a macOS specific snowblock and therefore the
`com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` agent and
script file will only be linked for the `iceowl` host.

References:
  (1) https://wiki.freebsd.org/launchd
  (2) https://github.com/rfjakob/gocryptfs
  (3) https://www.dropbox.com
  (4) https://support.apple.com/guide/keychain-access/welcome/mac
    * http://www.launchd.info
    * launchd(1)
    * launchd.plist(5)
    * security(1)

Epic: GH-131
Related to GH-58
Closes GH-133
arcticicestudio added a commit that referenced this issue Sep 15, 2018
The management of installed Perl modules (1) on macOS is not as simple
and well thought through like with package managers on Linux systems,
e.g. via pacman (2) on Arch Linux (3). There are problems when
is comes to configuring the runtime path the modules have been installed
to even when using the most popular module manager called cpanminus (4).
This causes the Taskwarrior (5) plugin taskopen (6) fail to load because
the Perl core module `JSON` can't be found and loaded.

As a workaround a custom script has been implemented to create and open
a attached note of an task:

1. Used the `_get` (7) function of the Taskwarrior DOM
   API (8) to extract any stored piece of information of an task. This
   allows to receive the UUID of an task (9).
2. Created a custom `on` (open note) Taskwarrior alias (10) to run the
   implemented custom script via the `execute` command.

The logic of the script follows the same like taskopen uses for default
notes:

* Using the UUID of an task (TODO) as the note filename.
* Simply passing the file to an editor (in this case Atom (11)) which
  will…
    * …creates a new file if it doesn't exist yet.
    * …opens the file if it already exists.

Note that this script is not limited to macOS but can also be used for
any other Linux hosts!

References:

  (1) http://www.cpan.org/modules
  (2) https://wiki.archlinux.org/index.php/Pacman
  (3) https://archlinux.org
  (4) https://github.com/miyagawa/cpanminus
  (5) https://taskwarrior.org
  (6) https://github.com/ValiValpas/taskopen
  (7) https://taskwarrior.org/docs/commands/_get.html
  (8) https://taskwarrior.org/docs/dom.html
  (9) https://taskwarrior.org/docs/ids.html
  (10) https://taskwarrior.org/docs/terminology.html#alias
  (11) https://atom.io

Epic: #131
Related to #110
Closes GH-134
arcticicestudio added a commit that referenced this issue Sep 15, 2018
Created a new snowblock that contains the `~/.docker/config.json`
configuration file. The file for the `iceowl` host has been configured
to ensure the macOS Keychain is used to store tokens instead of saving
them as plain text into the config file.

Related to epic GH-131
Closes GH-136
arcticicestudio added a commit that referenced this issue Sep 15, 2018
Since Tilix (1) is designed for Linux the most popular macOS terminal
emulator iTerm2 (2) will be used as replacement. This snowflake should
includes the exported JSON file of the created `igloo` profile.

References:

  (1) https://github.com/gnunn1/tilix
  (2) https://www.iterm2.com

Epic: GH-131
Related to GH-70
Closes GH-135
arcticicestudio added a commit that referenced this issue Sep 15, 2018
Created a new snowblock for pip (1) containing the

* `requirements.iceowl.txt` file (2) to track installed packages (3) and
their versions of the `iceowl` host and . See the requirements.txt file
format documentation (4) for details.
* `pip.conf` file (5) for user specific configurations.

References:

  (1) https://pypi.org/project/pip
  (2) https://pip.pypa.io/en/latest/user_guide/#requirements-files
  (3) https://packaging.python.org/tutorials/installing-packages/#requirements-files
  (4) https://pip.pypa.io/en/latest/reference/pip_install/#requirements-file-format
  (5) https://pip.pypa.io/en/stable/user_guide/#config-file

Related to epic GH-131
Closes GH-141
arcticicestudio added a commit that referenced this issue Sep 17, 2018
> Epic: #131

This new snowflake for Homebrew (1) adds a
`Brewfile` and a documentation to bootstrap the `Brewfile` with
Homebrew Bundle (2).

References:

  (1) https://brew.sh
  (2) https://github.com/Homebrew/homebrew-bundle

Bound to epic #131
Closes GH-140
arcticicestudio added a commit that referenced this issue Sep 19, 2018
There are various snowblock/snowflake configurations that contain the
`archbook` host (1) which doesn't exist anymore and can be replaced in
most cases with the new `iceowl` host. In cases where the
snowblock/snowflake is only targeted for Linux the `archbook` host
should be removed to make it host independently. These can be updated
when a new Linux host is introduced.

References:

  (1) https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code

Epic: GH-131
Closes GH-143
arcticicestudio added a commit that referenced this issue Sep 19, 2018
This commit adds a configuration for the new `iceowl` host. Due to the
usage of absolute paths in the config files of Timewarrior (1) e.g. for
the color theme, there must be an config per host.

References:

  (1) https://timewarrior.net

Epic: GH-131
Closes GH-144
arcticicestudio added a commit that referenced this issue Sep 19, 2018
This commit adds a new environment configuration (1) for the new
`iceowl` host. The auto-completion scripts bundled with the Homebrew
git (2) and bash (3) forumlas should also be imported.

References:

  (1) https://github.com/arcticicestudio/igloo/tree/83bbc2530dbb21f7e734aaa9e33898d7c4c67d50/snowblocks/bash/config/env
  (2) https://formulae.brew.sh/formula/git
  (3) https://formulae.brew.sh/formula/bash

Epic: GH-131
Closes GH-146
@arcticicestudio arcticicestudio modified the milestones: macOS Support, 0.1.0 Apr 3, 2020
arcticicestudio added a commit that referenced this issue Apr 15, 2020
Both snowblocks for Taskwarrior [1] and Timewarrior [2] are not required
anymore since they have been replaced with my own custom 💙 Go [3]
application that is currently private/closed source, but planned to be
open sourced later on.
Both tools are great and provide a lot of features, but are also kind
of overloaded with unused and unnecessary functions. I also missed the
possibility to integrate the data and API into my other Go applications
as well as web-based projects with a quite more modern techstack
(Protocol Buffers [4], NATS [5] Messaging, React SPA [6] etc.).

Therefore the snowblocks have been removed while the data is still
available through the Git repository history/logs [7].

[7]: https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History
[3]: https://go.dev
[1]: https://taskwarrior.org
[2]: https://timewarrior.net
[5]: https://nats.io
[4]: https://developers.google.com/protocol-buffers
[6]: https://reactjs.org

GH-253
Related to GH-248, GH-253, GH-131

Co-authored-by: Sven Greb <[email protected]>
arcticicestudio added a commit that referenced this issue Apr 15, 2020
Both snowblocks for Taskwarrior [1] and Timewarrior [2] are not required
anymore since they have been replaced with my own custom 💙 Go [3]
application that is currently private/closed source, but planned to be
open sourced later on.
Both tools are great and provide a lot of features, but are also kind
of overloaded with unused and unnecessary functions. I also missed the
possibility to integrate the data and API into my other Go applications
as well as web-based projects with a quite more modern techstack
(Protocol Buffers [4], NATS [5] Messaging, React SPA [6] etc.).

Therefore the snowblocks have been removed while the data is still
available through the Git repository history/logs [7].

[7]: https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History
[3]: https://go.dev
[1]: https://taskwarrior.org
[2]: https://timewarrior.net
[5]: https://nats.io
[4]: https://developers.google.com/protocol-buffers
[6]: https://reactjs.org

Closes GH-253
Related to GH-248, GH-253, GH-131

Co-authored-by: Sven Greb <[email protected]>
arcticicestudio added a commit that referenced this issue Apr 16, 2020
The pip [1] snowblock was only added in GH-141 in order to track
installed packages [2] and their versions through a `requirements.txt`
[3] file. The only tracked package was `taskw` [4] which was required
for the taskwarrior snowblock [5] to allow to use custom hooks to
interact with Taskwarrior API (the package is not available via
Homebrew). Anyway, since both the taskwarrior [5] and timewarrior [6]
snowblocks have also been decommissioned in GH-253 the "pip" snowblock
is now also not required anymore and has therefore been removed while
the data is still available through the Git repository history/logs [7].

[1]: https://pypi.org/project/pip
[2]: https://packaging.python.org/tutorials/installing-packages/#requirements-files
[3]: https://pip.pypa.io/en/latest/user_guide/#requirements-files
[4]: https://pypi.org/project/taskw
[5]: https://github.com/arcticicestudio/igloo/tree/master/snowblocks/taskwarrior
[6]: https://github.com/arcticicestudio/igloo/tree/master/snowblocks/timewarrior
[7]: https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History

GH-255
Related to GH-248, GH-253, GH-131

Co-authored-by: Sven Greb <[email protected]>
arcticicestudio added a commit that referenced this issue Apr 16, 2020
The pip [1] snowblock was only added in GH-141 in order to track
installed packages [2] and their versions through a `requirements.txt`
[3] file. The only tracked package was `taskw` [4] which was required
for the taskwarrior snowblock [5] to allow to use custom hooks to
interact with Taskwarrior API (the package is not available via
Homebrew). Anyway, since both the taskwarrior [5] and timewarrior [6]
snowblocks have also been decommissioned in GH-253 the "pip" snowblock
is now also not required anymore and has therefore been removed while
the data is still available through the Git repository history/logs [7].

[1]: https://pypi.org/project/pip
[2]: https://packaging.python.org/tutorials/installing-packages/#requirements-files
[3]: https://pip.pypa.io/en/latest/user_guide/#requirements-files
[4]: https://pypi.org/project/taskw
[5]: https://github.com/arcticicestudio/igloo/tree/master/snowblocks/taskwarrior
[6]: https://github.com/arcticicestudio/igloo/tree/master/snowblocks/timewarrior
[7]: https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History

Closes GH-255
Related to GH-248, GH-253, GH-131

Co-authored-by: Sven Greb <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant