#+TITLE: General System Configurations
#+PROPERTY: header-args :mkdirp yes
#+auto_tangle: t
#+STARTUP: overview

* Git 
#+begin_src conf :tangle ~/.gitconfig
  [user]
	  email = public@thanosapollo.com
	  name = Thanos Apollo
	  signingkey = 5F6B32E27F433AA9E42A530A0A50703D1CE7AE29
  [commit]
	  gpgsign = true
  [format]
	  subjectPrefix = PATCH
  [sendemail]
	  from = Thanos Apollo <public@thanosapollo.com>
	  smtpserver = smtp.fastmail.com
	  smtpuser = thanosapollo@fastmail.com
	  smtpencryption = ssl
	  smtpserverport = 465
	  annotate = yes

  [credential "smtp://smtp.fastmail.com"]
      helper = "!f() { echo username=thanosapollo@fastmail.com; echo \"password=$(pass show fastmail.com/thanosapollo@fastmail.com | sed -n '/smtp:/,+3p')\"; }; f"

#+end_src
* gnupgp
#+begin_src conf :tangle ~/.gnupg/gpg-agent.conf
  default-cache-ttl 172800
  max-cache-ttl 282800
  pinentry-program /home/thanos/.stumpwm.d/modules/util/pinentry/stumpwm-pinentry
#+end_src
* Hyprland
** Config
*** Keyboard & monitors
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
    # See https://wiki.hyprland.org/Configuring/Monitors/
    monitor=transform,preferred,auto,auto

    # See https://wiki.hyprland.org/Configuring/Keywords/ for more

    # Some default env vars.
    env = XCURSOR_SIZE,24

    # For all categories, see https://wiki.hyprland.org/Configuring/Variables/
    input {
	kb_layout = us,gr,my-cyr
	kb_variant =
	kb_model = 
	kb_options = ctrl:swapcaps, grp:alt_space_toggle,
	kb_rules =

	follow_mouse = 1

	touchpad {
	    natural_scroll = no
	}

	sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
    }
#+end_src
*** Style
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
  general {
      # See https://wiki.hyprland.org/Configuring/Variables/ for more
      gaps_in = 5
      gaps_out = 10
      border_size = 2
      col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
      col.inactive_border = rgba(595959aa)
      layout = master
  }

  decoration {
      # See https://wiki.hyprland.org/Configuring/Variables/ for more
      active_opacity = 0.99
      inactive_opacity = 0.97
      rounding = 10
      blur = no
      blur_size = 3
      blur_passes = 1
      blur_new_optimizations = on
      drop_shadow = yes
      shadow_range = 4
      shadow_render_power = 3
      col.shadow = rgba(1a1a1aee)
  }

  animations {
      enabled = yes

      # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

      bezier = myBezier, 0.05, 0.9, 0.1, 1.05
      animation = windows, 1, 7, myBezier
      animation = windowsOut, 1, 7, default, popin 80%
      animation = border, 1, 10, default
      animation = borderangle, 1, 8, default
      animation = fade, 1, 7, default
      animation = workspaces, 1, 6, default
  }

  dwindle {
      # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
      pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
      preserve_split = yes # you probably want this
  }

  master {
      # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
      new_is_master = false
      mfact = 0.53
  }

  gestures {
      # See https://wiki.hyprland.org/Configuring/Variables/ for more
      workspace_swipe = off
  }

  # Personal Configuration for Hyprland
  # Thanos Apollo 2023

  # See https://wiki.hyprland.org/Configuring/ for more

  device:epic mouse V1 {
      sensitivity = -0.5
  }
