#+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 = mail.gandi.net
	  smtpuser = public@thanosapollo.com
	  smtpencryption = ssl
	  smtpserverport = 465
	  annotate = yes

  [credential "smtp://mail.gandi.net:465"]
      helper = "!f() { echo username=public@thanosapollo.com; echo \"password=$(pass show gandi/thanosapollo)\"; }; f"
#+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.98
      inactive_opacity = 0.99
      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-once = 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

  wallpaper = DP-1, ~/wallpapers/science-athlete.jpg

  wallpaper = HDMI-A-1, ~/wallpapers/science-athlete.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

* Moc
** Config
#+begin_src conf :tangle ~/.moc/config
  StartInMusicDir = yes

  # How to sort?  FileName is the option's only value for now.
  Sort = FileName

  # Show errors in the streams (for example, broken frames in MP3 files)?
  ShowStreamErrors = no

  # Ignore CRC errors in MP3 files?  Most players do that, so the default
  # value is 'yes'.
  #MP3IgnoreCRCErrors = yes

  # Set playback toggles.
  #Repeat = no
  #Shuffle = no
  AutoNext = yes

  # Default FormatString:
  #
  #   %n - Track number
  #   %a - Artist
  #   %A - Album
  #   %t - Title
  #   %(X:TRUE:FALSE) - Ternary expression: if X exists, do TRUE,
  #                     otherwise FALSE.  The escape character must
  #                     be doubled (i.e., '\\').  (See zshmisc
  #                     documentation for more information.)
  #
  #FormatString = "%(n:%n :)%(a:%a - :)%(t:%t:)%(A: \(%A\):)"

  # Input and output buffer sizes (in kilobytes).
  #InputBuffer = 512                  # Minimum value is 32KB
  #OutputBuffer = 512                 # Minimum value is 128KB

  # How much to fill the input buffer before playing (in kilobytes)?
  # This can't be greater than the value of InputBuffer.  While this has
  # a positive effect for network streams, it also causes the broadcast
  # audio to be delayed.
  #Prebuffering = 64

  # Use this HTTP proxy server for internet streams.  If not set, the
  # environment variables http_proxy and ALL_PROXY will be used if present.
  #
  # Format: HTTPProxy = PROXY_NAME:PORT
  #
  #HTTPProxy =

  # Sound driver - OSS, ALSA, JACK, SNDIO (on OpenBSD) or null (only for
  # debugging).  You can enter more than one driver as a colon-separated
  # list.  The first working driver will be used.
  SoundDriver = JACK:ALSA:OSS

  # Jack output settings.
  # JackClientName = "moc"
  # JackStartServer = no
  # JackOutLeft = "system:playback_1"
  # JackOutRight = "system:playback_2"

  # OSS output settings.
  #OSSDevice = /dev/dsp
  #OSSMixerDevice = /dev/mixer
  #OSSMixerChannel1 = pcm             # 'pcm', 'master' or 'speaker'
  #OSSMixerChannel2 = master          # 'pcm', 'master' or 'speaker'

  # ALSA output settings.  If you need to dump the audio produced by MOC
  # to a file for diagnostic purposes, the following setting of 'ALSADevice'
  # should do that:
  #
  #ALSADevice=tee:hw,'/tmp/out.wav',wav
  #
  #ALSADevice = default
  #ALSAMixer1 = PCM
  ALSAMixer2 = Master

  # Under some circumstances on 32-bit systems, audio played continously
  # for long periods of time may begin to stutter.  Setting this option to
  # 'yes' will force MOC to avoid ALSA's dmix resampling and prevent this
  # stutter.  But it also has other implications:
  #
  # - You may experience unacceptably high CPU load.
  # - ALSA's resampler plug-ins will not be used.
  # - The resampling may be of lower quality than ALSA would provide.
  # - You may need to try different "ResampleMethod" option settings.
  # - The "ForceSampleRate" option may be ineffective.
  # - If libsamplerate is not configured, many audios may be unplayable.
  #
  #ALSAStutterDefeat = no

  # Save software mixer state?
  # If enabled, a file 'softmixer' will be created in '~/.moc/' storing the
  # mixersetting set when the server is shut down.
  # Note that there is a "hidden" 'Amplification' setting in that file.
  # Amplification (0-200) is used to scale the mixer setting (0-100).  This
  # results in a higher signal amplitude but may also produce clipping.
  #Softmixer_SaveState = yes

  # Save equalizer state?
  # If enabled, a file 'equalizer' will be created in '~/.moc/' storing the
  # equalizer settings when the server is shut down.
  # Note that there is a "hidden" 'Mixin' setting in that file.
  # Mixin (0.0-1.0) is used to determine how much of the original signal is
  # used after equalizing.  0 means to only use the equalized sound, while 1
  # effectively disabled the mixer.  The default is 0.25.
  #Equalizer_SaveState = yes

  # Show files with dot at the beginning?
  #ShowHiddenFiles = no

  # Hide file name extensions?
  #HideFileExtension = no

  # Show file format in menu?
  #ShowFormat = yes

  # Show file time in menu?  Possible values: 'yes', 'no' and 'IfAvailable'
  # (meaning show the time only when it is already known, which often works
  # faster).
  #ShowTime = IfAvailable

  # Show time played as a percentage in the time progress bar.
  #ShowTimePercent = no

  # Values of the TERM environment variable which are deemed to be managed by
  # screen(1).  If you are setting a specific terminal using screen(1)'s
  # '-T <term>' option, then you will need to add 'screen.<term>' to this list.
  # Note that this is only a partial test; the value of the WINDOW environment
  # variable must also be a number (which screen(1) sets).
  #ScreenTerms = screen:screen-w:vt100

  # Values of the TERM environment variable which are deemed to be xterms.  If
  # you are using MOC within screen(1) under an xterm, then add screen(1)'s
  # TERM setting here as well to cause MOC to update the xterm's title.
  #XTerms = xterm
  #XTerms += xterm-colour:xterm-color
  #XTerms += xterm-256colour:xterm-256color
  #XTerms += rxvt:rxvt-unicode
  #XTerms += rxvt-unicode-256colour:rxvt-unicode-256color
  #XTerms += eterm

  # Theme file to use.  This can be absolute path or relative to
  # /usr/share/moc/themes/ (depends on installation prefix) or
  # ~/.moc/themes/ .
  #
  # Example:    Theme = laras_theme
  #
  Theme = nightly_enhanced

  # The theme used when running on an xterm.
  #
  # Example:    XTermTheme = transparent-background
  #
  #XTermTheme =

  # Should MOC try to autoload the default lyrics file for an audio?  (The
  # default lyrics file is a text file with the same file name as the audio
  # file name with any trailing "extension" removed.)
  #AutoLoadLyrics = yes

  # MOC directory (where pid file, socket and state files are stored).
  # You can use ~ at the beginning.
  #MOCDir = ~/.moc

  # Use mmap() to read files.  mmap() is much slower on NFS.
  #UseMMap = no

  # Use MIME to identify audio files.  This can make for slower loading
  # of playlists but is more accurate than using "extensions".
  #UseMimeMagic = no

  # Assume this encoding for ID3 version 1/1.1 tags (MP3 files).  Unlike
  # ID3v2, UTF-8 is not used here and MOC can't guess how tags are encoded.
  # Another solution is using librcc (see the next option).  This option is
  # ignored if UseRCC is set to 'yes'.
  #ID3v1TagsEncoding = WINDOWS-1250

  # Use librcc to fix ID3 version 1/1.1 tags encoding.
  #UseRCC = yes

  # Use librcc to filenames and directory names encoding.
  #UseRCCForFilesystem = yes

  # When this option is set the player assumes that if the encoding of
  # ID3v2 is set to ISO-8859-1 then the ID3v1TagsEncoding is actually
  # that and applies appropriate conversion.
  #EnforceTagsEncoding = no

  # Enable the conversion of filenames from the local encoding to UTF-8.
  #FileNamesIconv = no

  # Enable the conversion of the xterm title from UTF-8 to the local encoding.
  #NonUTFXterm = no

  # Should MOC precache files to assist gapless playback?
  #Precache = yes

  # Remember the playlist after exit?
  #SavePlaylist = yes

  # When using more than one client (interface) at a time, do they share
  # the playlist?
  #SyncPlaylist = yes

  # Choose a keymap file (relative to '~/.moc/' or using an absolute path).
  # An annotated example keymap file is included ('keymap.example').
  #
  # Example:    Keymap = my_keymap
  #
  Keymap = keymap

  # Use ASCII rather than graphic characters for drawing lines.  This
  # helps on some terminals.
  #ASCIILines = no

  # FastDirs, these allow you to jump directly to a directory, the key
  # bindings are in the keymap file.
  #
  # Examples:   Fastdir1 = /mp3/rock
  #             Fastdir2 = /mp3/electronic
  #             Fastdir3 = /mp3/rap
  #             Fastdir4 = /mp3/etc
  #
  #Fastdir1 =
  #Fastdir2 =
  #Fastdir3 =
  #Fastdir4 =
  #Fastdir5 =
  #Fastdir6 =
  #Fastdir7 =
  #Fastdir8 =
  #Fastdir9 =
  #Fastdir10 =

  # How fast to seek (in number of seconds per keystroke).  The first
  # option is for normal seek and the second for silent seek.
  #SeekTime = 1
  #SilentSeekTime = 5

  # PreferredDecoders allows you to specify which decoder should be used
  # for any given audio format.  It is a colon-separated list in which
  # each entry is of the general form 'code(decoders)', where 'code'
  # identifies the audio format and 'decoders' is a comma-separated list
  # of decoders in order of preference.
  #
  # The audio format identifier may be either a filename extension or a
  # MIME media type.  If the latter, the format is 'type/subtype' (e.g.,
  # 'audio/flac').  Because different systems may give different MIME
  # media types, any 'x-' prefix of the subtype is ignored both here and
  # in the actual file MIME type (so all combinations of 'audio/flac' and
  # 'audio/x-flac' match each other).
  #
  # For Internet streams the matching is done on MIME media type and on
  # actual content.  For files the matches are made on MIME media type
  # (if the 'UseMimeMagic' option is set) and on filename extension.  The
  # MIME media type of a file is not determined until the first entry for
  # MIME is encountered in the list.
  #
  # The matching is done in the order of appearance in the list with any
  # entries added from the command line being matched before those listed
  # here.  Therefore, if you place all filename extension entries before
  # all MIME entries you will speed up MOC's processing of directories
  # (which could be significant for remote file systems).
  #
  # The decoder list may be empty, in which case no decoders will be used
  # for files (and files with that audio format ignored) while Internet
  # streams will be assessed on the actual content.  Any decoder position
  # may contain an asterisk, in which case any decoder not otherwise listed
  # which can handle the audio format will be used.  It is not an error to
  # list the same decoder twice, but neither does it make sense to do so.
  #
  # If you have a mix of audio and non-audio files in your directories, you
  # may wish to include entries at top of the list which ignore non-audio
  # files by extension.
  #
  # In summary, the PreferredDecoders option provides fine control over the
  # type of matching which is performed (filename extension, MIME media
  # type and streamed media content) and which decoder(s) (if any) are used
  # based on the option's list entries and their ordering.
  #
  # Examples:   aac(aac,ffmpeg)             first try FAAD2 for AACs then FFmpeg
  #             mp3()                       ignore MP3 files
  #             wav(*,sndfile)              use sndfile for WAV as a last resort
  #             ogg(vorbis,*):flac(flac,*)  try Xiph decoders first
  #             ogg():audio/ogg()           ignore OGG files, and
  #                                         force Internet selection by content
  #             gz():html()                 ignore some non-audio files
  #
  # Any unspecified audio formats default to trying all decoders.
  # Any unknown (or misspelt) drivers are ignored.
  # All names are case insensitive.
  # The default setting reflects the historical situation modified by
  # the experience of users.
  #
  #PreferredDecoders  = aac(aac,ffmpeg):m4a(ffmpeg)
  #PreferredDecoders += mpc(musepack,*,ffmpeg):mpc8(musepack,*,ffmpeg)
  #PreferredDecoders += sid(sidplay2):mus(sidplay2)
  #PreferredDecoders += wav(sndfile,*,ffmpeg)
  #PreferredDecoders += wv(wavpack,*,ffmpeg)
  #PreferredDecoders += audio/aac(aac):audio/aacp(aac):audio/m4a(ffmpeg)
  #PreferredDecoders += audio/wav(sndfile,*)

  # The following PreferredDecoders attempt to handle the ambiguity surrounding
  # container types such as OGG for files.  The first two entries will force
  # a local file to the correct decoder (assuming the .ogg file contains Vorbis
  # audio), while the MIME media types will cause Internet audio streams to
  # be assessed on content (which may be either Vorbis or Speex).
  #
  #PreferredDecoders += ogg(vorbis,ffmpeg):oga(vorbis,ffmpeg):ogv(ffmpeg)
  #PreferredDecoders += opus(ffmpeg)
  #PreferredDecoders += spx(speex)
  #PreferredDecoders += application/ogg(vorbis):audio/ogg(vorbis)

  # Which resampling method to use.  There are a few methods of resampling
  # sound supported by libresamplerate.  The default is 'Linear') which is
  # also the fastest.  A better description can be found at:
  #
  #    http://www.mega-nerd.com/libsamplerate/api_misc.html#Converters
  #
  # but briefly, the following methods are based on bandlimited interpolation
  # and are higher quality, but also slower:
  #
  #    SincBestQuality   - really slow (I know you probably have an xx GHz
  #                        processor, but it's still not enough to not see
  #                        this in the top output :)  The worst case
  #                        Signal-to-Noise Ratio is 97dB.
  #    SincMediumQuality - much faster.
  #    SincFastest       - the fastest bandlimited interpolation.
  #
  # And these are lower quality, but much faster methods:
  #
  #    ZeroOrderHold - really poor quality, but it's really fast.
  #    Linear - a bit better and a bit slower.
  #
  #ResampleMethod = Linear

  # Always use this sample rate (in Hz) when opening the audio device (and
  # resample the sound if necessary).  When set to 0 the device is opened
  # with the file's rate.
  #ForceSampleRate = 0

  # By default, even if the sound card reports that it can output 24bit samples
  # MOC converts 24bit PCM to 16bit.  Setting this option to 'yes' allows MOC
  # to use 24bit output.  (The MP3 decoder, for example, uses this format.)
  # This is disabled by default because there were reports that it prevents
  # MP3 files from playing on some soundcards.
  #Allow24bitOutput = no

  # Use realtime priority for output buffer thread.  This will prevent gaps
  # while playing even with heavy load.  The user who runs MOC must have
  # permissions to set such a priority.  This could be dangerous, because it
  # is possible that a bug in MOC will freeze your computer.
  #UseRealtimePriority = no

  # The number of audio files for which MOC will cache tags.  When this limit
  # is reached, file tags are discarded on a least recently used basis (with
  # one second resolution).  You can disable the cache by giving it a size of
  # zero.  Note that if you decrease the cache size below the number of items
  # currently in the cache, the number will not decrease immediately (if at
  # all).
  #TagsCacheSize = 256

  # Number items in the playlist.
  #PlaylistNumbering = yes

  # Main window layouts can be configured.  You can change the position and
  # size of the menus (directory and playlist).  You have three layouts and
  # can switch between then using the 'l' key (standard mapping).  By default,
  # only two layouts are configured.
  #
  # The format is as follows:
  #
  #     - Each layout is described as a list of menu entries.
  #     - Each menu entry is of the form:
  #
  #           menu(position_x, position_y, width, height)
  #
  #       where 'menu' is either 'directory' or 'playlist'.
  #     - The parameters define position and size of the menu.  They can
  #       be absolute numbers (like 10) or a percentage of the screen size
  #       (like 45%).
  #     - 'width' and 'height' can have also value of 'FILL' which means
  #        fill the screen from the menu's position to the border.
  #     - Menus may overlap.
  #
  # You must describe at least one menu (default is to fill the whole window).
  # There must be at least one layout (Layout1) defined; others can be empty.
  #
  # Example:    Layout1 = playlist(50%,50%,50%,50%)
  Layout1 = directory(0,0,100%,100%):playlist(0,0,100%,100%)
  CanStartInPlaylist = yes
  #             Layout3 = ""
  #
  #             Just one layout, the directory will occupy the whole
  #             screen, the playlist will have 1/4 of the screen size
  #             and be positioned at lower right corner.  (Note that
  #             because the playlist will be hidden by the directory
  #             you will have to use the TAB key to make the playlist
  #             visible.)
  #
  # Example:    Layout1 = playlist(0,0,100%,10):directory(0,10,100%,FILL)
  #
  #             The screen is split into two parts: playlist at the top
  #             and the directory menu at the bottom.  Playlist will
  #             occupy 10 lines and the directory menu the rest.
  #
  #Layout1 = directory(0,0,50%,100%):playlist(50%,0,FILL,100%)
  #Layout2 = directory(0,0,100%,100%):playlist(0,0,100%,100%)
  #Layout3 = ""

  # When the song changes, should the menu be scrolled so that the currently
  # played file is visible?
  #FollowPlayedFile = yes

  # What to do if the interface was started and the server is already playing
  # something from the playlist?  If CanStartInPlaylist is set to 'yes', the
  # interface will switch to the playlist.  When set to 'no' it will start
  # from the last directory.
  #CanStartInPlaylist = yes

  # Executing external commands (1 - 10) invoked with key commands (F1 - F10
  # by default).
  #
  # Some arguments are substituted before executing:
  #
  #     %f - file path
  #     %i - title made from tags
  #     %S - start block mark (in seconds)
  #     %E - end block mark (in seconds)
  #
  # Data from tags can also be substituted:
  #
  #     %t - title
  #     %a - album
  #     %r - artist
  #     %n - track
  #     %m - time of the file (in seconds)
  #
  # The parameters above apply to the currently selected file.  If you change
  # them to capital letters, they are taken from the file currently playing.
  #
  # Programs are run using execv(), not a shell, so you can't do things like
  # redirecting the output to a file.  The command string is split using blank
  # characters as separators; the first element is the command to be executed
  # and the rest are its parameters, so if you use "echo Playing: %I" we run
  # program 'echo' (from $PATH) with 2 parameters: the string 'Playing:' and
  # the title of the file currently playing.  Even if the title contains
  # spaces, it's still one parameter and it's safe if it contains `rm -rf /`.
  #
  # Examples:   ExecCommand1 = "cp %f /mnt/usb_drive"
  #             ExecCommand2 = "/home/joe/now_playing %I"
  #
  #ExecCommand1 =
  #ExecCommand2 =
  #ExecCommand3 =
  #ExecCommand4 =
  #ExecCommand5 =
  #ExecCommand6 =
  #ExecCommand7 =
  #ExecCommand8 =
  #ExecCommand9 =
  #ExecCommand10 =

  # Display the cursor in the line with the selected file.  Some braille
  # readers (the Handy Tech modular series ZMU 737, for example) use the
  # cursor to focus and can make use of it to present the file line even
  # when other fields are changing.
  #UseCursorSelection = no

  # Set the terminal title when running under xterm.
  #SetXtermTitle = yes

  # Set the terminal title when running under screen(1).  If MOC can detect
  # that it is running under screen(1), then it will set an appropriate
  # title (see description of ScreenTerms above).  However, if multiple
  # levels of screen management are involved, detection might fail and this
  # could cause a screen upset.  In that situation you can use this option
  # to force screen titles off.
  #SetScreenTitle = yes

  # Display full paths instead of just file names in the playlist.
  #PlaylistFullPaths = yes

  # The following setting describes how block markers are displayed in
  # the play time progress bar.  Its value is a string of exactly three
  # characters.  The first character is displayed in a position which
  # corresponds to the time marked as the start of a block and the last
  # character to the time marked as the end of the block.  The middle
  # character is displayed instead if both the start and the end of the block
  # would fall in the same position (within the resolution of the interface).
  # You can turn off the displaying of these block marker positions by using
  # three space characters.
  #BlockDecorators = "`\"'"

  # How long (in seconds) to leave a message displayed on the screen.
  # Setting this to a high value allows you to scroll through the messages
  # using the 'hide_message' key.  Setting it to zero means you'll have to
  # be quick to see any message at all.  Any new messages will be queued up
  # and displayed after the current message's linger time expires.
  #MessageLingerTime = 3

  # Does MOC display a prefix on delayed messages indicating
  # the number of queued messages still to be displayed?
  #PrefixQueuedMessages = yes

  # String to append to the queued message count if any
  # error messages are still waiting to be displayed.
  #ErrorMessagesQueued = "!"

  # Self-describing ModPlug options (with 'yes' or 'no' values).
  #ModPlug_Oversampling = yes
  #ModPlug_NoiseReduction = yes
  #ModPlug_Reverb = no
  #ModPlug_MegaBass = no
  #ModPlug_Surround = no

  # ModPlug resampling mode.
  # Valid values are:
  #
  #     FIR -      8 tap fir filter (extremely high quality)
  #     SPLINE -   Cubic spline interpolation (high quality)
  #     LINEAR -   Linear interpolation (fast, good quality)
  #     NEAREST -  No interpolation (very fast, extremely bad sound quality)
  #
  #ModPlug_ResamplingMode = FIR

  # Other self-describing ModPlug audio characteristic options.
  # (Note that the 32 bit sample size seems to be buggy.)
  #ModPlug_Channels = 2               # 1 or 2 channels
  #ModPlug_Bits = 16                  # 8, 16 or 32 bits
  #ModPlug_Frequency = 44100          # 11025, 22050, 44100 or 48000 Hz
  #ModPlug_ReverbDepth = 0            # 0 (quiet) to 100 (loud)
  #ModPlug_ReverbDelay = 0            # Delay in ms (usually 40-200ms)
  #ModPlug_BassAmount = 0             # 0 (quiet) to 100 (loud).
  #ModPlug_BassRange = 10             # Cutoff in Hz (10-100).
  #ModPlug_SurroundDepth = 0          # Surround level 0(quiet)-100(heavy).
  #ModPlug_SurroundDelay = 0          # Surround delay in ms, usually 5-40ms.
  #ModPlug_LoopCount = 0              # 0 (never), n (times) or -1 (forever)

  # Self-describing TiMidity audio characteristic options.
  #TiMidity_Rate = 44100              # Between 8000 and 48000
  #TiMidity_Bits = 16                 # 8 or 16
  #TiMidity_Channels = 2              # 1 or 2
  #TiMidity_Volume = 100              # 0 to 800

  # You can setup a TiMidity-Config-File here.
  # Leave it unset to use library defaults (/etc/timidity.cfg mostly).
  # Setting it to 'yes' also uses the library defaults.
  # Set it to 'no' if you don't have any configuration file.
  # Otherwise set it to the name of a specific file.
  #TiMidity_Config =

  # Self-describing SidPlay2 audio characteristic options.
  #SidPlay2_DefaultSongLength = 180   # If not in database (in seconds)
  #SidPlay2_MinimumSongLength = 0     # Play at least n (in seconds)
  #SidPlay2_Frequency = 44100         # 4000 to 48000
  #SidPlay2_Bits = 16                 # 8 or 16
  #SidPlay2_Optimisation = 0          # 0 (worst quality) to 2 (best quality)

  # Set path to a HVSC-compatible database (if not set, database is disabled).
  #SidPlay2_Database =

  # SidPlay2 playback Mode:
  #
  #     "M": Mono (best for many SIDs)
  #     "S": Stereo
  #     "L"/"R": Left / Right
  #
  #SidPlay2_PlayMode = "M"

  # Use start-song information from SID ('yes') or start at first song
  # ('no').  Songs before the start-song won't be played.  (Note that this
  # option previously took the values 1 and 0; these are now deprecated
  # in favour of 'yes' and 'no'.)
  #SidPlay2_StartAtStart = yes

  # Play sub-tunes.  (Note that this option previously took the values 1
  # and 0; these are now deprecated in favour of 'yes' and 'no'.)
  #SidPlay2_PlaySubTunes = yes

  # Run the OnSongChange command when a new song starts playing.
  # Specify the full path (i.e. no leading '~') of an executable to run.
  # Arguments will be passed, and you can use the following escapes:
  #
  #     %a artist
  #     %r album
  #     %f filename
  #     %t title
  #     %n track
  #     %d file duration in XX:YY form
  #     %D file duration, number of seconds
  #
  # No pipes/redirects can be used directly, but writing a shell script
  # can do the job.
  #
  # Example:    OnSongChange = "/home/jack/.moc/myscript %a %r"
  #
  #OnSongChange =

  # If RepeatSongChange is 'yes' then MOC will execute the command every time
  # a song starts playing regardless of whether or not it is just repeating.
  # Otherwise the command will only be executed when a different song is
  # started.
  #RepeatSongChange = no

  # Run the OnStop command (full path, no arguments) when MOC changes state
  # to stopped (i.e., when user stopped playing or changes a song).
  #OnStop = "/home/jack/.moc/myscript_on_stop"

  # This option determines which song to play after finishing all the songs
  # in the queue.  Setting this to 'yes' causes MOC to play the song which
  # follows the song being played before queue playing started. If set to
  # 'no', MOC will play the song following the last song in the queue if it
  # is in the playlist.  The default is 'yes' because this is the way other
  # players usually behave.  (Note that this option previously took the
  # values 1 and 0; these are now deprecated in favour of 'yes' and 'no'.)
  #QueueNextSongReturn = yes
