diff options
-rw-r--r-- | .config/ardour8/config | 357 | ||||
-rw-r--r-- | .config/env | 17 | ||||
-rw-r--r-- | .config/mimeapps.list | 6 | ||||
-rw-r--r-- | .config/newsboat/config | 12 | ||||
-rwxr-xr-x | .config/nnn/plugins/joe_clipper | 76 | ||||
-rwxr-xr-x | .config/nnn/plugins/preview-tui | 538 | ||||
-rw-r--r-- | .config/zsh/alias.zsh | 14 | ||||
-rwxr-xr-x | .local/bin/dmlog | 7 | ||||
-rw-r--r-- | .local/share/applications/bat-joe.desktop | 4 | ||||
-rw-r--r-- | .local/share/applications/nsxiv-joe.desktop (renamed from .local/applications/nsxiv-joe.desktop) | 2 |
10 files changed, 658 insertions, 375 deletions
diff --git a/.config/ardour8/config b/.config/ardour8/config deleted file mode 100644 index b338143..0000000 --- a/.config/ardour8/config +++ /dev/null @@ -1,357 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Ardour> - <Config> - <Option name="preferred_time_domain" value="AudioTime"/> - <Option name="auto-connect-standard-busses" value="1"/> - <Option name="output-auto-connect" value="AutoConnectMaster"/> - <Option name="input-auto-connect" value="AutoConnectPhysical"/> - <Option name="strict-io" value="1"/> - <Option name="port-resampler-quality" value="17"/> - <Option name="work-around-jack-no-copy-optimization" value="1"/> - <Option name="tracks-auto-naming" value="UseDefaultNames"/> - <Option name="transport-masters-just-roll-when-sync-lost" value="0"/> - <Option name="midi-clock-sets-tempo" value="1"/> - <Option name="trace-midi-input" value="0"/> - <Option name="trace-midi-output" value="0"/> - <Option name="send-mtc" value="0"/> - <Option name="send-mmc" value="0"/> - <Option name="send-midi-clock" value="0"/> - <Option name="midi-clock-resolution" value="1"/> - <Option name="mmc-control" value="1"/> - <Option name="midi-feedback" value="0"/> - <Option name="mmc-receive-device-id" value="127"/> - <Option name="mmc-send-device-id" value="0"/> - <Option name="initial-program-change" value="-1"/> - <Option name="display-first-midi-bank-as-zero" value="0"/> - <Option name="inter-scene-gap-samples" value="1"/> - <Option name="midi-input-follows-selection" value="1"/> - <Option name="default-trigger-input-port" value=""/> - <Option name="run-all-transport-masters-always" value="1"/> - <Option name="mtc-qf-speed-tolerance" value="5"/> - <Option name="timecode-sync-frame-rate" value="1"/> - <Option name="send-ltc" value="0"/> - <Option name="ltc-send-continuously" value="1"/> - <Option name="ltc-output-port" value=""/> - <Option name="ltc-output-volume" value="0.1258929967880249"/> - <Option name="feedback-interval-ms" value="100"/> - <Option name="use-tranzport" value="0"/> - <Option name="auto-enable-surfaces" value="1"/> - <Option name="minimum-disk-read-bytes" value="262144"/> - <Option name="minimum-disk-write-bytes" value="262144"/> - <Option name="buffering-preset" value="Medium"/> - <Option name="capture-buffer-seconds" value="10"/> - <Option name="playback-buffer-seconds" value="10"/> - <Option name="midi-track-buffer-seconds" value="1"/> - <Option name="disk-choice-space-threshold" value="57600000"/> - <Option name="auto-analyse-audio" value="0"/> - <Option name="transient-sensitivity" value="50"/> - <Option name="max-transport-speed" value="2"/> - <Option name="osc-port" value="3819"/> - <Option name="use-osc" value="0"/> - <Option name="layer-model" value="Manual"/> - <Option name="automation-follows-regions" value="1"/> - <Option name="region-boundaries-from-selected-tracks" value="1"/> - <Option name="region-boundaries-from-onscreen_tracks" value="1"/> - <Option name="default-fade-shape" value="FadeConstantPower"/> - <Option name="range-selection-after-split" value=""/> - <Option name="region-selection-after-split" value="None"/> - <Option name="interview-editing" value="0"/> - <Option name="mute-affects-pre-fader" value="0"/> - <Option name="mute-affects-post-fader" value="1"/> - <Option name="mute-affects-control-outs" value="1"/> - <Option name="mute-affects-main-outs" value="1"/> - <Option name="mute-affects-surround-sends" value="1"/> - <Option name="monitoring-model" value="ExternalMonitoring"/> - <Option name="listen-position" value="AfterFaderListen"/> - <Option name="pfl-position" value="PFLFromAfterProcessors"/> - <Option name="afl-position" value="AFLFromAfterProcessors"/> - <Option name="use-monitor-bus" value="0"/> - <Option name="solo-control-is-listen-control" value="0"/> - <Option name="exclusive-solo" value="0"/> - <Option name="latched-record-enable" value="0"/> - <Option name="all-safe" value="0"/> - <Option name="show-solo-mutes" value="1"/> - <Option name="solo-mute-override" value="0"/> - <Option name="auto-input-does-talkback" value="0"/> - <Option name="use-master-volume" value="0"/> - <Option name="solo-mute-gain" value="0"/> - <Option name="monitor-bus-preferred-bundle" value=""/> - <Option name="quieten-at-speed" value="1"/> - <Option name="link-send-and-route-panner" value="1"/> - <Option name="midi-audition-synth-uri" value="@default@"/> - <Option name="clicking" value="0"/> - <Option name="click-record-only" value="0"/> - <Option name="click-sound" value=""/> - <Option name="click-emphasis-sound" value=""/> - <Option name="click-gain" value="1"/> - <Option name="use-click-emphasis" value="1"/> - <Option name="skip-playback" value="1"/> - <Option name="plugins-stop-with-transport" value="0"/> - <Option name="recording-resets-xrun-count" value="0"/> - <Option name="stop-recording-on-xrun" value="0"/> - <Option name="create-xrun-marker" value="0"/> - <Option name="stop-at-session-end" value="0"/> - <Option name="preroll-seconds" value="-2"/> - <Option name="loop-is-mode" value="0"/> - <Option name="loop-fade-choice" value="XFadeLoop"/> - <Option name="shuttle-speed-factor" value="1"/> - <Option name="shuttle-speed-threshold" value="5"/> - <Option name="shuttle-units" value="Percentage"/> - <Option name="shuttle-max-speed" value="8"/> - <Option name="mmc-fast-wind-op" value="FastWindVarispeed"/> - <Option name="locate-while-waiting-for-sync" value="0"/> - <Option name="disable-disarm-during-roll" value="0"/> - <Option name="auto-return-target-list" value="LastLocate,RangeSelectionStart,Loop,RegionSelectionStart"/> - <Option name="reset-default-speed-on-stop" value="0"/> - <Option name="rewind-ffwd-like-tape-decks" value="1"/> - <Option name="auto-return-after-rewind-ffwd" value="0"/> - <Option name="meter-falloff" value="13.300000190734863"/> - <Option name="meter-type-master" value="MeterK14"/> - <Option name="meter-type-track" value="MeterPeak"/> - <Option name="meter-type-bus" value="MeterPeak"/> - <Option name="try-autostart-engine" value="1"/> - <Option name="hide-dummy-backend" value="1"/> - <Option name="copy-demo-sessions" value="1"/> - <Option name="auditioner-output-left" value="default"/> - <Option name="auditioner-output-right" value="default"/> - <Option name="replicate-missing-region-channels" value="1"/> - <Option name="deprecated-hiding-groups-deactivates-groups" value="0"/> - <Option name="group-override-inverts" value="1"/> - <Option name="verify-remove-last-capture" value="1"/> - <Option name="save-history" value="1"/> - <Option name="save-history-depth" value="20"/> - <Option name="history-depth" value="20"/> - <Option name="region-equivalency" value="LayerTime"/> - <Option name="periodic-safety-backups" value="1"/> - <Option name="periodic-safety-backup-interval" value="120"/> - <Option name="automation-interval-msecs" value="30"/> - <Option name="default-session-parent-dir" value="/home/jozan/mix/joe"/> - <Option name="clip-library-dir" value="/home/jozan/.local/share/sounds/clips"/> - <Option name="sample-lib-path" value=""/> - <Option name="allow-special-bus-removal" value="0"/> - <Option name="processor-usage" value="-1"/> - <Option name="cpu-dma-latency" value="-1"/> - <Option name="io-thread-count" value="-2"/> - <Option name="io-thread-policy" value="0"/> - <Option name="max-gain" value="2"/> - <Option name="max-recent-sessions" value="10"/> - <Option name="max-recent-templates" value="10"/> - <Option name="automation-thinning-factor" value="20"/> - <Option name="range-location-minimum" value="128"/> - <Option name="edit-mode" value="Lock"/> - <Option name="ripple-mode" value="RippleSelected"/> - <Option name="default-automation-time-domain" value="BeatTime"/> - <Option name="mark-at-pgm-change" value="1"/> - <Option name="locate-to-pgm-change" value="1"/> - <Option name="new-plugins-active" value="1"/> - <Option name="use-plugin-own-gui" value="1"/> - <Option name="use-windows-vst" value="1"/> - <Option name="use-lxvst" value="1"/> - <Option name="use-macvst" value="1"/> - <Option name="use-audio-units" value="1"/> - <Option name="use-vst3" value="1"/> - <Option name="discover-plugins-on-start" value="0"/> - <Option name="verbose-plugin-scan" value="0"/> - <Option name="conceal-lv1-if-lv2-exists" value="1"/> - <Option name="conceal-vst2-if-vst3-exists" value="1"/> - <Option name="show-vst3-micro-edit-inline" value="1"/> - <Option name="ask-replace-instrument" value="1"/> - <Option name="ask-setup-instrument" value="1"/> - <Option name="setup-sidechain" value="0"/> - <Option name="plugin-scan-timeout" value="150"/> - <Option name="limit-n-automatables" value="512"/> - <Option name="plugin-cache-version" value="7002"/> - <Option name="tail-duration-sec" value="2"/> - <Option name="max-tail-samples" value="4294967295"/> - <Option name="plugin-path-vst" value="/usr/local/lib/vst:/usr/lib/vst"/> - <Option name="plugin-path-lxvst" value="/usr/local/lib64/lxvst:/usr/local/lib/lxvst:/usr/lib64/lxvst:/usr/lib/lxvst:/usr/local/lib64/linux_vst:/usr/local/lib/linux_vst:/usr/lib64/linux_vst:/usr/lib/linux_vst:/usr/lib/vst:/usr/local/lib/vst"/> - <Option name="plugin-path-vst3" value=""/> - <Option name="denormal-protection" value="0"/> - <Option name="denormal-model" value="DenormalFTZDAZ"/> - <Option name="pingback-url" value="http://community.ardour.org/pingback/ignored/"/> - <Option name="tutorial-manual-url" value="http://ardour.org/tutorial"/> - <Option name="reference-manual-url" value="http://manual.ardour.org/"/> - <Option name="updates-url" value="http://ardour.org/whatsnew.html"/> - <Option name="donate-url" value="http://community.ardour.org/donate"/> - <Option name="resource-index-url" value="http://ardour.org/libraries.xml"/> - <Option name="xjadeo-binary" value=""/> - <Option name="video-advanced-setup" value="0"/> - <Option name="video-server-url" value="http://127.0.0.1:1554"/> - <Option name="video-server-docroot" value="/"/> - <Option name="show-video-server-dialog" value="0"/> - <Option name="export-preroll" value="2"/> - <Option name="export-silence-threshold" value="-90"/> - <Option name="ppqn-factor-for-export" value="1"/> - </Config> - <Metadata/> - <Extra> - <Keyboard copy-modifier="4" edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="8" snap-delta-modifier="67108936" insert-note-button="1" insert-note-modifier="4" constraint-modifier="1" slip-contents-modifier="5" trim-overlap-modifier="1" trim-anchored-modifier="5" fine-adjust-modifier="12" push-points-modifier="67108932" note-size-relative-modifier="1"/> - <UI status-bar="Name,Format,Audio,DSP"> - <Window name="key-editor" visible="0" x-off="1805" y-off="288" x-size="819" y-size="480"/> - <Window name="session-options-editor" visible="0" x-off="3748" y-off="0" x-size="913" y-size="462"/> - <Window name="speaker-config" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="about" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="add-routes" visible="0" x-off="-1" y-off="-1" x-size="866" y-size="509"/> - <Window name="add-video" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="inspector" visible="0" x-off="1847" y-off="186" x-size="620" y-size="591"/> - <Window name="audio-midi-setup" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="video-export" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="script-manager" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="bundle-manager" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="locations" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="big-clock" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="big-transport" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="virtual-keyboard" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="library-downloader" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="audio-connection-manager" visible="0" x-off="616" y-off="317" x-size="712" y-size="482"/> - <Window name="midi-connection-manager" visible="0" x-off="2015" y-off="0" x-size="570" y-size="600"/> - <Window name="luawindow" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="idle-o-meter" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="io-plugins" visible="0" x-off="1904" y-off="347" x-size="409" y-size="178"/> - <Window name="plugin-manager" visible="0" x-off="3102" y-off="0" x-size="1432" y-size="841"/> - <Window name="plugin-dsp-load" visible="0" x-off="2146" y-off="500" x-size="945" y-size="416"/> - <Window name="dsp-statistics" visible="0" x-off="1947" y-off="429" x-size="410" y-size="296"/> - <Window name="transport-masters" visible="0" x-off="2386" y-off="404" x-size="1151" y-size="271"/> - <Window name="RPM-341" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-452" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-560" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-669" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-782" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-893" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1000" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1107" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1214" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1321" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1428" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1535" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1642" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1749" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1856" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-11668" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-1963" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="RPM-2070" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-341-4183" visible="0" x-off="1478" y-off="642" x-size="858" y-size="360" custom-ui="1"/> - <Window name="PM-341-4183" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-669-4410" visible="0" x-off="1484" y-off="540" x-size="848" y-size="604" custom-ui="1"/> - <Window name="PM-669-4410" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-782-4306" visible="0" x-off="1484" y-off="540" x-size="848" y-size="604" custom-ui="1"/> - <Window name="PM-782-4306" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-1749-3859" visible="0" x-off="1484" y-off="540" x-size="846" y-size="564" custom-ui="1"/> - <Window name="PM-1749-3859" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-1856-11977" visible="0" x-off="2668" y-off="37" x-size="836" y-size="386" custom-ui="1"/> - <Window name="P-1856-7374" visible="0" x-off="1484" y-off="540" x-size="846" y-size="564" custom-ui="1"/> - <Window name="PM-1856-11977" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="PM-1856-7374" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="P-11668-12136" visible="0" x-off="2663" y-off="0" x-size="846" y-size="564" custom-ui="1"/> - <Window name="P-11668-12166" visible="0" x-off="2887" y-off="0" x-size="398" y-size="465" custom-ui="1"/> - <Window name="P-11668-11790" visible="0" x-off="2657" y-off="50" x-size="858" y-size="360" custom-ui="1"/> - <Window name="PM-11668-12136" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="PM-11668-12166" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Window name="PM-11668-11790" visible="0" x-off="-1" y-off="-1" x-size="-1" y-size="-1"/> - <Tearoffs> - <monitor-section tornoff="0" width="187" height="706" xpos="3423" ypos="184"/> - </Tearoffs> - </UI> - <AudioMIDISetup> - <EngineStates> - <State backend="JACK/Pipewire" driver="" device="HDA Intel HDMI" input-device="" output-device="" sample-rate="48000" buffer-size="1024" n-periods="2" input-latency="0" output-latency="0" lm-input="" lm-output="" active="1" use-buffered-io="0" midi-option="" lru="1757288458"> - <MIDIDevices/> - </State> - </EngineStates> - </AudioMIDISetup> - </Extra> - <ControlProtocols> - <Protocol name="Ableton Push 2" active="0" session-state="0"/> - <Protocol name="ContourDesign" feedback="0" keep-rolling="1" shuttle-speeds="0.5 0.75 1 1.5 2 5 10" jog-distance="1" jog-unit="beats" active="0" session-state="0"> - <button-1 type="action" path="MIDI/panic"/> - <button-2 type="action" path="Editor/remove-last-capture"/> - <button-3 type="action" path="Editor/undo"/> - <button-4 type="action" path="Editor/redo"/> - <button-5 type="action" path="Common/jump-backward-to-mark"/> - <button-6 type="action" path="Transport/Record"/> - <button-7 type="action" path="Transport/Stop"/> - <button-8 type="action" path="Transport/Roll"/> - <button-9 type="action" path="Common/jump-forward-to-mark"/> - <button-10 type="jump" distance="-4" unit="bars"/> - <button-11 type="jump" distance="4" unit="bars"/> - <button-12 type="action" path=""/> - <button-13 type="action" path="Common/add-location-from-playhead"/> - <button-14 type="action" path="Transport/GotoStart"/> - <button-15 type="action" path="Transport/GotoEnd"/> - </Protocol> - <Protocol name="Generic MIDI" feedback="1" feedback-interval="10000" threshold="10" motorized="1" active="0" session-state="0"> - <Input> - <Port name="MIDI Control In" type="midi" direction="Input"> - <ExtConnection for="JACK"/> - <ExtConnection for="JACK" other="Midi-Bridge:FaderPort MIDI 1 (capture)"/> - </Port> - </Input> - <Output> - <Port name="MIDI Control Out" type="midi" direction="Output"> - <ExtConnection for="JACK"/> - <ExtConnection for="JACK" other="Midi-Bridge:FaderPort MIDI 1 (playback)"/> - </Port> - </Output> - <Controls/> - </Protocol> - <Protocol name="Mackie" active="0" session-state="0"/> - <Protocol name="Novation Launch Control XL" active="0" session-state="0"/> - <Protocol name="Novation LaunchKey 4" active="0" session-state="0"/> - <Protocol name="Novation LaunchPad Mini" active="0" session-state="0"/> - <Protocol name="Novation LaunchPad Pro" active="0" session-state="0"/> - <Protocol name="Novation LaunchPad X" active="0" session-state="0"/> - <Protocol name="Open Sound Control (OSC)" active="0" session-state="0"/> - <Protocol name="PreSonus FaderPort" feedback="0" active="1"> - <Input> - <Port name="FaderPort in" type="midi" direction="Input"> - <ExtConnection for="JACK"/> - </Port> - </Input> - <Output> - <Port name="FaderPort out" type="midi" direction="Output"> - <ExtConnection for="JACK"/> - </Port> - </Output> - <Button id="11"/> - <Button id="12"/> - <Button id="13"/> - <Button id="0"/> - <Button id="126"/> - </Protocol> - <Protocol name="PreSonus FaderPort16" active="0" session-state="0"/> - <Protocol name="PreSonus FaderPort2" feedback="0" active="0" session-state="0"> - <Input> - <Port name="FaderPort2 Recv" type="midi" direction="Input"> - <ExtConnection for="JACK"/> - <ExtConnection for="JACK" other="Midi-Bridge:PreSonus FP2 MIDI 1 (capture)"/> - </Port> - </Input> - <Output> - <Port name="FaderPort2 Send" type="midi" direction="Output"> - <ExtConnection for="JACK"/> - <ExtConnection for="JACK" other="Midi-Bridge:PreSonus FP2 MIDI 1 (playback)"/> - </Port> - </Output> - </Protocol> - <Protocol name="PreSonus FaderPort8" active="0" session-state="0"/> - <Protocol name="SSL 360: UF8 UF1" active="0" session-state="0"/> - <Protocol name="Softube Console1" active="0" session-state="0"/> - <Protocol name="Steinberg CC121" active="0" session-state="0"/> - <Protocol name="Tascam US-2400" active="0" session-state="0"/> - <Protocol name="WebSockets Server (Experimental)" active="0" session-state="0"/> - </ControlProtocols> - <TransportMasters current="MIDI Clock"> - <TransportMaster type="JACK" removeable="0" name="JACK" sclock_synced="0" collect="1" allowed_transport_requests=""/> - <TransportMaster type="MTC" removeable="0" name="MTC" fr2997="0" sclock_synced="0" collect="1" allowed_transport_requests=""> - <Port> - <Connection other="BLE MIDI 1:out"/> - </Port> - </TransportMaster> - <TransportMaster type="LTC" removeable="0" name="LTC" fr2997="0" sclock_synced="0" collect="1" allowed_transport_requests=""> - <Port/> - </TransportMaster> - <TransportMaster type="MIDIClock" removeable="0" name="MIDI Clock" sclock_synced="0" collect="1" allowed_transport_requests=""> - <Port/> - </TransportMaster> - </TransportMasters> -</Ardour> diff --git a/.config/env b/.config/env index d70f391..a5508c4 100644 --- a/.config/env +++ b/.config/env @@ -99,20 +99,21 @@ export FZF_DEFAULT_COMMAND='fd -i -H -c never -j9 -E .git -E dotfiles-bsd -E .cc export FZF_DEFAULT_OPTS='--height 60% --layout=reverse --border=left --tabstop=4' export LESS='-R -c -S' export MPD_HOST="$XDG_DATA_HOME"/mpd/socket -export NNN_OPTS='aAdrRQ' +export NNN_OPTS='aAderRQ' export NNN_COLORS='4132' export NNN_FCOLORS='030304020005060801ac0507' export NNN_ARCHIVE="\\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)$" -export NNN_PLUG='t:joe_fzfcd;i:imgview' +export NNN_TERMINAL=$TERMINAL +export NNN_PAGER='less' +export NNN_BATTHEME='gruvbox-dark' +export NNN_BATSTYLE='plain' +export NNN_PREVIEWIMGPROG='icat' +export NNN_PREVIEWVIDEO='tct' +export NNN_ICONLOOKUP=0 +export NNN_PLUG='t:joe_fzfcd;p:-preview-tui;s:-!du -sh;f:-fzopen;c:-joe_clipper' export RUSTFLAGS='-L /usr/local/lib' export WWW_HOME='https://start.duckduckgo.com/' export YTFZF_HIST='0' -# wayland -export WLR_DRM_NO_ATOMIC=1 -export XDG_SESSION_TYPE=wayland -export XDG_CURRENT_DESKTOP=dwl -export MOZ_ENABLE_WAYLAND=1 - # PATH export PATH="$HOME"/.local/bin:"$HOME"/.local/bin/status:/usr/local/llvm13/bin:"$HOME"/.pyenv/bin:"$PATH" diff --git a/.config/mimeapps.list b/.config/mimeapps.list index 1654f21..1fb8154 100644 --- a/.config/mimeapps.list +++ b/.config/mimeapps.list @@ -11,9 +11,9 @@ application/xhtml+xml=userapp-Firefox-SWW0Y1.desktop application/x-extension-xhtml=userapp-Firefox-SWW0Y1.desktop application/x-extension-xht=userapp-Firefox-SWW0Y1.desktop application/pdf=org.pwmt.zathura.desktop -image/png=nsxiv.desktop -image/jpeg=nsxiv.desktop -image/gif=nsxiv.desktop +image/png=nsxiv-joe.desktop +image/jpeg=nsxiv-joe.desktop +image/gif=nsxiv-joe.desktop audio/mpeg=mpv.desktop audio/flac=mpv.desktop audio/wav=mpv.desktop diff --git a/.config/newsboat/config b/.config/newsboat/config index 99452c1..abb6d41 100644 --- a/.config/newsboat/config +++ b/.config/newsboat/config @@ -6,8 +6,8 @@ confirm-mark-feed-read no reload-threads 100 text-width 80 show-keymap-hint no -show-title-bar no -swap-title-and-hints no +show-title-bar yes +swap-title-and-hints yes history-limit 0 ignore-mode download notify-program ~/.local/bin/newsboat-notif @@ -61,9 +61,11 @@ macro a set browser "youtube-dl --add-metadata -xic -f bestaudio/best"; open-in- macro v set browser "linkview"; open-in-browser ; set browser linkhandler macro w set browser "linkview"; open-in-browser ; set browser linkhandler -datetime-format "%y-%m-%d %H:%M" -articlelist-format "%D - %t" -feedlist-format "%?T?%n%8u %t [%T]&#%-8t----------------------------------------------------------?" +feedlist-title-format "feeds (%u/%t)%?T? - tag '%T'&?" +articlelist-title-format "'%T' (%u/%t)" +datetime-format "%y-%m-%d %H:%M" +articlelist-format "%D - %t" +feedlist-format "%?T?%n%8u %t [%T]&#%-8t----------------------------------------------------------?" highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold highlight article "(^Link:.*|^Date:.*)" default default diff --git a/.config/nnn/plugins/joe_clipper b/.config/nnn/plugins/joe_clipper new file mode 100755 index 0000000..8c0fa5d --- /dev/null +++ b/.config/nnn/plugins/joe_clipper @@ -0,0 +1,76 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use Cwd qw(cwd); + +sub close_io +{ + open STDIN, '<', '/dev/null' or die $!; + open STDOUT, '>', '/dev/null' or die $!; + open STDERR, '>', '/dev/null' or die $!; + return; +} + +sub clip_img +{ + my ($file) = @_; + my $pid; + + $pid = fork(); + if ($pid == 0) { + system("magick $file png:- | xclip -selection clipboard -t image/png"); + exec( + 'notify-send', + '-t', '2000', + 'clipped image', + ' clipped image' + ); + } + return; +} + +sub clip_raw +{ + my ($file) = @_; + + my $pid; + + $pid = fork(); + if ($pid == 0) { + system( "xclip -selection clipboard $file"); + exec( + 'notify-send', + '-t', '2000', + 'clipped file', + ' clipped file' + ); + } + return; +} + +sub clip +{ + my ($file, $mimetype) = @_; + + return clip_img($file) if $mimetype =~ /^image\//; + clip_raw($file); + return; +} + +sub joe_clipper +{ + my $file = cwd() . '/' . $ARGV[0]; + my $mimetype; + + if (-d $file) { + return; + } + $mimetype=`file -bL --mime-type -- "$file"`; + clip($file, $mimetype); + return; +} + +joe_clipper(); + +__END__ diff --git a/.config/nnn/plugins/preview-tui b/.config/nnn/plugins/preview-tui new file mode 100755 index 0000000..4662721 --- /dev/null +++ b/.config/nnn/plugins/preview-tui @@ -0,0 +1,538 @@ +#!/usr/bin/env bash + +# Description: Terminal based file previewer +# +# Note: This plugin needs a "NNN_FIFO" to work. See man. +# +# Dependencies: +# - Supports 6 independent methods to preview with: +# - tmux (>=3.0), or +# - kitty with allow_remote_control and listen_on set in kitty.conf, or +# - wezterm (https://wezfurlong.org/wezterm), or +# - QuickLook on WSL (https://github.com/QL-Win/QuickLook), or +# - Windows Terminal (https://github.com/Microsoft/Terminal | https://aka.ms/terminal) with WSL, or +# - $NNN_TERMINAL set to a terminal (it's xterm by default). +# - less or $NNN_PAGER +# - tree or exa/eza or (GNU) ls +# - mediainfo or file +# - mktemp +# - unzip +# - tar +# - man +# - optional: bsdtar or atool for additional archive preview +# - optional: bat for code syntax highlighting +# - optional: ueberzug, kitty terminal, wezterm terminal, img2sixel, viu, catimg, timg or chafa for images +# - optional: convert(ImageMagick) for playing gif preview (mandatory for kitty image previews) +# - optional: mpv for gif and video +# Also requires a terminal supporting the sixel (https://www.arewesixelyet.com/) +# or kitty (https://sw.kovidgoyal.net/kitty/graphics-protocol) video_output backends. +# Requires tmux compiled with `./configure --enable-sixel` if used. +# - optional: ffmpegthumbnailer for video thumbnails (https://github.com/dirkvdb/ffmpegthumbnailer) +# - optional: ffmpeg for audio thumbnails +# - optional: libreoffce for opendocument/officedocument preview +# - optional: pdftoppm(poppler) for pdf thumbnails +# - optional: gnome-epub-thumbnailer for epub thumbnails (https://gitlab.gnome.org/GNOME/gnome-epub-thumbnailer) +# - optional: fontpreview for font preview (https://github.com/sdushantha/fontpreview) +# - optional: djvulibre for djvu +# - optional: glow or lowdown for markdown +# - optional: w3m or lynx or elinks for html +# - optional: set/export NNN_ICONLOOKUP as 1 to enable file icons in front of directory previews with .iconlookup +# Icons and colors are configurable in .iconlookup +# - optional: scope.sh file viewer from ranger. +# 1. drop scope.sh executable in $PATH +# 2. set/export $NNN_SCOPE as 1 +# - optional: pistol file viewer (https://github.com/doronbehar/pistol). +# 1. install pistol +# 2. set/export $NNN_PISTOL as 1 +# - optional: librsvg for rsvg-convert +# +# Usage: +# You need to set a NNN_FIFO path and a key for the plugin with NNN_PLUG, +# then start `nnn`: +# +# $ nnn -a +# +# or +# +# $ NNN_FIFO=/tmp/nnn.fifo nnn +# +# Then launch the `preview-tui` plugin in `nnn`. +# +# If you provide the same NNN_FIFO to all nnn instances, there will be a +# single common preview window. If you provide different FIFO path (e.g. +# with -a), they will be independent. +# +# The previews will be shown in a tmux split. If that isn't possible, it +# will try to use a kitty terminal split. And as a final fallback, a +# different terminal window will be used ($NNN_TERMINAL). +# +# Kitty users need something similar to the following in their kitty.conf: +# - `allow_remote_control yes` +# - `listen_on unix:$TMPDIR/kitty` +# - `enabled_layouts splits` (optional) +# With ImageMagick installed, this terminal can use the icat kitten to display images. +# Refer to kitty documentation for further details. +# +# Users with both tmux and kitty can leverage image previews inside tmux with kitty's icat kitten +# - setup kitty as stated above +# - tmux >= v3.3a required +# - add the following to your tmux.conf: +# - `set -g allow-passthrough on` +# +# Wezterm should work out of the box. If `NNN_PREVIEWIMGPROG` is not specified it will use +# built in iTerm2 image protocol. +# +# Note that GNU ls is used for its `--group-directories-first` flag. +# On MacOS this may be installed with `brew install coreutils`, or the flag can be removed. +# iTerm2 users are recommended to use viu to view images without getting pixelated. +# +# Windows Terminal users can set "Profile termination behavior" under "Profile > Advanced" settings +# to automatically close pane on quit when exit code is 0. +# +# When specifying a different terminal, additional arguments are supported. In particular, you can +# append a specific title to the terminal and set it to "nofocus" in your WM config. +# E.g for alacritty and i3, you can set $NNN_TERMINAL to 'alacritty --title preview-tui' and add +# 'no_focus [title="preview-tui"]' to your i3 config file. +# +# Shell: Bash (for environment manipulation through arrays) +# Authors: Todd Yamakawa, Léo Villeveygoux, @Recidiviste, Mario Ortiz Manero, Luuk van Baal, @WanderLanz, @flipflop133 + +# Configurable environment variables: +NNN_SPLIT=${NNN_SPLIT:-} # permanent split direction +NNN_TERMINAL=${NNN_TERMINAL:-} # external terminal to be used +NNN_SPLITSIZE=${NNN_SPLITSIZE:-50} # previewer split size percentage +TMPDIR=${TMPDIR:-/tmp} # location of temporary files +ENVVARS=( + "NNN_SCOPE=${NNN_SCOPE:-0}" # use scope + "NNN_PISTOL=${NNN_PISTOL:-0}" # use pistol + "NNN_ICONLOOKUP=${NNN_ICONLOOKUP:-0}" # use .iconlookup + "NNN_PAGER=${NNN_PAGER:-less -P?n -R -C}" # pager options + "NNN_BATTHEME=${NNN_BATTHEME:-ansi}" # bat theme + "NNN_BATSTYLE=${NNN_BATSTYLE:-numbers}" # bat style + "NNN_PREVIEWWIDTH=${NNN_PREVIEWWIDTH:-1920}" # width of generated preview images + "NNN_PREVIEWHEIGHT=${NNN_PREVIEWHEIGHT:-1080}" # height of generated preview images + "NNN_PREVIEWDIR=${NNN_PREVIEWDIR:-$TMPDIR/nnn/previews}" # location of generated preview images + "NNN_PREVIEWIMGPROG=${NNN_PREVIEWIMGPROG:-}" # command used to preview images + "NNN_PREVIEWVIDEO=${NNN_PREVIEWVIDEO:-}" # mpv backend used to preview video +) +# Non-configurable environment variables +NNN_PARENT=${NNN_FIFO#*.} +[ "$NNN_PARENT" -eq "$NNN_PARENT" ] 2>/dev/null || NNN_PARENT="" # Make empty if non-numeric +ENVVARS+=( + "PWD=$PWD" + "PATH=$PATH" + "NNN_FIFO=$NNN_FIFO" + "FIFOPID=$TMPDIR/nnn-preview-tui-fifopid.$NNN_PARENT" + "FIFOPATH=$TMPDIR/nnn-preview-tui-fifo.$NNN_PARENT" + "PREVIEWPID=$TMPDIR/nnn-preview-tui-previewpid.$NNN_PARENT" + "CURSEL=$TMPDIR/nnn-preview-tui-selection.$NNN_PARENT" + "FIFO_UEBERZUG=$TMPDIR/nnn-preview-tui-ueberzug-fifo.$NNN_PARENT" + "POSOFFSET=$TMPDIR/nnn-preview-tui-posoffset" +) + +trap '' PIPE +exists() { type "$1" >/dev/null 2>&1 ;} +pkill() { command pkill "$@" >/dev/null 2>&1 ;} +prompt() { clear; printf "%b" "$@"; cfg=$(stty -g); stty raw -echo; head -c 1; stty "$cfg" ;} +pidkill() { + if [ -f "$1" ]; then + PID="$(cat "$1" 2>/dev/null)" || return 1 + kill "$PID" >/dev/null 2>&1 + RET=$? + wait "$PID" 2>/dev/null + return $RET + fi + return 1 +} + +start_preview() { + if [ -e "${TMUX%%,*}" ] && tmux -V | grep -q '[ -][3456789]\.'; then + NNN_TERMINAL=tmux + exists mpv && tmux display -p '#{client_termfeatures}' | grep -q 'sixel' && ENVVARS+=("NNN_PREVIEWVIDEO=sixel") + elif [ -n "$KITTY_LISTEN_ON" ]; then + NNN_TERMINAL=kitty + exists mpv && ENVVARS+=("NNN_PREVIEWVIDEO=kitty") + elif [ -n "$WEZTERM_PANE" ]; then + NNN_TERMINAL=wezterm + exists mpv && ENVVARS+=("NNN_PREVIEWVIDEO=kitty") + elif [ -z "$NNN_TERMINAL" ] && [ "$TERM_PROGRAM" = "iTerm.app" ]; then + NNN_TERMINAL=iterm + exists mpv && ENVVARS+=("NNN_PREVIEWVIDEO=sixel") + elif [ -n "$WT_SESSION" ]; then + NNN_TERMINAL=winterm + else + NNN_TERMINAL="${NNN_TERMINAL:-xterm}" + fi + + if [ -z "$NNN_SPLIT" ] && [ $(($(tput lines) * 2)) -gt "$(tput cols)" ]; then + NNN_SPLIT='h' + elif [ "$NNN_SPLIT" != 'h' ]; then + NNN_SPLIT='v' + fi + + ENVVARS+=("NNN_TERMINAL=$NNN_TERMINAL" "NNN_SPLIT=$NNN_SPLIT" "QLPATH=$2" "PREVIEW_MODE=1") + case "$NNN_TERMINAL" in + iterm|winterm) # has to run in separate shell command: escape + ENVVARS=("${ENVVARS[@]/#/\\\"}") + ENVVARS=("${ENVVARS[@]/%/\\\"}") + command="$SHELL -c 'env ${ENVVARS[*]} \\\"$0\\\" \\\"$1\\\"'" ;; + esac + + case "$NNN_TERMINAL" in + tmux) # tmux splits are inverted + ENVVARS=("${ENVVARS[@]/#/-e}") + if [ "$NNN_SPLIT" = "v" ]; then split="h"; else split="v"; fi + tmux split-window -l"$NNN_SPLITSIZE"% "${ENVVARS[@]}" -d"$split" -p"$NNN_SPLITSIZE" "$0" "$1" ;; + kitty) # Setting the layout for the new window. It will be restored after the script ends. + ENVVARS=("${ENVVARS[@]/#/--env=}") + kitty @ goto-layout splits + # Trying to use kitty's integrated window management as the split window. + kitty @ launch --no-response --title "preview-tui" --keep-focus \ + --cwd "$PWD" "${ENVVARS[@]}" --location "${NNN_SPLIT}split" "$0" "$1" ;; + wezterm) + export "${ENVVARS[@]}" + if [ "$NNN_SPLIT" = "v" ]; then split="--horizontal"; else split="--bottom"; fi + wezterm cli split-pane --cwd "$PWD" $split --percent "$NNN_SPLITSIZE" "$0" "$1" >/dev/null + wezterm cli activate-pane-direction Prev ;; + iterm) + if [ "$NNN_SPLIT" = "h" ]; then split="horizontally"; else split="vertically"; fi + osascript <<-EOF + tell application "iTerm" + tell current session of current window + split $split with default profile command "$command" + end tell + end tell +EOF + ;; + winterm) + if [ "$NNN_SPLIT" = "h" ]; then split="H"; else split="V"; fi + wt -w 0 sp -$split -s"0.$NNN_SPLITSIZE" "$command" \; -w 0 mf previous 2>/dev/null ;; + *) if [ -n "$2" ]; then + env "${ENVVARS[@]}" QUICKLOOK=1 "$0" "$1" & + else + # shellcheck disable=SC2086 # (allow arguments) + env "${ENVVARS[@]}" $NNN_TERMINAL -e "$0" "$1" & + fi ;; + esac +} + +toggle_preview() { + export "${ENVVARS[@]}" + if exists QuickLook.exe; then + QLPATH="QuickLook.exe" + elif exists Bridge.exe; then + QLPATH="Bridge.exe" + fi + if pidkill "$FIFOPID"; then + [ -p "$NNN_PPIPE" ] && printf "0" > "$NNN_PPIPE" + pidkill "$PREVIEWPID" + pkill -f "tail --follow $FIFO_UEBERZUG" + if [ -n "$QLPATH" ] && stat "$1"; then + f="$(wslpath -w "$1")" && "$QLPATH" "$f" & + fi + else + [ -p "$NNN_PPIPE" ] && printf "1" > "$NNN_PPIPE" + start_preview "$1" "$QLPATH" + fi +} + +fifo_pager() { + cmd="$1" + shift + + # We use a FIFO to access $NNN_PAGER PID in jobs control + mkfifo "$FIFOPATH" || return + + $NNN_PAGER < "$FIFOPATH" & + printf "%s" "$!" > "$PREVIEWPID" + + ( + exec > "$FIFOPATH" + if [ "$cmd" = "pager" ]; then + if exists bat; then + bat --terminal-width="$cols" --decorations=always --color=always \ + --paging=never --style="$NNN_BATSTYLE" --theme="$NNN_BATTHEME" "$@" & + else + $NNN_PAGER "$@" & + fi + else + "$cmd" "$@" & + fi + ) + + rm -- "$FIFOPATH" +} + +# Binary file: show file info inside the pager +print_bin_info() { + printf -- "-------- \033[1;31mBinary file\033[0m --------\n" + if exists mediainfo; then + mediainfo "$1" + else + file -b "$1" + fi +} + +handle_mime() { + case "$2" in + image/jpeg) image_preview "$cols" "$lines" "$1" ;; + image/gif) generate_preview "$cols" "$lines" "$1" "gif" ;; + image/vnd.djvu) generate_preview "$cols" "$lines" "$1" "djvu" ;; + image/*) generate_preview "$cols" "$lines" "$1" "image" ;; + video/*) generate_preview "$cols" "$lines" "$1" "video" ;; + audio/*) generate_preview "$cols" "$lines" "$1" "audio" ;; + application/font*|application/*opentype|font/*) generate_preview "$cols" "$lines" "$1" "font" ;; + */*office*|*/*document*|*/*msword|*/*ms-excel) generate_preview "$cols" "$lines" "$1" "office" ;; + application/zip) fifo_pager unzip -l "$1" ;; + text/troff) + if exists man; then + fifo_pager man -Pcat -l "$1" + else + fifo_pager pager "$1" + fi ;; + *) handle_ext "$1" "$3" "$4" ;; + esac +} + +handle_ext() { + case "$2" in + epub) generate_preview "$cols" "$lines" "$1" "epub" ;; + pdf) generate_preview "$cols" "$lines" "$1" "pdf" ;; + gz|bz2) fifo_pager tar -tvf "$1" ;; + md) if exists glow; then + fifo_pager glow -s dark "$1" + elif exists lowdown; then + fifo_pager lowdown -Tterm --term-width="$cols" --term-column="$cols" "$1" + else + fifo_pager pager "$1" + fi ;; + htm|html|xhtml) + if exists w3m; then + fifo_pager w3m "$1" + elif exists lynx; then + fifo_pager lynx "$1" + elif exists elinks; then + fifo_pager elinks "$1" + else + fifo_pager pager "$1" + fi ;; + 7z|a|ace|alz|arc|arj|bz|cab|cpio|deb|jar|lha|lz|lzh|lzma|lzo\ + |rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z) + if exists atool; then + fifo_pager atool -l "$1" + elif exists bsdtar; then + fifo_pager bsdtar -tvf "$1" + fi ;; + json) + if exists jq; then + fifo_pager jq --color-output '.' "$1" + else + fifo_pager pager "$1" + fi ;; + *) if [ "$3" = "bin" ]; then + fifo_pager print_bin_info "$1" + else + fifo_pager pager "$1" + fi ;; + esac +} + +preview_file() { + clear + # Trying to use pistol if it's available. + if [ "$NNN_PISTOL" -ne 0 ] && exists pistol; then + fifo_pager pistol "$1" + return + fi + + # Trying to use scope.sh if it's available. + if [ "$NNN_SCOPE" -ne 0 ] && exists scope.sh; then + fifo_pager scope.sh "$1" "$cols" "$lines" "$(mktemp -d)" "True" + return + fi + + # Use QuickLook if it's available. + if [ -n "$QUICKLOOK" ]; then + stat "$1" && f="$(wslpath -w "$1")" && "$QLPATH" "$f" & + return + fi + + # Detecting the exact type of the file: the encoding, mime type, and extension in lowercase. + encoding="$(file -bL --mime-encoding -- "$1")" + mimetype="$(file -bL --mime-type -- "$1")" + ext="${1##*.}" + [ -n "$ext" ] && ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')" + lines=$(tput lines) + cols=$(tput cols) + + # Otherwise, falling back to the defaults. + if [ -d "$1" ]; then + cd "$1" || return + if [ "$NNN_ICONLOOKUP" -ne 0 ] && [ -f "$(dirname "$0")"/.iconlookup ]; then + [ "$NNN_SPLIT" = v ] && BSTR="\n" + # shellcheck disable=SC2012 + ls -F --group-directories-first | head -n "$((lines - 3))" | "$(dirname "$0")"/.iconlookup -l "$cols" -B "$BSTR" -b " " + elif exists tree; then + fifo_pager tree --filelimit "$(find . -maxdepth 1 | wc -l)" -L 3 -C -F --dirsfirst --noreport + elif exists exa; then + fifo_pager exa -T --group-directories-first --colour=always -L 3 + elif exists eza; then # eza is a community fork of exa (exa is unmaintained) + fifo_pager eza -T --group-directories-first --colour=always -L 3 + else + fifo_pager ls -F --group-directories-first --color=always + fi + cd .. + elif [ "${encoding#*)}" = "binary" ]; then + handle_mime "$1" "$mimetype" "$ext" "bin" + else + handle_mime "$1" "$mimetype" "$ext" + fi +} + +generate_preview() { + if [ -n "$QLPATH" ] && stat "$3"; then + f="$(wslpath -w "$3")" && "$QLPATH" "$f" & + elif [ -n "$NNN_PREVIEWVIDEO" ] && [[ "$4" == +(gif|video) ]]; then + [ "$4" = "video" ] && args=(--start=10% --length=4) || args=() + video_preview "$1" "$2" "$3" "${args[@]}" && return + elif [ ! -f "$NNN_PREVIEWDIR/$3.jpg" ] || [ -n "$(find -L "$3" -newer "$NNN_PREVIEWDIR/$3.jpg")" ]; then + mkdir -p "$NNN_PREVIEWDIR/${3%/*}" + case $4 in + audio) ffmpeg -i "$3" -filter_complex "scale=iw*min(1\,min($NNN_PREVIEWWIDTH/iw\,ih)):-1" "$NNN_PREVIEWDIR/$3.jpg" -y ;; + epub) gnome-epub-thumbnailer "$3" "$NNN_PREVIEWDIR/$3.jpg" ;; + font) fontpreview -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" ;; + gif) if [ -p "$FIFO_UEBERZUG" ] && exists convert; then + frameprefix="$NNN_PREVIEWDIR/$3/${3##*/}" + if [ ! -d "$NNN_PREVIEWDIR/$3" ]; then + mkdir -p "$NNN_PREVIEWDIR/$3" + convert -coalesce -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$3" "$frameprefix.jpg" || + MAGICK_TMPDIR="/tmp" convert -coalesce -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$3" "$frameprefix.jpg" + fi + frames=$(($(find "$NNN_PREVIEWDIR/$3" | wc -l) - 2)) + [ $frames -lt 0 ] && return + while true; do + for i in $(seq 0 $frames); do + image_preview "$1" "$2" "$frameprefix-$i.jpg" + sleep 0.1 + done + done & + printf "%s" "$!" > "$PREVIEWPID" + return + elif [ -n "$NNN_PREVIEWVIDEO" ]; then + video_preview "$1" "$2" "$3" && return + else + image_preview "$1" "$2" "$3" && return + fi ;; + image) if exists rsvg-convert && [[ "${3##*.}" == "svg" ]]; then + rsvg-convert -a -w "$NNN_PREVIEWWIDTH" -h "$NNN_PREVIEWHEIGHT" -f png -o "$NNN_PREVIEWDIR/$3.png" "$3" + elif exists convert; then + convert "$3" -flatten -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$NNN_PREVIEWDIR/$3.jpg" + else + image_preview "$1" "$2" "$3" && return + fi ;; + office) libreoffice --convert-to jpg "$3" --outdir "$NNN_PREVIEWDIR/${3%/*}" + filename="$(printf "%s" "${3##*/}" | cut -d. -f1)" + mv -- "$NNN_PREVIEWDIR/${3%/*}/$filename.jpg" "$NNN_PREVIEWDIR/$3.jpg" ;; + pdf) pdftoppm -jpeg -f 1 -singlefile "$3" "$NNN_PREVIEWDIR/$3" ;; + djvu) ddjvu -format=ppm -page=1 "$3" "$NNN_PREVIEWDIR/$3.jpg" ;; + video) video_preview "$1" "$2" "$3" && return ;; + esac + fi + if [ -f "$NNN_PREVIEWDIR/$3.jpg" ]; then + image_preview "$1" "$2" "$NNN_PREVIEWDIR/$3.jpg" + elif [[ "${3##*.}" == "svg" ]] && [ -f "$NNN_PREVIEWDIR/$3.png" ]; then + image_preview "$1" "$2" "$NNN_PREVIEWDIR/$3.png" + else + fifo_pager print_bin_info "$3" + fi +} >/dev/null 2>&1 + +image_preview() { + clear + exec >/dev/tty + if [ "$NNN_TERMINAL" = "kitty" ] && [[ "$NNN_PREVIEWIMGPROG" == +(|icat) ]]; then + kitty +kitten icat --silent --scale-up --place "$1"x"$2"@0x0 --transfer-mode=stream --stdin=no "$3" & + elif [ "$NNN_TERMINAL" = "tmux" ] && [[ -n "$KITTY_LISTEN_ON" ]] && [[ "$NNN_PREVIEWIMGPROG" == +(|icat) ]]; then + kitty +kitten icat --silent --scale-up --place "$(($1 - 1))x$(($2 - 1))"@0x0 --transfer-mode=memory --stdin=no "$3" & + elif [ "$NNN_TERMINAL" = "wezterm" ] && [[ "$NNN_PREVIEWIMGPROG" == +(|imgcat) ]]; then + wezterm imgcat "$3" & + elif exists ueberzug && [[ "$NNN_PREVIEWIMGPROG" == +(|ueberzug) ]]; then + ueberzug_layer "$1" "$2" "$3" && return + elif exists "${NNN_PREVIEWIMGPROG%% *}"; then # can include command flags; only check first word + $NNN_PREVIEWIMGPROG -w "$1" "$3" & + else + fifo_pager print_bin_info "$3" && return + fi + printf "%s" "$!" > "$PREVIEWPID" +} + +video_preview() { + clear + exec >/dev/tty + if [ -n "$NNN_PREVIEWVIDEO" ]; then + mpv --no-config --really-quiet --vo="$NNN_PREVIEWVIDEO" --profile=sw-fast --loop-file --no-audio "$4" "$3" & + else + ffmpegthumbnailer -m -s0 -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" || rm -- "$NNN_PREVIEWDIR/$3.jpg" & + fi + printf "%s" "$!" > "$PREVIEWPID" +} + +ueberzug_layer() { + [ -f "$POSOFFSET" ] && read -r x y < "$POSOFFSET" + printf '{"action": "add", "identifier": "nnn_ueberzug", "x": %d, "y": %d, "width": "%d", "height": "%d", "scaler": "fit_contain", "path": "%s"}\n'\ + "${x:-0}" "${y:-0}" "$1" "$2" "$3" > "$FIFO_UEBERZUG" +} + +ueberzug_remove() { + printf '{"action": "remove", "identifier": "nnn_ueberzug"}\n' > "$FIFO_UEBERZUG" +} + +winch_handler() { + clear + pidkill "$PREVIEWPID" + if [ -p "$FIFO_UEBERZUG" ]; then + pkill -f "tail --follow $FIFO_UEBERZUG" + tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json & + fi + preview_file "$(cat "$CURSEL")" +} + +preview_fifo() { + while read -r selection; do + if [ -n "$selection" ]; then + pidkill "$PREVIEWPID" + [ -p "$FIFO_UEBERZUG" ] && ueberzug_remove + [ "$selection" = "close" ] && break + preview_file "$selection" + printf "%s" "$selection" > "$CURSEL" + fi + done < "$NNN_FIFO" + sleep 0.1 # make sure potential preview by winch_handler is killed + pkill -P "$$" +} + +if [ "$PREVIEW_MODE" -eq 1 ] 2>/dev/null; then + if exists ueberzug && [ "$NNN_TERMINAL" != "kitty" ] && [[ "$NNN_PREVIEWIMGPROG" == +(|ueberzug) ]]; then + mkfifo "$FIFO_UEBERZUG" + tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json & + fi + + preview_file "$PWD/$1" + preview_fifo & WAITPID=$! + printf "%s" "$!" > "$FIFOPID" + printf "%s" "$PWD/$1" > "$CURSEL" + trap 'winch_handler' WINCH + trap 'rm -- "$PREVIEWPID" "$CURSEL" "$FIFO_UEBERZUG" "$FIFOPID" "$POSOFFSET" 2>/dev/null' INT HUP EXIT + while kill -s 0 $WAITPID; do + wait $WAITPID 2>/dev/null + done + exit 0 +else + if [ ! -r "$NNN_FIFO" ]; then + prompt "No FIFO available! (\$NNN_FIFO='$NNN_FIFO')\nPlease read Usage in '$0'." + elif [ "$KITTY_WINDOW_ID" ] && [ -z "$TMUX" ] && [ -z "$KITTY_LISTEN_ON" ]; then + prompt "\$KITTY_LISTEN_ON not set!\nPlease read Usage in '$0'." + else + toggle_preview "$1" & + fi +fi diff --git a/.config/zsh/alias.zsh b/.config/zsh/alias.zsh index 41b090c..bcd4cf8 100644 --- a/.config/zsh/alias.zsh +++ b/.config/zsh/alias.zsh @@ -69,6 +69,20 @@ alias \ dgit='git --git-dir=$HOME/docs/dotfiles-bsd --work-tree=$HOME' \ confgit='git --git-dir=$HOME/docs/conffiles-bsd --work-tree=/' \ git-pull-all='git branch -r | sed "1d;s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; git checkout "${remote#origin/}"; git pull; done' +b() { + oldpath="$(pwd)" + cd $HOME/.config/nnn/bookmarks + dir=$(fzf) + if [ -z "$dir" ]; then + cd "$oldpath" + return + fi + if ! cd "$dir"; then + cd "$oldpath" + return + fi + nnn +} bssh() { user='rbousset' host='bastion' diff --git a/.local/bin/dmlog b/.local/bin/dmlog index 9244cbf..6256be8 100755 --- a/.local/bin/dmlog +++ b/.local/bin/dmlog @@ -64,7 +64,12 @@ sub action "-fail-color", "0xcc241d"); } else { - exec(XSCREENSAVER_PATH, '-lock'); + if (HOSTNAME eq 'po-rbo') { + exec(SLOCK_PATH); + } + else { + exec(XSCREENSAVER_PATH, '-lock'); + } } } elsif ($var eq ${+LIST}[1]) { diff --git a/.local/share/applications/bat-joe.desktop b/.local/share/applications/bat-joe.desktop new file mode 100644 index 0000000..0fa2670 --- /dev/null +++ b/.local/share/applications/bat-joe.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=bat joe +Exec=bat --tabs 4 --paging=always -f %F diff --git a/.local/applications/nsxiv-joe.desktop b/.local/share/applications/nsxiv-joe.desktop index 98ea224..f105b30 100644 --- a/.local/applications/nsxiv-joe.desktop +++ b/.local/share/applications/nsxiv-joe.desktop @@ -3,6 +3,6 @@ Type=Application Name=nsxiv joe GenericName=Image Viewer Exec=nsxiv -abo %F -MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-tga;image/x-xpixmap;image/webp;image/heic;image/svg+xml;application/postscript;image/jp2;image/jxl;image/avif;image/heif +MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-tga;image/x-xpixmap;image/webp;image/heic;image/svg+xml;application/postscript;image/jp2;image/jxl;image/avif;image/heif; NoDisplay=true Icon=nsxiv |