diff options
| author | tv <tv@krebsco.de> | 2022-12-08 22:45:09 +0100 | 
|---|---|---|
| committer | tv <tv@krebsco.de> | 2022-12-09 12:55:19 +0100 | 
| commit | bd4ce4a6211e731962102b5f44cf03ce5cc6e1bb (patch) | |
| tree | 25aeb2991ec58780f229fc88ac4509449bd9ba1e | |
| parent | 0a0468984830fbae1095ab013e03005232bcbb09 (diff) | |
tv: init alacritty-tv
| -rw-r--r-- | tv/5pkgs/simple/alacritty-font-size.nix | 67 | ||||
| -rw-r--r-- | tv/5pkgs/simple/alacritty-tv.nix | 93 | 
2 files changed, 160 insertions, 0 deletions
| diff --git a/tv/5pkgs/simple/alacritty-font-size.nix b/tv/5pkgs/simple/alacritty-font-size.nix new file mode 100644 index 0000000..84bc3f6 --- /dev/null +++ b/tv/5pkgs/simple/alacritty-font-size.nix @@ -0,0 +1,67 @@ +{ pkgs }: + +pkgs.writeDashBin "font-size-alacritty" '' +  # usage: font-size-alacritty (+N|-N|=N) +  # Increase by, decrease by, or set font size to the value N. + +  set -efu + +  min_size=8 + +  op=''${1%%[0-9]*} +  op=''${op:-=} + +  value=''${1#[=+-]} + +  window_id=$(${pkgs.xdotool}/bin/xdotool getactivewindow) + +  current_size=$( +    ${pkgs.xorg.xprop}/bin/xprop -notype -id $window_id FONT_SIZE | +    ${pkgs.gnused}/bin/sed -rn 's/.* = ([0-9]+)$/\1/p' +  ) + +  # usage: set_font_size WINDOW_ID FONT_SIZE +  set_font_size() { +    ${pkgs.alacritty}/bin/alacritty msg config -w $1 font.size=$2 +    ${pkgs.xorg.xprop}/bin/xprop -id $1 -f FONT_SIZE 32c -set FONT_SIZE $2 +  } + +  # usage: reset_font_size WINDOW_ID +  reset_font_size() { +    ${pkgs.alacritty}/bin/alacritty msg config -w $1 font.size=$min_size +    ${pkgs.xorg.xprop}/bin/xprop -id $1 -remove FONT_SIZE +  } + +  # usage: make_next_size +  make_next_size() { +    case $op in +      -) next_size=$(expr $current_size - $value) ;; +      =) next_size=$value ;; +      +) +        next_size=$(expr $current_size + $value) +        test $next_size -ge $min_size || next_size=$min_size +        ;; +    esac +  } + +  if test -z "$current_size"; then +    current_size=0 +    make_next_size +    if test $next_size -ge $min_size; then +      ${pkgs.alacritty}/bin/alacritty msg config -w $window_id \ +          font.normal.family='Input Mono' \ +          font.normal.style=Condensed \ +          font.bold.family='Input Mono' \ +          font.bold.style=Bold +      set_font_size $window_id $next_size +    fi +  else +    make_next_size +    if test $next_size -ge $min_size; then +      set_font_size $window_id $next_size +    else +      ${pkgs.alacritty}/bin/alacritty msg config -w $window_id -r +      reset_font_size $window_id +    fi +  fi +'' diff --git a/tv/5pkgs/simple/alacritty-tv.nix b/tv/5pkgs/simple/alacritty-tv.nix new file mode 100644 index 0000000..466ff27 --- /dev/null +++ b/tv/5pkgs/simple/alacritty-tv.nix @@ -0,0 +1,93 @@ +{ pkgs }: + +let +  lib = import ./lib; +  font-size = arg: { +    program = "${pkgs.font-size-alacritty}/bin/font-size-alacritty"; +    args = [arg]; +  }; +  config = { +    bell.animation = "EaseOut"; +    bell.duration = 50; +    bell.color = "#ff00ff"; +    colors.cursor.cursor      = "#f042b0"; +    colors.primary.background = "#202020"; +    colors.primary.foreground = "#d0d7d0"; +    colors.normal.black       = "#000000"; +    colors.normal.red         = "#cd0000"; +    colors.normal.green       = "#00cd00"; +    colors.normal.yellow      = "#bc7004"; +    colors.normal.blue        = "#4343be"; +    colors.normal.magenta     = "#cb06cb"; +    colors.normal.cyan        = "#04c9c9"; +    colors.normal.white       = "#bebebe"; +    colors.bright.black       = "#727272"; +    colors.bright.red         = "#fb6262"; +    colors.bright.green       = "#72fb72"; +    colors.bright.yellow      = "#fbfb72"; +    colors.bright.blue        = "#7272fb"; +    colors.bright.magenta     = "#fb53fb"; +    colors.bright.cyan        = "#72fbfb"; +    colors.bright.white       = "#fbfbfb"; +    draw_bold_text_with_bright_colors = true; +    font.normal.family = "Clean"; +    font.bold.family = "Clean"; +    font.bold.style = "Regular"; +    font.size = 10; +    hints.enabled = [ +      { +        regex = "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)[^\\u0000-\\u001F\\u007F-\\u009F<>\"\\s{-}\\^⟨⟩`]+"; +        mouse.enabled = true; +        post_processing = true; +        action = "Select"; +      } +    ]; +    key_bindings = [ +      { key = "Up";   mods = "Shift|Control"; command = font-size "=14"; } +      { key = "Up";   mods = "Control";       command = font-size "+1"; } +      { key = "Down"; mods = "Control";       command = font-size "-1"; } +      { key = "Down"; mods = "Shift|Control"; command = font-size "=0"; } +    ]; +    scrolling.multiplier = 8; +  }; +  config-file = pkgs.writeJSON "alacritty-tv.json" config; +in + +pkgs.symlinkJoin { +  name = "alacritty-tv"; +  paths = [ +    (pkgs.writeDashBin "alacritty" '' +      # usage: +      #   alacritty [--singleton] [ARGS...] + +      set -efu + +      # Use home so Alacritty can find the configuration without arguments. +      # HOME will be reset once in Alacritty. +      HOME=$TMPDIR/Alacritty +      export HOME + +      # Install stored configuration if it has changed. +      # This allows for both declarative updates and runtime modifications. +      ${pkgs.coreutils}/bin/mkdir -p "$HOME" +      ref=$(${pkgs.coreutils}/bin/cat "$HOME"/ref) +      if test "$ref" != ${config-file}; then +        echo ${config-file} > "$HOME"/ref +        ${pkgs.coreutils}/bin/cp ${config-file} "$HOME"/.alacritty.yml +      fi + +      case ''${1-} in +        --singleton) +          shift +          if ! ${pkgs.alacritty}/bin/alacritty msg create-window "$@"; then +            ${pkgs.alacritty}/bin/alacritty "$@" & +          fi +          ;; +        *) +          exec ${pkgs.alacritty}/bin/alacritty "$@" +          ;; +      esac +    '') +    pkgs.alacritty +  ]; +} | 
