diff options
author | Linnnus <[email protected]> | 2024-12-21 15:47:33 +0100 |
---|---|---|
committer | Linnnus <[email protected]> | 2024-12-21 16:19:04 +0100 |
commit | 8353554315564b89dfe27d5130080ed04a0a65ad (patch) | |
tree | 896de88b6ea2701692b3ffe977c23947a786318e /shared/home-manager/iterm2 | |
parent | 9b7ed17b27157a25e57a6e38be3bcfeaa70ec9e8 (diff) |
Move to a profile-based configuration where common
This patch makes it so common configuration is now located in shared/
and each host basically just becomes a bunch of import statements.
The exception here is host-specific configuration like the `*.linus.onl`
that live inside `hosts/ahmed/`.
Specifically I have:
- moved common configuration `shared/{nixos,home-manager,nix-darwin}`.
- moved `hosts/common.nix` to `shared/nixos/common-{nix,shell}-settings.nix`.
- split `hosts/muhammed/{dev-utils,neovim}` into per-language
configuration.
This patch was done in preparation for the arrival of a new host, which
will need to share a lot of configuration with Muhammed.
Diffstat (limited to 'shared/home-manager/iterm2')
-rw-r--r-- | shared/home-manager/iterm2/auto_theme.py | 31 | ||||
-rw-r--r-- | shared/home-manager/iterm2/default.nix | 22 |
2 files changed, 53 insertions, 0 deletions
diff --git a/shared/home-manager/iterm2/auto_theme.py b/shared/home-manager/iterm2/auto_theme.py new file mode 100644 index 0000000..0970304 --- /dev/null +++ b/shared/home-manager/iterm2/auto_theme.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +import asyncio +import iterm2 + +async def update(connection, theme): + # Themes have space-delimited attributes, one of which will be light or dark. + parts = theme.split(" ") + if "dark" in parts: + preset = await iterm2.ColorPreset.async_get(connection, "Dark Background") + else: + preset = await iterm2.ColorPreset.async_get(connection, "Light Background") + + # Update the list of all profiles and iterate over them. + profiles=await iterm2.PartialProfile.async_query(connection) + for partial in profiles: + # Fetch the full profile and then set the color preset in it. + profile = await partial.async_get_full_profile() + await profile.async_set_color_preset(preset) + +async def main(connection): + app = await iterm2.async_get_app(connection) + await update(connection, await app.async_get_variable("effectiveTheme")) + async with iterm2.VariableMonitor(connection, iterm2.VariableScopes.APP, "effectiveTheme", None) as mon: + while True: + # Block until theme changes + theme = await mon.async_get() + await update(connection, theme) + + +iterm2.run_forever(main) diff --git a/shared/home-manager/iterm2/default.nix b/shared/home-manager/iterm2/default.nix new file mode 100644 index 0000000..b6a9ecc --- /dev/null +++ b/shared/home-manager/iterm2/default.nix @@ -0,0 +1,22 @@ +# This file configures iterm2. Note that the actual definition of iTerm2 for +# home-manager is in `modules/home-manager/iterm2`. *That* file declares +# `options.programs.iterm2.enable`. +{pkgs, ...}: { + config = { + home.packages = with pkgs; [imgcat]; + + # Install a script which automatically makes iTerm2 match the system-wide light/dark mode. + home.file."/Library/Application Support/iTerm2/Scripts/AutoLaunch/auto_theme.py".text = builtins.readFile ./auto_theme.py; + + programs.iterm2 = { + enable = true; + # config = { + # # Use the minimal tab style. + # # See: https://github.com/gnachman/iTerm2/blob/bd40fba0611fa94684dadf2478625f2a93eb6e47/sources/iTermPreferences.h#L29 + # TabStyleWithAutomaticOption = 5; + # }; + + shellIntegration.enableZshIntegration = true; + }; + }; +} |