dotfiles/home/apps/colorscheme-sync.nix

108 lines
3.2 KiB
Nix
Raw Normal View History

2023-07-13 08:45:39 +02:00
{
config,
2023-11-28 12:21:17 +01:00
lib,
2023-07-13 08:45:39 +02:00
pkgs,
...
2024-05-07 18:20:52 +02:00
}:
let
2023-11-28 12:21:17 +01:00
inherit (pkgs.stdenv) isDarwin isLinux;
2024-03-14 22:12:11 +01:00
2024-05-30 20:02:02 +02:00
milspec = (pkgs.callPackage ../../_sources/generated.nix { }).milspec;
vividMilspec = pkgs.runCommand "vivid-catppuccin" { nativeBuildInputs = [ pkgs.vivid ]; } ''
mkdir -p $out
2024-05-30 20:02:02 +02:00
for variant in dark light; do
vivid generate "${milspec.src}/extras/vivid/milspec-''${variant}.yml" > "$out/''${variant}"
done
'';
2024-05-07 18:20:52 +02:00
in
{
2023-11-28 12:21:17 +01:00
config = lib.mkIf config.isGraphical {
home.packages = [
(pkgs.writeShellApplication {
name = "dark-mode-ternary";
runtimeInputs = lib.optionals isLinux [
pkgs.dbus
pkgs.gnugrep
];
2024-05-07 18:20:52 +02:00
text =
let
queryCommand =
if isLinux then
"dbus-send --session --print-reply=literal --reply-timeout=5 --dest=org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read string:'org.freedesktop.appearance' string:'color-scheme' 2>/dev/null | grep -q 'uint32 1'"
2024-05-07 18:20:52 +02:00
else if isDarwin then
"defaults read -g AppleInterfaceStyle &>/dev/null"
else
throw "Unsupported platform";
in
''
[[ -z "''${1-}" ]] && [[ -z "''${2-}" ]] && echo "Usage: $0 <dark> <light>" && exit 1
2023-07-13 08:45:39 +02:00
2024-05-07 18:20:52 +02:00
if ${queryCommand}; then
echo "$1"
else
echo "$2"
fi
'';
2023-11-28 12:21:17 +01:00
})
];
2023-07-13 08:45:39 +02:00
2024-02-15 18:49:22 +01:00
services.darkman = {
2023-11-28 12:21:17 +01:00
enable = isLinux;
settings = {
2024-02-15 18:49:22 +01:00
lat = config.location.latitude;
lng = config.location.longitude;
2023-11-28 12:21:17 +01:00
useGeoclue = false;
};
lightModeScripts = {
gtk-theme = ''
2024-05-19 18:13:42 +02:00
${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/color-scheme "'prefer-light'"
'';
};
darkModeScripts = {
gtk-theme = ''
2024-05-19 18:13:42 +02:00
${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'"
'';
};
2023-07-13 08:45:39 +02:00
};
xdg.configFile.fsh.source = "${milspec.src}/extras/zsh-fast-syntax-highlighting";
2024-05-16 01:26:47 +02:00
programs.zsh.initExtra = ''
zadm_sync() {
local flavor="$(dark-mode-ternary mocha latte)"
2024-05-30 20:02:02 +02:00
local variant="$(dark-mode-ternary dark light)"
2024-05-19 18:13:42 +02:00
export BAT_THEME="Catppuccin ''${(C)flavor}"
2024-05-30 20:02:02 +02:00
export LS_COLORS="$(cat "${vividMilspec}/''${variant}")"
export STARSHIP_CONFIG__PALETTE="milspec_''${variant}"
2024-03-14 22:12:11 +01:00
2024-05-30 20:02:02 +02:00
fast-theme "XDG:milspec-''${variant}" >/dev/null
2024-05-16 01:26:47 +02:00
}
add-zsh-hook precmd zadm_sync
'';
2024-05-30 20:02:02 +02:00
2024-05-16 01:26:47 +02:00
programs.nushell.extraConfig = ''
2024-05-30 20:02:02 +02:00
use ${milspec.src}/extras/nu/milspec.nu
2024-05-16 01:26:47 +02:00
$env.config = ($env.config? | default {})
2024-05-30 20:02:02 +02:00
$env.config.color_config = (milspec -R dark)
2024-05-16 01:26:47 +02:00
$env.config.hooks = ($env.config.hooks? | default {})
$env.config.hooks.pre_prompt = (
$env.config.hooks.pre_prompt?
| default []
| append {||
let flavor = dark-mode-ternary "mocha" "latte"
2024-05-30 20:02:02 +02:00
let variant = dark-mode-ternary "dark" "light"
2024-05-30 20:02:02 +02:00
$env.config.color_config = (milspec -R $variant)
$env.BAT_THEME = "Catppuccin " + ($flavor | str capitalize)
2024-05-30 20:02:02 +02:00
$env.STARSHIP_CONFIG__PALETTE = "milspec_" + $variant
$env.LS_COLORS = (cat $"${vividMilspec}/($variant)")
}
2024-05-16 01:26:47 +02:00
)
'';
2023-11-28 12:21:17 +01:00
};
2023-07-13 08:45:39 +02:00
}