diff --git a/configs/alacritty.nix b/configs/alacritty.nix index f17d913..165356b 100644 --- a/configs/alacritty.nix +++ b/configs/alacritty.nix @@ -3,29 +3,15 @@ lib, config, ... -}: { - environment.variables.TERMINAL = "alacritty"; - - environment.systemPackages = [ - pkgs.alacritty - ]; - - home-manager.users.me.xdg.configFile = let - inherit (import ) colours; - colourNames = ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"]; - colourPairs = lib.getAttrs colourNames colours; - in { - "alacritty/alacritty.yml".source = (pkgs.formats.yaml {}).generate "alacritty.yml" { +}: let + alacritty-cfg = theme: + (pkgs.formats.yaml {}).generate "alacritty.yml" { window.opacity = 0.9; - colors = { - primary = {inherit (colours) background foreground;}; - normal = lib.mapAttrs (_: colour: colour.dark) colourPairs; - bright = lib.mapAttrs (_: colour: colour.bright) colourPairs; - }; font = { normal.family = "Monospace"; size = 6; }; + live_config_reload = true; key_bindings = [ { key = "Plus"; @@ -43,6 +29,33 @@ action = "ResetFontSize"; } ]; + colors = let + colourNames = ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"]; + colourPairs = lib.getAttrs colourNames theme; + in { + primary = {inherit (theme) background foreground;}; + normal = lib.mapAttrs (_: colour: colour.dark) colourPairs; + bright = lib.mapAttrs (_: colour: colour.bright) colourPairs; + }; }; + alacritty-pkg = pkgs.symlinkJoin { + name = "alacritty"; + paths = [ + (pkgs.writeDashBin "alacritty" '' + ${pkgs.alacritty}/bin/alacritty --config-file /var/theme/config/alacritty.yml "$@" + '') + pkgs.alacritty + ]; + }; +in { + environment.variables.TERMINAL = "alacritty"; + + environment.systemPackages = [ + alacritty-pkg + ]; + + environment.etc = { + "themes/dark/alacritty.yml".source = alacritty-cfg (import ); + "themes/light/alacritty.yml".source = alacritty-cfg (import ); }; } diff --git a/configs/chromium.nix b/configs/chromium.nix index 7f90b83..d2ceb70 100644 --- a/configs/chromium.nix +++ b/configs/chromium.nix @@ -7,6 +7,7 @@ "cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin "pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted "nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools + "eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader ]; }; diff --git a/configs/default.nix b/configs/default.nix index 40e717b..2013576 100644 --- a/configs/default.nix +++ b/configs/default.nix @@ -256,7 +256,7 @@ in { ./sshd.nix ./sudo.nix ./sxiv.nix - ./theming.nix + ./themes.nix ./tmux.nix ./traadfri.nix ./unclutter.nix diff --git a/configs/i3.nix b/configs/i3.nix index 4f4f69c..964749c 100644 --- a/configs/i3.nix +++ b/configs/i3.nix @@ -248,8 +248,9 @@ in { "${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5"; "${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu"; + "${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill"; "${modifier}+F7" = "exec ${pkgs.scripts.showkeys-toggle}/bin/showkeys-toggle"; - "${modifier}+F8" = "exec ${pkgs.xorg.xkill}/bin/xkill"; + "${modifier}+F8" = "exec switch-theme toggle"; "${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85"; "${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x"; "${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter"; diff --git a/configs/themes.nix b/configs/themes.nix new file mode 100644 index 0000000..4ee66d4 --- /dev/null +++ b/configs/themes.nix @@ -0,0 +1,82 @@ +{ + config, + lib, + pkgs, + ... +}: let + switch-theme = pkgs.writers.writeDashBin "switch-theme" '' + set -efux + if [ "$1" = toggle ]; then + if [ "$(${pkgs.coreutils}/bin/cat /var/theme/current_theme)" = dark ]; then + ${placeholder "out"}/bin/switch-theme light + else + ${placeholder "out"}/bin/switch-theme dark + fi + elif test -e "/etc/themes/$1"; then + mkdir -p /var/theme/config + ${pkgs.rsync}/bin/rsync --chown=${config.users.users.me.name}:users -a --delete "/etc/themes/$1/" /var/theme/config/ + echo "$1" > /var/theme/current_theme + ${pkgs.coreutils}/bin/chown ${config.users.users.me.name}:users /var/theme/current_theme + ${pkgs.xorg.xrdb}/bin/xrdb -merge /var/theme/config/xresources + ${pkgs.procps}/bin/pkill -HUP xsettingsd + else + echo "theme $1 not found" + fi + ''; +in { + systemd.services.xsettingsd = { + wantedBy = ["multi-user.target"]; + after = ["display-manager.service"]; + environment.DISPLAY = ":0"; + serviceConfig = { + ExecStart = "${pkgs.xsettingsd}/bin/xsettingsd -c /var/theme/config/xsettings.conf"; + User = config.users.users.me.name; + Restart = "always"; + RestartSec = "15s"; + }; + }; + + systemd.tmpfiles.rules = [ + "d /var/theme/ 755 ${config.users.users.me.name} users" + ]; + + environment.systemPackages = [ + switch-theme + pkgs.capitaine-cursors + ]; + + home-manager.users.me = { + home.pointerCursor = { + name = "capitaine-cursors-white"; + package = pkgs.capitaine-cursors; + size = 16; + }; + }; + + environment.etc = { + "themes/light/xsettings.conf".text = '' + Net/ThemeName "Adwaita" + ''; + "themes/light/xresources".text = '' + *background: #ffffff + *foreground: #000000 + ''; + "themes/dark/xsettings.conf".text = '' + Net/ThemeName "Adwaita-dark" + ''; + "themes/dark/xresources".text = '' + *background: #000000 + *foreground: #ffffff + ''; + }; + + system.activationScripts.theme.text = '' + export DISPLAY=:0 + if test -e /var/theme/current_theme; then + ${switch-theme}/bin/switch-theme "$(cat /var/theme/current_theme)" || + ${switch-theme}/bin/switch-theme dark + else + ${switch-theme}/bin/switch-theme dark + fi + ''; +} diff --git a/lib/default-applications.nix b/lib/default-applications.nix index 00fbd6f..b4808d8 100644 --- a/lib/default-applications.nix +++ b/lib/default-applications.nix @@ -1,5 +1,5 @@ pkgs: rec { - terminal = "${pkgs.alacritty}/bin/alacritty"; + terminal = "alacritty"; browser = "${pkgs.brave}/bin/brave"; fileManager = "${terminal} -e ${pkgs.ranger}/bin/ranger"; }