diff options
Diffstat (limited to '')
-rw-r--r-- | .config/env | 5 | ||||
-rw-r--r-- | .config/gtk-2.0/gtkrc | 6 | ||||
-rw-r--r-- | .config/gtk-3.0/settings.ini | 4 | ||||
-rwxr-xr-x | .config/nnn/plugins/joe_clipper | 76 | ||||
-rwxr-xr-x | .config/nnn/plugins/joe_preview | 418 | ||||
-rwxr-xr-x | .config/nnn/plugins/preview-tui | 538 | ||||
-rw-r--r-- | .config/x11/xinitrc | 21 | ||||
-rw-r--r-- | .config/x11/xresources | 4 | ||||
-rw-r--r-- | .config/zsh/alias.zsh | 14 | ||||
-rwxr-xr-x | .local/bin/dmlog | 8 | ||||
-rwxr-xr-x | .local/bin/scr2 | 10 | ||||
-rwxr-xr-x | .local/bin/scr3 | 6 |
12 files changed, 649 insertions, 461 deletions
diff --git a/.config/env b/.config/env index 84bd5cf..a5508c4 100644 --- a/.config/env +++ b/.config/env @@ -99,7 +99,7 @@ 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)$" @@ -108,8 +108,9 @@ 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:-joe_preview;P:-preview-tui;s:-!du -sh;f:-fzopen' +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' diff --git a/.config/gtk-2.0/gtkrc b/.config/gtk-2.0/gtkrc index cd86bd6..a351cdd 100644 --- a/.config/gtk-2.0/gtkrc +++ b/.config/gtk-2.0/gtkrc @@ -1,11 +1,11 @@ # DO NOT EDIT! This file will be overwritten by LXAppearance. # Any customization should be done in ~/.gtkrc-2.0.mine instead. -include "/home/r_bousset/.gtkrc-2.0.mine" +include "/home/jozan/.gtkrc-2.0.mine" gtk-theme-name="Gruvbox-Dark-B" -gtk-icon-theme-name="Gruvbox_Dark" +gtk-icon-theme-name="gruvbox_dark" gtk-font-name="sans-serif 12" -gtk-cursor-theme-name="Adwaita" +gtk-cursor-theme-name="Simp1e-Gruvbox-Dark" gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_ICONS gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini index 6f157b0..80c2700 100644 --- a/.config/gtk-3.0/settings.ini +++ b/.config/gtk-3.0/settings.ini @@ -1,14 +1,14 @@ [Settings] gtk-application-prefer-dark-theme=false gtk-button-images=0 -gtk-cursor-theme-name=Adwaita +gtk-cursor-theme-name=Simp1e-Gruvbox-Dark gtk-cursor-theme-size=0 gtk-decoration-layout=icon:minimize,maximize,close gtk-enable-animations=true gtk-enable-event-sounds=1 gtk-enable-input-feedback-sounds=1 gtk-font-name=sans-serif 12 -gtk-icon-theme-name=Gruvbox_Dark +gtk-icon-theme-name=gruvbox_dark gtk-menu-images=0 gtk-primary-button-warps-slider=false gtk-theme-name=Gruvbox-Dark-B 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/joe_preview b/.config/nnn/plugins/joe_preview deleted file mode 100755 index 6620cd3..0000000 --- a/.config/nnn/plugins/joe_preview +++ /dev/null @@ -1,418 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use Cwd qw(cwd); -use POSIX qw(mkfifo); -# use POSIX qw(:signal_h); -use File::Spec; -use File::Basename; -use Term::ANSIColor; - - -my $parent = ''; -if ($ENV{'NNN_FIFO'}) { - ($parent = $ENV{'NNN_FIFO'}) =~ s/^[^.]*\.//; -} -my $tmpdir = '/tmp'; -my $cwd = cwd(); - -$ENV{'PWD'} = $cwd; -$ENV{'FIFOPID'} = "$tmpdir/nnn-preview-joe-fifopid.$parent"; -$ENV{'FIFOPATH'} = "$tmpdir/nnn-preview-joe-fifo.$parent"; -$ENV{'PREVIEWPID'} = "$tmpdir/nnn-preview-joe-previewpid.$parent"; -$ENV{'CURSEL'} = "$tmpdir/nnn-preview-joe-selection.$parent"; -$ENV{'POSOFFSET'} = "$tmpdir/nnn-preview-joe-posoffset"; -$ENV{'NNN_PAGER'} ||= 'less'; -$ENV{'NNN_BATSTYLE'} ||= 'numbers'; -$ENV{'NNN_BATTHEME'} ||= 'ansi'; - -sub image_preview -{ - print "IMAGE PREVIEW\n"; - return; -} - -sub generate_preview -{ - print "GENERAL PREVIEW\n"; - return; -} - -sub fifo_pager -{ - my ($cmd, @args) = @_; - my $reader_pid; - my $writer_pid; - my $pager; - - $pager = $ENV{'NNN_PAGER'} // 'less'; - - mkfifo($ENV{'FIFOPATH'}, 0700) or return; - - $reader_pid = fork(); - die $! unless defined $reader_pid; - if ($reader_pid == 0) { - open(STDIN, '<', $ENV{'FIFOPATH'}) or die $!; - exec($pager) or die $!; - } - - open(my $pid_fh, '>', $ENV{'PREVIEWPID'}) or die $!; - print $pid_fh $reader_pid; - close($pid_fh); - - $writer_pid = fork(); - die $! unless defined $writer_pid; - if ($writer_pid == 0) { - open(STDOUT, '>', $ENV{'FIFOPATH'}) or die $!; - if ($cmd eq 'pager') { - my $cols = `tput cols`; - chomp $cols; - exec("bat", - "--terminal-width=$cols", - "--decorations=always", - "--color=always", - "--paging=never", - "--style=$ENV{'NNN_BATSTYLE'}", - "--theme=$ENV{'NNN_BATTHEME'}", - @args - ) or die $!; - } - elsif ($cmd eq 'print_bin_info') { - print "-------- ", - color('bold red'), - "Binary file", - color('reset'), - " --------\n"; - exec('mediainfo', @args); - } - else { - exec($cmd, @args) or die $!; - } - } - waitpid($writer_pid, 0); - unlink $ENV{'FIFOPATH'} or warn $!; - return; -} - -sub handle_ext -{ - my ($file, $ext, $type) = @_; - - if ($ext eq 'epub') { - generate_preview($file, 'epub'); - } - elsif ($ext eq 'pdf') { - generate_preview($file, 'pdf'); - } - elsif ( - $ext eq 'gz' || - $ext eq 'bz2' - ) { - fifo_pager('tar', '-tvf', $file); - } - elsif ($ext eq 'md') { - fifo_pager('glow', '-s', 'dark', $file); - } - elsif ( - $ext eq 'htm' || - $ext eq 'html' || - $ext eq 'xhtml' - ) { - fifo_pager('w3m', $file); - } - elsif ( - $ext eq '7z' || - $ext eq 'a' || - $ext eq 'ace' || - $ext eq 'alz' || - $ext eq 'arc' || - $ext eq 'arj' || - $ext eq 'bz' || - $ext eq 'cab' || - $ext eq 'cpio' || - $ext eq 'deb' || - $ext eq 'jar' || - $ext eq 'lha' || - $ext eq 'lz' || - $ext eq 'lzh' || - $ext eq 'lzma' || - $ext eq 'lzo' || - $ext eq 'rar' || - $ext eq 'rpm' || - $ext eq 'rz' || - $ext eq 't7z' || - $ext eq 'tar' || - $ext eq 'tbz' || - $ext eq 'tbz2' || - $ext eq 'tgz' || - $ext eq 'tlz' || - $ext eq 'txz' || - $ext eq 'tZ' || - $ext eq 'tzo' || - $ext eq 'war' || - $ext eq 'xpi' || - $ext eq 'xz' || - $ext eq 'xz' || - $ext eq 'zst' || - $ext eq 'Z' - ) { - fifo_pager('atool', '-l', $file); - } - elsif ($ext eq 'json') { - fifo_pager('jq', '--color-output', '.', $file); - } - elsif ($type eq 'bin') { - fifo_pager('print_bin_info', $file); - } - else { - fifo_pager('pager', $file); - } - return; -} - -sub handle_mime -{ - my ($file, $mimetype, $ext, $type) = @_; - - if ($mimetype eq 'image/jpeg') { - image_preview($file); - } - elsif ($mimetype eq 'image/gif') { - generate_preview($file, 'gif'); - } - elsif ($mimetype eq 'image/vnd.djvu') { - generate_preview($file, 'djvu'); - } - elsif ($mimetype =~ /^image\//) { - generate_preview($file, 'image'); - } - elsif ($mimetype =~ /^video\//) { - generate_preview($file, 'video'); - } - elsif ($mimetype =~ /^audio\//) { - generate_preview($file, 'audio'); - } - elsif ( - $mimetype =~ /^application\/font/ || - $mimetype =~ /^application\/.*opentype/ || - $mimetype =~ /^font\// - ) { - generate_preview($file, 'font'); - } - elsif ( - $mimetype =~ m{/.+office.+} || - $mimetype =~ m{/.+document.+} || - $mimetype =~ m{/.+msword} || - $mimetype =~ m{/.+ms-excel} - ) { - generate_preview($file, 'office'); - } - elsif ($mimetype eq 'application/zip') { - fifo_pager('unzip', '-l', $file); - } - elsif ($mimetype eq 'text/troff') { - fifo_pager('man', '-Pcat', '-l', $file); - } - else { - handle_ext($file, $ext, $type); - } - return; -} - -sub preview_file -{ - my ($file) = @_; - my ($ext) = $file =~ /\.([^.]*)$/; - my $encoding; - my $mimetype; - my $lines; - my $cols; - - system('clear'); - $encoding = `file -bL --mime-encoding -- $file`; - $mimetype = `file -bL --mime-type -- $file`; - $ext = lc($ext) if length($ext) > 0; - $lines = `tput lines`; - $cols = `tput cols`; - - if (-d $file) { - chdir $file or return; - fifo_pager( - 'eza', - '-T', - '--group-directories-first', - '--colour=always', - '-L', - '3' - ); - chdir '..'; - } - elsif ($encoding =~ /\)/) { - my ($suffix) = $encoding =~ /\)(.*)/; - if (defined $suffix && $suffix eq 'binary') { - handle_mime($file, $mimetype, $ext, 'bin'); - } - else { - handle_mime($file, $mimetype, $ext); - } - } - return; -} - -sub preview_fifo -{ - while (1) { - open(my $fh, '<', $ENV{'NNN_FIFO'}) or die $!; - while (my $selection = <$fh>) { - chomp $selection; - if ($selection) { - pidkill($ENV{'PREVIEWPID'}); - last if $selection eq 'close'; - preview_file($selection); - open(my $cursel_fh, '>', $ENV{'CURSEL'}) or die $!; - print $cursel_fh $selection; - close($cursel_fh); - } - } - close $fh; - } - return; -} - -sub pidkill { - my ($pidfile) = @_; - my $pid; - my $ret; - - if (-e $pidfile) { - $pid = `cat $pidfile 2>/dev/null` or return 1; - $ret = system("kill $pid >/dev/null 2>&1"); - system("wait $pid 2>/dev/null"); - return $ret; - } - return 1; -} - -sub winch_handler -{ - my $filepath; - - system('clear'); - pidkill($ENV{'PREVIEWPID'}); - open(my $fh, '<', $ENV{'CURSEL'}) or die $!; - $filepath = <$fh>; - chomp $filepath if $filepath; - close($fh); - preview_file($filepath) if $filepath; - return; -} - -sub start_preview -{ - my ($file) = @_; - my $pid; - - $ENV{'NNN_TERMINAL'} = $ENV{'NNN_TERMINAL'} // 'xterm'; - $ENV{'PREVIEW_MODE'} = 1; - $pid = fork(); - die $! unless defined $pid; - if ($pid == 0) { - exec($ENV{'NNN_TERMINAL'}, '-e', $0, $file) or die $!; - } - return; -} - -sub toggle_preview -{ - my ($file) = @_; - my $nnn_ppipe; - - $ENV{'PWD'} = cwd(); - $ENV{'PATH'} = $ENV{'PATH'}; - $ENV{'NNN_FIFO'} = $ENV{'NNN_FIFO'}; - $nnn_ppipe = $ENV{'NNN_PPIPE'} // ''; - if (pidkill($ENV{'FIFOPID'})) { - if ($nnn_ppipe && -p $nnn_ppipe) { - open(my $fh, '>', $nnn_ppipe) or warn $!; - print $fh "0"; - close($fh); - } - pidkill($ENV{'PREVIEWPID'}); - } - else { - if ($nnn_ppipe && -p $nnn_ppipe) { - open(my $fh, '>', $nnn_ppipe) or warn $!; - print $fh "1"; - close($fh); - } - start_preview($file); - } - return; -} - -sub joe_preview -{ - my $file; - my $pid; - my $cwd; - - $cwd = cwd(); - - $SIG{PIPE} = 'IGNORE'; - - $file = $ARGV[0]; - if (($ENV{'PREVIEW_MODE'} || 0) == 1) { - preview_file($cwd . '/' . $file); - - $pid = fork(); - die $! unless defined $pid; - if ($pid == 0) { - preview_fifo(); - return; - } - - open(my $pidfh, '>', $ENV{'FIFOPID'}) or die $!; - print $pidfh "$pid\n"; - close($pidfh); - - open(my $curselfh, '>', $ENV{'CURSEL'}) or die $!; - print $curselfh "$cwd/$file\n"; - close($curselfh); - - $SIG{WINCH} = sub { - winch_handler(); - }; - - for my $signal (qw(INT HUP EXIT)) { - $SIG{$signal} = sub { - unlink( - $ENV{'PREVIEWPID'}, - $ENV{'CURSEL'}, - $ENV{'FIFOPID'}, - $ENV{'POSOFFSET'} - ); - exit 0; - }; - } - - while (kill 0, $pid) { - waitpid($pid, 0); - } - - return; - } - else { - # $pid = fork(); - # die $! unless defined $pid; - # if ($pid == 0) { - toggle_preview($file); - # return; - # } - } - return; -} - -joe_preview(); - -__END__ diff --git a/.config/nnn/plugins/preview-tui b/.config/nnn/plugins/preview-tui new file mode 100755 index 0000000..7bd1c7d --- /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|zst|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/x11/xinitrc b/.config/x11/xinitrc index 8d033d2..fafae24 100644 --- a/.config/x11/xinitrc +++ b/.config/x11/xinitrc @@ -4,7 +4,6 @@ case $(hostname -s) in mother) icon=" " mpd="mpd" - xscr="xscreensaver --no-splash" sleep="sleep 1" ping="ping -c1 -w1 9.9.9.9 >/dev/null 2>&1" host="mother" @@ -13,7 +12,6 @@ case $(hostname -s) in po-rbo) icon=" " mpd="mpd" - xscr="xscreensaver" sleep="sleep 0.1" ping="ping -c1 -w1 9.9.9.9 >/dev/null 2>&1" host="po-rbo" @@ -22,7 +20,6 @@ case $(hostname -s) in mars) icon=" " mpd="musicpd" - xscr="xscreensaver --no-splash" sleep="gsleep 1" ping="ping -c1 -t1 9.9.9.9 >/dev/null 2>&1" host="mars" @@ -52,26 +49,14 @@ dunst_shit() { } start_apps() { - # [ $host = "po-rbo" ] && /home/r_bousset/.local/bin/pipe CM_SELECTIONS=clipboard startif clipmenud startif copyq startif nextcloud - QT_SCALE_FACTOR=1.35 startif rclone-browser - # startif nixGL teams-for-linux - # startif thunderbird - # startif firefox + [ $host = "po-rbo" ] && QT_SCALE_FACTOR=1.35 startif rclone-browser } export LANG='en_US.UTF-8' [ $host = "mother" ] && "$HOME"/.local/bin/scr2 -# [ $host = "mother" ] && xrandr \ -# --output HDMI-0 --mode 1920x1080 --pos 2560x0 --rotate normal \ -# --output DP-0 --off \ -# --output DP-1 --off \ -# --output DP-2 --off \ -# --output DP-3 --off \ -# --output DP-4 --primary --mode 2560x1440 --rate 180 --pos 0x0 --rotate normal \ -# --output DP-5 --off [ $host = "po-rbo" ] && xrandr \ --output eDP-1 --mode 1920x1200 --pos 0x0 --rotate normal \ --output HDMI-1 --primary --mode 2560x1440 --pos 1920x0 --rotate normal \ @@ -84,10 +69,6 @@ dunst_shit pgrep $mpd >/dev/null || $mpd >/dev/null 2>&1 xset s off xset -dpms -startif $xscr -# doas rc-service wireguard start && -# notify-send -u normal 'wireguard' 'WireGuard started' -# $sleep pkill wireplumber pkill pipewire-pulse pkill pipewire diff --git a/.config/x11/xresources b/.config/x11/xresources index 6db99f1..ef2cae9 100644 --- a/.config/x11/xresources +++ b/.config/x11/xresources @@ -5,10 +5,10 @@ Xft.rgba: rgb Xft.autohint: false Xft.hintstyle: hintslight Xft.lcdfilter: lcddefault -Xcursor.theme: Adwaita +Xcursor.theme: "Simp1e-Gruvbox-Dark" Xcursor.size: 18 Nsxiv.window.background: #1d2021 Nsxiv.window.foreground: #ebdbb2 -Nsxiv.bar.font: UbuntuMono Nerd Font-11 +Nsxiv.bar.font: BlexMono Nerd Font-11 Vncviewer.grabKeyboard: true Vncviewer.FullScreen: 1 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 6256be8..600e4d4 100755 --- a/.local/bin/dmlog +++ b/.local/bin/dmlog @@ -64,12 +64,8 @@ sub action "-fail-color", "0xcc241d"); } else { - if (HOSTNAME eq 'po-rbo') { - exec(SLOCK_PATH); - } - else { - exec(XSCREENSAVER_PATH, '-lock'); - } + exec(SLOCK_PATH); + # exec(XSCREENSAVER_PATH, '-lock'); } } elsif ($var eq ${+LIST}[1]) { diff --git a/.local/bin/scr2 b/.local/bin/scr2 index b0e7063..c8e230f 100755 --- a/.local/bin/scr2 +++ b/.local/bin/scr2 @@ -1,20 +1,20 @@ #!/bin/sh -if [ $1 == "low" ]; then +if [ "$1" = "low" ]; then xrandr \ - --output HDMI-0 --mode 1920x1080 --pos 1920x0 --rotate normal \ + --output HDMI-0 --off \ --output DP-0 --off \ --output DP-1 --off \ - --output DP-2 --off \ + --output DP-2 --mode 1920x1080 --rate 60 --pos 1920x0 --rotate normal \ --output DP-3 --off \ --output DP-4 --primary --mode 1920x1080 --rate 180 --pos 0x0 --rotate normal \ --output DP-5 --off else xrandr \ - --output HDMI-0 --mode 1920x1080 --pos 2560x0 --rotate normal \ + --output HDMI-0 --off \ --output DP-0 --off \ --output DP-1 --off \ - --output DP-2 --off \ + --output DP-2 --mode 2560x1440 --rate 60 --pos 2560x0 --rotate normal \ --output DP-3 --off \ --output DP-4 --primary --mode 2560x1440 --rate 144 --pos 0x0 --rotate normal \ --output DP-5 --off diff --git a/.local/bin/scr3 b/.local/bin/scr3 index a035fb0..81b7f86 100755 --- a/.local/bin/scr3 +++ b/.local/bin/scr3 @@ -1,12 +1,12 @@ #!/bin/sh xrandr \ - --output HDMI-0 --mode 1920x1080 --pos 4260x0 --rotate normal \ + --output HDMI-0 --mode 1920x1080 --rate 50 --pos 0x0 --rotate normal \ --output DP-0 --off \ --output DP-1 --off \ - --output DP-2 --mode 1680x1050 --pos 0x0 --rotate normal \ + --output DP-2 --mode 2560x1440 --rate 60 --pos 4480x0 --rotate normal \ --output DP-3 --off \ - --output DP-4 --primary --mode 2560x1440 --rate 144 --pos 1680x0 --rotate normal \ + --output DP-4 --primary --mode 2560x1440 --rate 144 --pos 1920x0 --rotate normal \ --output DP-5 --off |