#+end_src
*** Keybindings
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
  # See https://wiki.hyprland.org/Configuring/Keywords/ for more
  $mainMod = CTRL_ALT

  # Binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
  bind = , F5, exec, "/home/$USER/Developer/scripts/keyboard-light-x220.sh"
  bind = , F1, exec, swaylock --screenshot --clock --effect-blur 10x9 --indicator
  bind = , F8, exec, brightnessctl set +5%
  bind = , F7, exec, brightnessctl set 5-%
  bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
  bind = , XF86AudioLowerVolume, exec, pamixer -d 5
  bind = , XF86AudioMute, exec, pamixer -t

  bind = $mainMod, Return, exec, emacsclient -c
  bind = $mainMod, W, exec, kitty
  bind = $mainMod, Q, killactive, 
  bind = $mainMod SHIFT, Q, exit, 
  bind = $mainMod, R, exec, rofi -show drun
  bind = $mainMod, E, exec, tessen --dmenu=rofi
  bind = $mainMod, V, togglefloating, 
  bind = $mainMod, J, togglesplit, # dwindle
  bind = ALT, F12, exec, grim -g "$(slurp)"
  bind = ALT, F11, fullscreen

  # Move focus with mainMod + arrow keys
  bind = $mainMod, B, movefocus, l
  bind = $mainMod, F, movefocus, r
  bind = $mainMod, N, movefocus, d
  bind = $mainMod, P, movefocus, u

  bind = $mainMod SHIFT, P, movewindow, u
  bind = $mainMod SHIFT, N, movewindow, d
  bind = $mainMod SHIFT, F, movewindow, r
  bind = $mainMod SHIFT, B, movewindow, l 


  # Switch workspaces with mainMod + [0-9]
  bind = $mainMod, 1, workspace, 1
  bind = $mainMod, 2, workspace, 2
  bind = $mainMod, 3, workspace, 3
  bind = $mainMod, 4, workspace, 4
  bind = $mainMod, 5, workspace, 5
  bind = $mainMod, 6, workspace, 6
  bind = $mainMod, 7, workspace, 7
  bind = $mainMod, 8, workspace, 8
  bind = $mainMod, 9, workspace, 9
  bind = $mainMod, 0, workspace, 10

  # Move active window to a workspace with mainMod + SHIFT + [0-9]
  bind = $mainMod SHIFT, 1, movetoworkspace, 1
  bind = $mainMod SHIFT, 2, movetoworkspace, 2
  bind = $mainMod SHIFT, 3, movetoworkspace, 3
  bind = $mainMod SHIFT, 4, movetoworkspace, 4
  bind = $mainMod SHIFT, 5, movetoworkspace, 5
  bind = $mainMod SHIFT, 6, movetoworkspace, 6
  bind = $mainMod SHIFT, 7, movetoworkspace, 7
  bind = $mainMod SHIFT, 8, movetoworkspace, 8
  bind = $mainMod SHIFT, 9, movetoworkspace, 9
  bind = $mainMod SHIFT, 0, movetoworkspace, 10

  # Scroll through existing workspaces with mainMod + scroll
  bind = ALT, mouse_down, workspace, e+1
  bind = ALT, mouse_up, workspace, e-1

  # Move/resize windows with mainMod + LMB/RMB and dragging
  bindm = ALT, mouse:272, movewindow
  bindm = ALT, mouse:273, resizewindow
#+end_src
*** Exec upon start
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
  exec-once = waybar
  exec = hyprpaper
  exec-once = emacs --daemon
  exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
  exec-once = nm-applet
#+end_src
** Hyprpaper
#+begin_src conf :tangle ~/.config/hypr/hyprpaper.conf
  preload = ~/wallpapers/wallpaper-cyberpunk.jpg
  preload = ~/wallpapers/science-athlete.jpg
  preload = ~/wallpapers/robo-girl.jpg
  preload = ~/wallpapers/chalk-board-wallpapers.jpg

  wallpaper = DP-1, ~/wallpapers/chalk-board-wallpapers.jpg

  wallpaper = HDMI-A-1, ~/wallpapers/chalk-board-wallpapers.jpg

  wallpaper = LVDS-1, ~/wallpapers/science-athlete.jpg
#+end_src

