#+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 smtpserver = smtp.fastmail.com smtpuser = public@thanosapollo.com smtpencryption = ssl smtpserverport = 465 annotate = yes [credential "smtp://smtp.fastmail.com:465"] helper = "!f() { echo username=public@thanosapollo.com; echo \"password=$(pass show fastmail.com/thanosapollo.com | sed -n '3p')\"; }; 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/wallpaper-cyberpunk2.jpg wallpaper = DP-1, ~/wallpapers/wallpaper-cyberpunk.jpg wallpaper = HDMI-A-1, ~/wallpapers/wallpaper-cyberpunk.jpg wallpaper = LVDS-1, ~/wallpapers/wallpaper-cyberpunk.jpg #+end_src * Waybar ** Configuration #+begin_src conf :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": "{:%Y %B}\n{calendar}" }, "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 ' option, then you will need to add 'screen.' 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 # ############################################################################## 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 fastmail Host imap.fastmail.com Port 993 User public@thanosapollo.com PassCmd "pass show fastmail.com/thanosapollo.com | sed -n '3p'" SSLType IMAPS SSLVersions TLSv1.2 CertificateFile /etc/ssl/certs/ca-certificates.crt IMAPStore fastmail-remote Account fastmail MaildirStore fastmail-local Path ~/Mail/Fastmail/ Inbox ~/Mail/Fastmail/Inbox Trash ~/Mail/Fastmail/Trash/ SubFolders Verbatim Channel fastmail Far :fastmail-remote: Near :fastmail-local: Patterns * Expunge None CopyArrivalDate yes Sync All Create Both SyncState * #+end_src