#+end_src

** Keymap
#+begin_src fundamental :tangle ~/.moc/keymap
  # MOC control keys:
  quit_client           = q
  quit                  = Q

  # Menu and interface control keys:
  go                    = f
  menu_down             = n
  menu_up               = p
  menu_page_down        = PAGE_DOWN
  menu_page_up          = PAGE_UP
  menu_first_item       = HOME
  menu_last_item        = END
  search_menu           = g /
  toggle_read_tags      = F
  toggle_show_time      = ^t
  toggle_show_format    = ^f
  toggle_menu           = TAB
  toggle_layout         = L
  #toggle_hidden_files   = H
  next_search           = ^g ^n
  #show_lyrics           = L
  theme_menu            = T
  help                  = H ?
  refresh               = ^r
  reload                = r

  # Audio playing and positioning keys:
  seek_forward          = RIGHT
  seek_backward         = LEFT
  seek_forward_fast     = ]
  seek_backward_fast    = [
  pause                 = SPACE
  stop                  = s
  next                  = N
  previous              = P
  toggle_shuffle        = S
  toggle_repeat         = R
  toggle_auto_next      = X
  toggle_mixer          = x
  go_url                = o

  # Volume control keys:
  volume_down_1         = <
  volume_up_1           = >
  volume_down_5         = ,
  volume_up_5           = .
  volume_10             = M-1
  volume_20             = M-2
  volume_30             = M-3
  volume_40             = M-4
  volume_50             = M-5
  volume_60             = M-6
  volume_70             = M-7
  volume_80             = M-8
  volume_90             = M-9

  # Directory navigation keys: defaults are Shift-number
  #                            (i.e., 'shift 1' -> '!' -> 'Fastdir1').
  go_to_a_directory     = i
  go_to_music_directory = m
  go_to_fast_dir1       = !
  go_to_fast_dir2       = @
  go_to_fast_dir3       = #
  go_to_fast_dir4       = $
  go_to_fast_dir5       = %
  go_to_fast_dir6       = ^
  go_to_fast_dir7       = &
  go_to_fast_dir8       = *
  go_to_fast_dir9       = (
  go_to_fast_dir10      = )
  go_to_playing_file    = G
  go_up                 = b

  # Playlist specific keys:
  add_file              = a
  add_directory         = A
  plist_add_stream      = ^u
  delete_from_playlist  = d
  #playlist_full_paths   = P
  plist_move_up         = u
  #plist_move_down       = j
  save_playlist         = V
  remove_dead_entries   = Y
  clear_playlist        = C

  # Queue manipulation keys:
  enqueue_file          = z
  clear_queue           = Z

  # User interaction control:
  history_up            = UP
  history_down          = DOWN
  delete_to_start       = ^u
  delete_to_end         = ^k
  cancel                = ^x ESCAPE
  hide_message          = M

  # Softmixer specific keys:
  toggle_softmixer      = w
  toggle_make_mono      = J

  # Equalizer specific keys:
  toggle_equalizer      = E
  equalizer_refresh     = e
  equalizer_prev        = K
  #equalizer_next        = k

  # External commands:
  mark_start            = '
  mark_end              = "
  exec_command1         = F1
  exec_command2         = F2
  exec_command3         = F3
  exec_command4         = F4
  exec_command5         = F5
  exec_command6         = F6
  exec_command7         = F7
  exec_command8         = F8
  exec_command9         = F9
  exec_command10        = F10

  # The following commands are available but not assigned to any keys by
  # default:
  #
  #   toggle_percent	 Switch on/off play progress bar time percentage
  #
  
#+end_src

** Themes
*** Nightly
#+begin_src fundamental :tangle ~/.moc/themes/nightly_enhanced
  ##############################################################################
  #
  # this is a modification of the
  # nightly theme by Wim Speekenbrink <w.speek@wanadoo.nl>
  #
  ##############################################################################

  background           = blue    default
  frame                = blue    default bold
  window_title         = blue    default bold
  directory            = blue    default bold
  selected_directory   = black   magenta
  playlist             = blue    default bold
  selected_playlist    = black   magenta
  file                 = blue    default bold
  selected_file        = black   magenta
  marked_file          = green   default bold
  marked_selected_file = magenta default bold
  info                 = green   default bold
  selected_info        = black   magenta
  marked_info          = green   default bold
  marked_selected_info = green   default bold
  status               = blue    default bold
  title                = green   default bold
  state                = blue    default bold
  current_time         = magenta default bold
  time_left            = magenta default bold
  total_time           = magenta default bold
  time_total_frames    = blue    default bold
  sound_parameters     = magenta default bold
  legend               = blue    default bold
  disabled             = black   default
  enabled              = blue    default bold
  empty_mixer_bar      = blue    default bold
  filled_mixer_bar     = black   magenta
  empty_time_bar       = blue    default bold
  filled_time_bar      = black   magenta
  entry                = green   default bold
  entry_title          = green   default bold
  error                = red     default bold
  message              = green   default bold
  plist_time           = green   default bold
#+end_src

* iSync
#+begin_src conf :tangle ~/.mbsyncrc
  IMAPAccount public
  Host mail.gandi.net
  Port 993
  User public@thanosapollo.com
  PassCmd "pass show gandi/thanosapollo"
  SSLType IMAPS
  SSLVersions TLSv1.2
  CertificateFile /etc/ssl/certs/ca-certificates.crt

  IMAPStore public-remote
  Account public

  MaildirStore public-local
  Path ~/Mail/Public/
  Inbox ~/Mail/Public/Inbox
  Trash ~/Mail/Public/Trash/
  SubFolders Verbatim

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