* Waybar
** Configuration
#+begin_src jsonc :tangle ~/.config/waybar/config.jsonc
  {
      "layer": "top",
      "position": "top",
      "mod": "dock",
      "exclusive": true,
      "passthrough": false,
      "gtk-layer-shell": true,
      "height": 0,
      "modules-left": [
	  "clock",
	  "custom/weather"
	  // "hyprland/window",
      ],
      "modules-center": ["wlr/workspaces"],
      "modules-right": [
	  "tray",
	  "custom/updates",
	  "custom/language",
	  "battery",
	  "backlight",
	  "custom/volume"
	  // "pulseaudio#microphone"
      ],

      "hyprland/window": {
	  "format": "{}"
      },
      "wlr/workspaces": {
	  "disable-scroll": true,
	  "all-outputs": true,
	  "on-click": "activate",
	  //"format": "{icon}",
	  "persistent_workspaces": {
	      "1": [],
	      "2": [],
	      "3": [],
	      "4": [],
	      "5": [],
	      "6": [],
	      "7": [],
	      "8": [],
	      "9": [],
	      "10": []
	  }
      },
      "custom/updates": {
	  "exec": "(pacman -Qu ; paru -Qua) | wc -l",
	  "interval": 7200,
	  "format": " {}"
      },
     "custom/weather" : {
	  "tooltip" : true,
	  "format" : "{}",
	  "interval" : 30,
	  "exec" : "~/Developer/scripts/waybar-wttr.py",
	  "return-type" : "json"
      },
      "tray": {
	  "icon-size": 13,
	  "spacing": 10
      },
      "clock": {
	  "format": "{: %R   %d/%m}",
	  "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
      },
      "backlight": {
	  "device": "intel_backlight",
	  "format": "{icon} {percent}%",
	  "format-icons": ["", "", ""],
	  "on-scroll-up": "brightnessctl set 1%+",
	  "on-scroll-down": "brightnessctl set 1%-",
	  "min-length": 6
      },
      "battery": {
	  "states": {
	      "good": 95,
	      "warning": 30,
	      "critical": 20
	  },
	  "format": "{icon} {capacity}%",
	  "format-charging": " {capacity}%",
	  "format-plugged": " {capacity}%",
	  "format-alt": "{time} {icon}",
	  "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
      },
      "pulseaudio": {
	  "format": "{icon} {volume}%",
	  "tooltip": false,
	  "format-muted": " Muted",
	  "on-click": "pamixer -t",
	  "on-scroll-up": "pamixer -i 5",
	  "on-scroll-down": "pamixer -d 5",
	  "scroll-step": 5,
	  "format-icons": {
	      "headphone": "",
	      "hands-free": "",
	      "headset": "",
	      "phone": "",
	      "portable": "",
	      "car": "",
	      "default": ["", "", ""]
	  }
      },
      "custom/volume": {
	  "exec": "pamixer --get-volume",
	  "interval": 1,
	  "format": " {}%",
	  "tooltip": true
      }
      // "custom/pipewire": {
      //     "format": {},
      //     "exec": "awk -F"[][]" '/Left:/ { print $2 }' <(amixer sget Master)",
      //     "interval": 10
      // },
  }
#+end_src

** Style
#+begin_src css :tangle ~/.config/waybar/style.css
  ,* {
      border: none;
      border-radius: 0;
      font-family: Jetbrains Mono, Cartograph CF Nerd Font, monospace;
      font-weight: bold;
      font-size: 14px;
      min-height: 0;
  }

  window#waybar {
      background: rgba(21, 18, 27, 0);
      color: #cdd6f4;
  }

  tooltip {
      background: #0d1017;
      border-radius: 10px;
      border-width: 2px;
      border-style: solid;
      border-color: #11111b;
  }

  #workspaces button {
      padding: 5px;
      color: #313244;
      margin-right: 5px;
  }

  #workspaces button.active {
      color: #39bae6;
  }

  #workspaces button.focused {
      color: #a6adc8;
      background: #eba0ac;
      border-radius: 10px;
  }

  #workspaces button.urgent {
      color: #11111b;
      background: #a6e3a1;
      border-radius: 10px;
  }

  #workspaces button:hover {
      background: #11111b;
      color: #cdd6f4;
      border-radius: 10px;
  }

  #custom-language,
  #custom-updates,
  #custom-caffeine,
  #custom-weather,
  #window,
  #clock,
  #battery,
  #pulseaudio,
  #custrom-volume,
  #network,
  #workspaces,
  #tray,
  #backlight {
      background: #0d1017;
      padding: 0px 10px;
      margin: 3px 0px;
      margin-top: 10px;
      border: 1px solid #181825;
  }

  #tray {
      border-radius: 10px;
      margin-right: 10px;
  }

  #workspaces {
      background: #0d1017;
      border-radius: 10px;
      margin-left: 10px;
      padding-right: 0px;
      padding-left: 5px;
  }

  #custom-caffeine {
      color: #89dceb;
      border-radius: 10px 0px 0px 10px;
      border-right: 0px;
      margin-left: 10px;
  }

  #custom-language {
      color: #f38ba8;
      border-left: 0px;
      border-right: 0px;
  }

  #custom-updates {
      color: #ff8f40;
      border-left: 0px;
      border-right: 0px;
  }

  #window {
      border-radius: 10px;
      margin-left: 20px;
      margin-right: 60px;
  }

  #clock {
      color: #39bae6;
      border-radius: 10px 0px 0px 10px;
      margin-left: 0px;
      border-right: 0px;
  }

  #network {
      color: #f9e2af;
      border-left: 0px;
      border-right: 0px;
  }

  #pulseaudio {
      color: #59c2ff;
      border-left: 5px;
      border-right: 5px;
  }
  #custom-volume {
      background: #0d1017;
      color: #59c2ff;
      padding: 8px;
      margin-top: 11px;
      margin-bottom: 3px;
      border-left: 0px;
      border-right: 0px;
  }

  #battery {
      color: #a6e3a1;
      border-radius: 0 10px 10px 0;
      margin-right: 10px;
      border-left: 0px;

  }

  #custom-weather {
      border-radius: 0px 10px 10px 0px;
      border-right: 0px;
      margin-left: 0px;
  }
