summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2024-04-29 08:54:22 +0200
committerLinnnus <[email protected]>2024-04-29 08:54:22 +0200
commit16bbc166528b674751c638a6e2210b8d1d2bfa26 (patch)
treecf898bedfbf69237a890f58dc8d60feaaf1de2d3
parent4d1dded46c30434de31203c124327987dc45a7ad (diff)
muhammed: Make iterm2/neovim respect system dark mode
-rw-r--r--home/neovim/init.vim2
-rw-r--r--hosts/muhammed/home/iterm2/auto_theme.py26
-rw-r--r--hosts/muhammed/home/iterm2/default.nix14
-rw-r--r--modules/home-manager/iterm2/default.nix1
4 files changed, 32 insertions, 11 deletions
diff --git a/home/neovim/init.vim b/home/neovim/init.vim
index c73fb73..f55412b 100644
--- a/home/neovim/init.vim
+++ b/home/neovim/init.vim
@@ -1,8 +1,6 @@
" Settings
"""""""""""""""""""""""""""
-colorscheme darkblue
-
" Leave boomer mode
set nocompatible
diff --git a/hosts/muhammed/home/iterm2/auto_theme.py b/hosts/muhammed/home/iterm2/auto_theme.py
new file mode 100644
index 0000000..17a254d
--- /dev/null
+++ b/hosts/muhammed/home/iterm2/auto_theme.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+import asyncio
+import iterm2
+
+async def main(connection):
+ async with iterm2.VariableMonitor(connection, iterm2.VariableScopes.APP, "effectiveTheme", None) as mon:
+ while True:
+ # Block until theme changes
+ theme = await mon.async_get()
+
+ # 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)
+
+iterm2.run_forever(main)
diff --git a/hosts/muhammed/home/iterm2/default.nix b/hosts/muhammed/home/iterm2/default.nix
index d868e57..b6a9ecc 100644
--- a/hosts/muhammed/home/iterm2/default.nix
+++ b/hosts/muhammed/home/iterm2/default.nix
@@ -1,17 +1,13 @@
# 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,
- lib,
- ...
-}: let
- inherit (lib) mkIf;
- inherit (pkgs.stdenv) isDarwin;
-in {
- config = mkIf isDarwin {
+{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 = {
diff --git a/modules/home-manager/iterm2/default.nix b/modules/home-manager/iterm2/default.nix
index 2293c80..4788e1d 100644
--- a/modules/home-manager/iterm2/default.nix
+++ b/modules/home-manager/iterm2/default.nix
@@ -48,6 +48,7 @@ in {
config = mkIf cfg.enable {
home.packages = [cfg.package];
+ # TODO: Use the same overwriting approach as for qBittorrent.
home.file = mkIf (cfg.config != null) {
"/Library/Preferences/com.googlecode.iterm2.plist".text = toPlist {} cfg.config;
};