#+end_src

* iSync
#+begin_src conf :tangle ~/.mbsyncrc
  IMAPAccount fastmail
  Host imap.fastmail.com
  Port 993
  User thanosapollo@fastmail.com
  PassCmd "emacsclient -e '(password-store-get-field \"fastmail.com/thanosapollo@fastmail.com\" \"smtp\")'"
  SSLType IMAPS
  SSLVersions TLSv1.2
  CertificateFile /etc/ssl/certs/ca-certificates.crt

  IMAPStore fastmail-remote
  Account fastmail

  MaildirStore fastmail-local
  Path ~/Mail/
  Inbox ~/Mail/Inbox
  Trash ~/Mail/Trash/
  SubFolders Verbatim

  Channel fastmail
  Far :fastmail-remote:
  Near :fastmail-local:
  Patterns *
  Expunge None
  CopyArrivalDate yes
  Sync All
  Create Both
  SyncState *
#+end_src

* Starship

#+begin_src conf :tangle ~/.config/starship.toml
  # Get editor completions based on the config schema
  "$schema" = 'https://starship.rs/config-schema.json'
  # Inserts a blank line between shell prompts
  add_newline = true

  # Replace the '❯' symbol in the prompt with '➜'
  [character] # The name of the module we are configuring is 'character'
  success_symbol = '[λ](red)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green'
  error_symbol = "[✖](bold red) "

  [battery]
  full_symbol = "🔋"
  charging_symbol = "🔌"
  discharging_symbol = "⚡"

  [[battery.display]]
  threshold = 30
  style = "bold red"

  [cmd_duration]
  min_time = 10_000  # Show command duration over 10,000 milliseconds (=10 sec)
  format = " took [$duration]($style)"

  [directory]
  truncation_length = 5
  format = "[$path](yellow)[$lock_symbol]($lock_style) "

  [git_branch]
  format = " [$symbol$branch]($style) "
  symbol = "[](bold green) "
  style = "blue bold"

  [git_commit]
  commit_hash_length = 8
  style = "bold white"

  [git_state]
  format = '[\($state( $progress_current of $progress_total)\)]($style) '

  [git_status]
  conflicted = "⚔️ "
  ahead = "🏎️ 💨 ×${count}"
  behind = "🐢 ×${count}"
  diverged = "🔱 🏎️ 💨 ×${ahead_count} 🐢 ×${behind_count}"
  untracked = "  ×${count}"
  stashed = "📦 "
  modified = " ×${count}"
  staged = "🗃️  ×${count}"
  renamed = "📛 ×${count}"
  deleted = "🗑️  ×${count}"
  style = "bright-white"
  format = "$all_status$ahead_behind"

  [hostname]
  ssh_only = false
  format = "<[$hostname]($style)>"
  trim_at = "-"
  style = "bold dimmed white"
  disabled = true

  [julia]
  format = "[$symbol$version]($style) "
  symbol = "ஃ "
  style = "bold green"

  [memory_usage]
  format = "$symbol[${ram}( | ${swap})]($style) "
  threshold = 70
  style = "bold dimmed white"
  disabled = false

  [package]
  disabled = true

  [python]
  format = "[$symbol$version]($style) "
  style = "bold green"

  [rust]
  format = "[$symbol$version]($style) "
  style = "bold green"

  [time]
  time_format = "%T"
  format = "🕙 $time($style) "
  style = "bright-white"
  disabled = true

  [username]
  style_user = "bold dimmed blue"
  show_always = false

  [nodejs]
  format = "via [🤖 $version](bold green) "
#+end_src