From 7865626f5bd5b00feb9dca8782d8585b5110f110 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Wed, 21 Dec 2022 10:38:47 +0100 Subject: [PATCH 01/29] multimedia: Add initial commit --- multimedia/.config/beets/config.yaml | 100 +++ .../beets/lastgenre_canonicallist.yaml | 783 ++++++++++++++++++ .../.config/beets/lastgenre_whitelist.txt | 491 +++++++++++ multimedia/.config/mopidy/mopidy.conf | 261 ++++++ multimedia/.config/ncmpcpp/bindings | 630 ++++++++++++++ multimedia/.config/ncmpcpp/config | 56 ++ 6 files changed, 2321 insertions(+) create mode 100644 multimedia/.config/beets/config.yaml create mode 100644 multimedia/.config/beets/lastgenre_canonicallist.yaml create mode 100644 multimedia/.config/beets/lastgenre_whitelist.txt create mode 100644 multimedia/.config/mopidy/mopidy.conf create mode 100644 multimedia/.config/ncmpcpp/bindings create mode 100644 multimedia/.config/ncmpcpp/config diff --git a/multimedia/.config/beets/config.yaml b/multimedia/.config/beets/config.yaml new file mode 100644 index 0000000..59993f9 --- /dev/null +++ b/multimedia/.config/beets/config.yaml @@ -0,0 +1,100 @@ +# much of this such as the whitelist, canonical list for lasgenre +# is stolen from https://github.com/montchr/beets-config/ with much gratitude + +directory: ~/media/audio/music +threaded: true +art_filename: albumart + +paths: + default: "%the{$albumartist}/$album/$track $title" + singleton: "singletons/%the{$artist - $title}" + comp: compilations/$album/$track $title + albumtype:soundtrack: soundtracks/$album/$track $title + +item_fields: + multidisc: 1 if disctotal > 1 else 0 + artist_differs: 1 if albumartist != artist else 0 + +plugins: + - bpd + - chroma + - edit + - fetchart + - embedart + - mbsync + - importadded + - info + - inline + - the + - ftintitle + - fromfilename + - spotify + - deezer + - bandcamp + - acousticbrainz + - lastgenre + - ydl + +import: + bell: true + # Doesn't allow upgrades. + # incremental: true + languages: + - en + log: ~/.cache/beets.log + copy: false + move: true + quiet_fallback: skip + timid: false + write: true + +# Use the album's original date instead of the release's date +original_date: yes + +# Play it safe with filenames +asciify_paths: yes +max_filename_length: 255 + +edit: + itemfields: track title artist album + albumfields: album albumartist + +match: + preferred: + countries: ["US", "UK|GB", "DE", "NL", "SE"] + media: ["Digital Media|File", "CD"] + strong_rec_thresh: 0.15 + medium_red_thresh: 0.25 + rec_gap_thresh: 0.25 + +musicbrainz: + extra_tags: [year, catalognum, country, media, label] + +albumtypes: + types: + - ep: 'EP' + - single: 'Single' + - soundtrack: 'OST' + - live: 'Live' + - compilation: 'Anthology' + - remix: 'Remix' + ignore_va: compilation + bracket: '[]' + +fetchart: + sources: filesystem coverart discogs amazon albumart + +lastgenre: + auto: true + canonical: ~/.config/beets/lastgenre_canonicallist.yaml + count: 4 + fallback: "" + force: yes + min_weight: 6 + prefer_specific: false + separator: "; " + source: album + whitelist: ~/.config/beets/lastgenre_whitelist.txt + +bandcamp: + art: true diff --git a/multimedia/.config/beets/lastgenre_canonicallist.yaml b/multimedia/.config/beets/lastgenre_canonicallist.yaml new file mode 100644 index 0000000..db7cc4d --- /dev/null +++ b/multimedia/.config/beets/lastgenre_canonicallist.yaml @@ -0,0 +1,783 @@ +- 2-step +- acapella +- acid +- acid house +- acid jazz +- acid techno +- adult contemporary +- african +- african blues +- african heavy metal +- african hip hop +- afrobeat +- aggrotech +- alternative country +- alternative metal +- alternative rock +- ambient +- ambient dub +- ambient house +- ambient space jazz +- ambient techno +- american folk revival +- americana +- anison +- anti-folk +- apala +- arab pop +- asian underground +- atlanta hip hop: + - snap music +- australian country music +- avant-garde +- avant-garde jazz +- axé +- bachata +- baithak gana +- bakersfield sound +- balearic beat +- ballet +- baltimore club +- barbershop +- baroque pop +- baroque: + - baroque music +- bebop +- benga +- berlin school: + - berlin school of electronic music + - berlin-school +- big band +- big beat +- bikutsi +- black metal: + - viking metal +- blue-eyed soul +- bluegrass: + - progressive bluegrass + - reactionary bluegrass +- blues +- blues country +- blues rock +- blues shouter +- bolero +- bongo flava +- boogie +- boogie-woogie +- bossa nova +- bounce music +- brazilian +- brazilian rock +- breakbeat: + - 4-beat + - acid breaks + - breakbeat hardcore + - broken beat + - florida breaks + - nu skool breaks +- breakcore +- brega +- british blues +- british folk revival +- britpop: + - post-britpop +- bubblegum pop +- c-pop: + - cantopop +- cajun: + - cajun fiddle tunes +- calypso +- canadian blues +- cantata +- cape jazz +- celtic music +- chamber jazz +- chamber music: + - string quartet +- chanson +- chicago blues +- chicago house +- chillwave: + - chill wave +- chimurenga +- chiptune: + - bitpop + - game boy music + - nintendocore + - video game music + - yorkshire bleeps and bass +- choro +- christian country music +- christian hip hop +- christian metal +- christian pop +- christian rock +- chutney +- chutney soca +- classic country +- classical crossover +- classical: + - classical music + - orchestra: + - orchestral + - symphonic + - symphony +- close harmony +- coldwave +- comedy: + - comedy music + - comedy rock + - humor + - parody music + - stand-up +- compas +- computer music +- concerto: + - concerto grosso +- contemporary folk +- contemporary r&b +- continental jazz +- cool jazz +- country +- country blues +- country pop +- country rap +- country rock +- country soul +- country-rap +- coupé-décalé +- cowpunk +- crunkcore +- cybergrind +- dance-punk +- dance-rock +- dancehall +- dansband music +- dark ambient +- dark electro +- darkwave: + - dark wave +- death industrial +- death metal: + - goregrind +- deconstructed club +- deep house +- deep techno +- delta blues +- detroit blues +- detroit techno +- digital hardcore: + - bouncy house + - bouncy techno + - hardstyle + - jumpstyle + - makina + - uk hardcore +- disco: + - disco polo: + - euro disco + - nu-disco +- diva house +- dixieland +- doo wop +- doom metal +- doomcore +- downtempo: + - chill out + - ethnic electronica + - moombahton + - nu jazz +- dream pop +- drone metal +- drone: + - drone music +- drum and bass: + - darkcore + - darkstep + - drumfunk + - drumstep + - hardstep + - intelligent drum and bass + - jump-up + - liquid funk + - neurofunk + - raggacore + - sambass + - techstep +- dub poetry +- dub techno +- dub: + - dub music +- dubstep +- dubtronica +- dungeon synth +- dutch house +- east coast hip hop: + - brick city club + - hardcore hip hop + - mafioso rap + - new jersey hip hop +- easy listening: + - background music + - beautiful music + - elevator music + - furniture music + - middle of the road +- ebm: + - electronic body music: + - futurepop +- edm: + - electronic dance music +- electric blues +- electro +- electro house +- electro-grime +- electro-industrial +- electroacoustic: + - acousmatic music + - electroacoustic improvisation + - live electronics +- electroclash +- electrofunk +- electronic rock: + - alternative dance: + - baggy + - madchester + - electronicore + - ethereal wave + - new rave +- electropop +- electropunk +- emo +- enka +- eurodance: + - bubblegum dance + - italo dance + - turbofolk +- europop: + - austropop + - balkan pop + - french pop + - latin pop + - laïkó + - nederpop + - russian pop +- experimental pop +- experimental rock +- experimental: + - experimental music +- fann at-tanbura +- field recording +- fijiri +- filmi +- folk metal: + - celtic metal + - medieval metal +- folk punk: + - celtic punk + - gypsy punk +- folk rock +- folk: + - filk music + - folk music +- folktronica +- footwork +- forró +- fourth world: + - ethnic ambient + - tribal ambient +- franco-country +- freak folk +- free jazz + - free funk + - free improvisation +- freestyle house +- freestyle rap +- freestyle: + - freestyle music +- french house +- frevo +- fuji music +- funk carioca +- funk metal +- funk: + - deep funk + - go-go +- funky house +- g-funk +- gabber +- gamelan +- gangsta rap +- garage rock +- garage: + - 4x4 + - bassline + - breakstep + - funky + - speed garage +- genge +- ghetto house +- ghettotech +- glam metal +- glam rock +- glitch-hop +- glitch: + - clicks 'n' cuts +- goa: + - dark psytranceon + - goa trance + - psybreaks + - psyprog +- gospel blues +- goth rock: + - gothic rock +- gothic metal +- grime +- grindcore: + - crustgrind + - noisegrind +- grunge: + - post-grunge +- gulf and western +- gypsy jazz +- happy hardcore +- hard bop +- hard rock +- hardbag +- hardcore punk: + - street punk +- hellbilly music +- hi-nrg: + - eurobeat + - hard nrg + - new beat +- highlife +- hill country blues +- hip house +- hip-hop: + - alternative hip hop + - avant-garde hip hop + - chap hop + - chicago hip hop + - conscious hip hop + - detroit hip hop + - hip hop + - hip hop soul + - hip pop + - horrorcore + - hyphy + - jazz rap + - low bap + - lyrical hip hop + - merenrap + - motswako + - new jack swing + - new school hip hop + - old school hip hop + - political hip hop + - rap opera + - songo-salsa + - st. louis hip hop + - twin cities hip hop + - underground hip hop + - urban pasifika +- hiplife +- hokum +- hokum blues +- hong kong english pop +- honky tonk +- horror punk +- house +- houston hip hop: + - chopped and screwed +- idm +- illbient +- indian pop +- indie folk +- indie pop: + - dunedin sound + - twee pop +- indie rock +- indietronica +- industrial +- industrial dance +- industrial folk +- industrial hip hop +- industrial metal: + - neue deutsche härte +- industrial rock +- instrumental country +- instrumental hip hop +- iranian pop +- isicathamiya +- isolationism +- italo disco +- italo house +- j-pop +- jazz blues +- jazz fusion: + - fusion + - fusion jazz +- jazz rock +- jazz-funk +- jazz: + - british dance band + - crossover jazz + - cubop + - ethno jazz + - european free jazz + - m-base + - mainstream jazz + - novelty ragtime + - orchestral jazz + - shibuya-kei + - stride jazz + - third stream + - trad jazz + - vocal jazz + - west coast gypsy jazz + - west coast jazz +- jit +- jump blues +- jungle: + - oldschool jungle: + - darkside jungle + - ragga jungle +- jùjú +- k-pop: + - korean pop +- kansas city blues +- kansas city jazz +- kapuka +- kayōkyoku +- khaliji +- kizomba +- kosmische: + - kraut rock + - krautrock +- kuduro +- kwaito +- kwela +- lambada +- latin house +- latin jazz +- latin: + - chicha + - criolla + - cumbia + - huayno + - mariachi + - ranchera + - tejano +- live coding +- liwa +- lo-fi +- louisiana blues +- lounge: + - lounge music +- lovers rock +- lowercase +- lubbock sound +- luk thung: + - luk krung +- makossa +- maloya +- mambo +- mandopop +- manila sound +- maracatu +- marrabenta +- martial industrial +- mass +- math rock +- mbalax +- mbaqanga +- mbube +- melodic death metal +- memphis blues +- metal: + - heavy metal +- metalcore: + - deathcore + - mathcore: + - djent +- mexican pop +- miami bass +- minimal house +- minimal techno +- minimal wave +- modal jazz +- modern classical: + - contemporary classical +- morlam +- morna +- museve +- musique concrète: + - tape music +- méringue: + - merengue +- música popular brasileira +- música sertaneja +- nashville sound +- neo soul +- neo-bop jazz +- neo-psychedelia +- neo-swing +- neofolk +- neotraditional country +- nerdcore +- new age: + - new age music + - new-age + - new-age music +- new wave +- no wave +- noise pop +- noise rock +- noise: + - harsh noise + - japanoise + - noise music +- northern soul +- nu metal +- onkyokei +- opera +- oratorio +- organum +- outlaw country +- p-funk +- pagode +- palm-wine +- piano blues +- piedmont blues +- pinoy pop +- pop punk +- pop rock +- pop sunda +- pop: + - jangle pop + - latin ballad + - levenslied + - louisiana swamp pop + - motorpop + - new romanticism + - pop rap + - popera + - schlager + - sophisti-pop + - sunshine pop + - traditional pop music + - vispop + - wonky pop +- post-bop +- post-disco: + - dance-pop +- post-hardcore +- post-punk +- post-punk revival +- post-rock: + - post-metal +- power electronics +- power metal +- power noise +- powerviolence +- progressive country +- progressive electronic: + - progressive breaks + - progressive drum & bass + - progressive house/trance: + - disco house + - dream house + - space house + - progressive techno +- progressive folk +- progressive house +- progressive metal +- progressive rock: + - canterbury scene + - new prog + - rock in opposition +- psychedelic folk +- psychedelic pop +- psychedelic rock: + - acid rock + - freakbeat + - raga rock +- psychobilly +- psychobilly +- punk blues +- punk jazz +- punk: + - anarcho punk: + - crust punk: + - d-beat + - art punk + - christian punk + - deathrock + - garage punk + - skate punk +- punta +- punta rock +- r&b: + - rhythm and blues +- ragga: + - raggamuffin +- ragini +- ragtime +- rap rock: + - rap metal + - rapcore +- rasin +- rave: + - rave music +- raï +- red dirt +- reggae: + - 2 tone + - reggae en español: + - reggae 110 + - reggae bultrón + - romantic flow + - spanish reggae + - reggae fusion +- reggaeton +- requiem +- riot grrrl +- rock and roll +- rock: + - art rock + - beat music + - chinese rock + - dark cabaret + - desert rock + - paisley underground + - power pop + - visual kei: + - nagoya kei +- rockabilly +- rocksteady +- roots reggae +- sacred music: + - cantique +- gregorian chant +- sadcore +- sakara +- salsa +- samba +- samba rock +- sawt +- screamo +- sega +- seggae +- semba +- sertanejo +- shoegaze +- ska +- ska jazz +- ska punk: + - ska-core +- slowcore +- sludge metal +- smooth jazz +- soca +- soft rock +- son +- sonata +- soukous +- soul +- soul blues +- soul jazz +- south and southeast asian: + - baila + - bhangra + - bhojpuri + - dangdut + - lavani +- southern hip hop +- southern rock +- space age pop +- space disco: + - cosmic disco +- space rock +- speed metal +- speedcore +- st. louis blues +- stoner metal +- stoner rock +- straight-ahead jazz +- sufi rock +- sung poetry +- surf pop +- surf rock +- swamp blues +- swing +- swing house +- symphonic metal +- synthcore +- synthpop +- synthpunk +- taarab +- taiwanese pop +- tech house +- technical death metal +- techno-folk +- techno: + - free tekno + - nortec + - schranz + - techno-dnb + - tecno brega + - toytown techno +- technopop +- tecnobrega +- teen pop +- terrorcore +- texas blues +- texas country +- thai pop +- thrash metal: + - crossover thrash + - groove metal + - thrash +- thrashcore +- timba +- traditional country music +- trance: + - acid trance + - classic trance + - dream trance + - hard trance + - progressive trance + - psychedelic trance + - psytrance + - tech trance + - uplifting trance: + - orchestral uplifting + - vocal trance +- trap +- trip-hop: + - trip hop +- tropicalia +- truck-driving country +- turkish pop +- turntablism +- twoubadou +- uk garage +- uk hard house +- us garage +- vaporwave +- vocal house +- west coast blues +- west coast hip hop: + - chicano rap + - jerkin' +- western swing +- witch house +- world: + - world music +- worldbeat +- world fusion +- zouglou +- zouk +- zouk-lambada +- zydeco diff --git a/multimedia/.config/beets/lastgenre_whitelist.txt b/multimedia/.config/beets/lastgenre_whitelist.txt new file mode 100644 index 0000000..fd5bdd5 --- /dev/null +++ b/multimedia/.config/beets/lastgenre_whitelist.txt @@ -0,0 +1,491 @@ +2-step +acapella +acid +acid house +acid jazz +acid techno +adult contemporary +african +african blues +african heavy metal +african hip hop +afrobeat +aggrotech +alternative country +alternative metal +alternative rock +ambient +ambient dub +ambient house +ambient space jazz +ambient techno +american folk revival +americana +anison +anti-folk +apala +arab pop +asian underground +atlanta hip hop +australian country music +avant-garde +avant-garde jazz +axé +bachata +baithak gana +bakersfield sound +balearic beat +ballet +baltimore club +barbershop +baroque pop +baroque +bebop +benga +berlin school +big band +big beat +bikutsi +black metal +blue-eyed soul +bluegrass +blues +blues country +blues rock +blues shouter +bolero +bongo flava +boogie +boogie-woogie +bossa nova +bounce music +brazilian +brazilian rock +breakbeat +breakcore +brega +british blues +british folk revival +britpop +bubblegum pop +c-pop +cajun +calypso +canadian blues +cantata +cape jazz +celtic music +chamber jazz +chamber music +chanson +chicago blues +chicago house +chillwave +chimurenga +chiptune +choro +christian country music +christian hip hop +christian metal +christian pop +christian rock +chutney +chutney soca +classic country +classical crossover +classical +close harmony +coldwave +comedy +compas +computer music +concerto +contemporary folk +contemporary r&b +continental jazz +cool jazz +country +country blues +country pop +country rap +country rock +country soul +country-rap +coupé-décalé +cowpunk +crunkcore +cybergrind +dance-punk +dance-rock +dancehall +dansband music +dark ambient +dark electro +darkwave +death industrial +death metal +deconstructed club +deep house +deep techno +delta blues +detroit blues +detroit techno +digital hardcore +disco +diva house +dixieland +doo wop +doom metal +doomcore +downtempo +dream pop +drone metal +drone +drum and bass +dub poetry +dub techno +dub +dubstep +dubtronica +dungeon synth +dutch house +east coast hip hop +easy listening +ebm +edm +electric blues +electro +electro house +electro-grime +electro-industrial +electroacoustic +electroclash +electrofunk +electronic rock +electropop +electropunk +emo +enka +eurodance +europop +experimental pop +experimental rock +experimental +fann at-tanbura +field recording +fijiri +filmi +folk metal +folk punk +folk rock +folk +folktronica +footwork +forró +fourth world +franco-country +freak folk +free jazz +freestyle house +freestyle rap +freestyle +french house +frevo +fuji music +funk carioca +funk metal +funk +funky house +g-funk +gabber +gamelan +gangsta rap +garage rock +garage +genge +ghetto house +ghettotech +glam metal +glam rock +glitch-hop +glitch +goa +gospel blues +goth rock +gothic metal +grime +grindcore +grunge +gulf and western +gypsy jazz +happy hardcore +hard bop +hard rock +hardbag +hardcore punk +hellbilly music +hi-nrg +highlife +hill country blues +hip house +hip-hop +hiplife +hokum +hokum blues +hong kong english pop +honky tonk +horror punk +house +houston hip hop +idm +illbient +indian pop +indie folk +indie pop +indie rock +indietronica +industrial +industrial dance +industrial folk +industrial hip hop +industrial metal +industrial rock +instrumental country +instrumental hip hop +iranian pop +isicathamiya +isolationism +italo disco +italo house +j-pop +jazz blues +jazz fusion +jazz rock +jazz-funk +jazz +jit +jump blues +jungle +jùjú +k-pop +kansas city blues +kansas city jazz +kapuka +kayōkyoku +khaliji +kizomba +kosmische +kuduro +kwaito +kwela +lambada +latin house +latin jazz +latin +live coding +liwa +lo-fi +louisiana blues +lounge +lovers rock +lowercase +lubbock sound +luk thung +makossa +maloya +mambo +mandopop +manila sound +maracatu +marrabenta +martial industrial +mass +math rock +mbalax +mbaqanga +mbube +melodic death metal +memphis blues +metal +metalcore +mexican pop +miami bass +minimal house +minimal techno +minimal wave +modal jazz +modern classical +morlam +morna +museve +musique concrète +méringue +música popular brasileira +música sertaneja +nashville sound +neo soul +neo-bop jazz +neo-psychedelia +neo-swing +neofolk +neotraditional country +nerdcore +new age +new wave +no wave +noise pop +noise rock +noise +northern soul +nu metal +onkyokei +opera +oratorio +organum +outlaw country +p-funk +pagode +palm-wine +piano blues +piedmont blues +pinoy pop +pop punk +pop rock +pop sunda +pop +post-bop +post-disco +post-hardcore +post-punk +post-punk revival +post-rock +power electronics +power metal +power noise +powerviolence +progressive country +progressive electronic +progressive folk +progressive house +progressive metal +progressive rock +psychedelic folk +psychedelic pop +psychedelic rock +psychobilly +psychobilly +punk blues +punk jazz +punk +punta +punta rock +r&b +ragga +ragini +ragtime +rap rock +rasin +rave +raï +red dirt +reggae +reggaeton +requiem +riot grrrl +rock and roll +rock +rockabilly +rocksteady +roots reggae +sacred music +sadcore +sakara +salsa +samba +samba rock +sawt +screamo +sega +seggae +semba +sertanejo +shoegaze +ska +ska jazz +ska punk +slowcore +sludge metal +smooth jazz +soca +soft rock +son +sonata +soukous +soul +soul blues +soul jazz +south and southeast asian +southern hip hop +southern rock +space age pop +space disco +space rock +speed metal +speedcore +st. louis blues +stoner metal +stoner rock +straight-ahead jazz +sufi rock +sung poetry +surf pop +surf rock +swamp blues +swing +swing house +symphonic metal +synthcore +synthpop +synthpunk +taarab +taiwanese pop +tech house +technical death metal +techno-folk +techno +technopop +tecnobrega +teen pop +terrorcore +texas blues +texas country +thai pop +thrash metal +thrashcore +timba +traditional country music +trance +trap +trip-hop +tropicalia +truck-driving country +turkish pop +turntablism +twoubadou +uk garage +uk hard house +us garage +vaporwave +vocal house +west coast blues +west coast hip hop +western swing +witch house +world +worldbeat +world fusion +gregorian chant +zouglou +zouk +zouk-lambada +zydeco diff --git a/multimedia/.config/mopidy/mopidy.conf b/multimedia/.config/mopidy/mopidy.conf new file mode 100644 index 0000000..c43d906 --- /dev/null +++ b/multimedia/.config/mopidy/mopidy.conf @@ -0,0 +1,261 @@ +# For further information about options in this file see: +# https://docs.mopidy.com/ +# +# The initial commented out values reflect the defaults as of: +# Mopidy 3.4.1 +# Mopidy-Bandcamp 1.1.5 +# Mopidy-File 3.4.1 +# Mopidy-HTTP 3.4.1 +# Mopidy-Iris 3.65.0 +# Mopidy-Local 3.2.1 +# Mopidy-M3U 3.4.1 +# Mopidy-MPD 3.3.0 +# Mopidy-MPRIS 3.0.3 +# Mopidy-Scrobbler 2.0.1 +# Mopidy-SoftwareMixer 3.4.1 +# Mopidy-SomaFM 2.0.2 +# Mopidy-Spotify 4.1.1 +# Mopidy-Stream 3.4.1 +# Mopidy-YouTube 3.5 +# +# Available options and defaults might have changed since then, +# run `mopidy config` to see the current effective config and +# `mopidy --version` to check the current version. + +[core] +#cache_dir = $XDG_CACHE_DIR/mopidy +#config_dir = $XDG_CONFIG_DIR/mopidy +#data_dir = $XDG_DATA_DIR/mopidy +#max_tracklist_length = 10000 +#restore_state = false + +[logging] +#verbosity = 0 +#format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s +#color = true +#config_file = + +[audio] +#mixer = software +#mixer_volume = +#output = autoaudiosink +#buffer_time = + +[proxy] +#scheme = +#hostname = +#port = +#username = +#password = + +[spotify] +enabled = false +#username = +#password = +#client_id = +#client_secret = +#bitrate = 160 +#volume_normalization = true +#private_session = false +timeout = 5000 +#allow_cache = true +#allow_network = true +#allow_playlists = true +#search_album_count = 20 +#search_artist_count = 10 +#search_track_count = 50 +#toplist_countries = + +[iris] +#enabled = true +#country = NZ +#locale = en_NZ +#verify_certificates = true +#snapcast_enabled = true +#snapcast_host = localhost +#snapcast_port = 1780 +#snapcast_ssl = false +#snapcast_stream = Default +#spotify_authorization_url = https://jamesbarnsley.co.nz/iris/auth_spotify.php +#lastfm_authorization_url = https://jamesbarnsley.co.nz/iris/auth_lastfm.php +#genius_authorization_url = https://jamesbarnsley.co.nz/iris/auth_genius.php +#data_dir = $XDG_DATA_DIR/iris + +[file] +enabled = false +#media_dirs = +# $XDG_MUSIC_DIR|Music +# ~/|Home +#excluded_file_extensions = +# .directory +# .html +# .jpeg +# .jpg +# .log +# .nfo +# .pdf +# .png +# .txt +# .zip +#show_dotfiles = false +#follow_symlinks = false +#metadata_timeout = 1000 + +[http] +#enabled = true +#hostname = 127.0.0.1 +#port = 6680 +#zeroconf = Mopidy HTTP server on $hostname +#allowed_origins = +#csrf_protection = true +#default_app = mopidy + +[m3u] +#enabled = true +#base_dir = $XDG_MUSIC_DIR +#default_encoding = latin-1 +#default_extension = .m3u8 +#playlists_dir = + +[softwaremixer] +#enabled = true + +[stream] +#enabled = true +#protocols = +# http +# https +# mms +# rtmp +# rtmps +# rtsp +#metadata_blacklist = +#timeout = 5000 + +[mpd] +#enabled = true +#hostname = 127.0.0.1 +#port = 6600 +#password = +#max_connections = 20 +#connection_timeout = 60 +#zeroconf = Mopidy MPD server on $hostname +#command_blacklist = +# listall +# listallinfo +#default_playlist_scheme = m3u + +[local] +#enabled = true +#max_search_results = 100 +media_dir = $XDG_MUSIC_DIR +#scan_timeout = 1000 +#scan_flush_threshold = 100 +#scan_follow_symlinks = false +#included_file_extensions = +#excluded_file_extensions = +# .cue +# .directory +# .html +# .jpeg +# .jpg +# .log +# .nfo +# .pdf +# .png +# .txt +# .zip +#directories = +# Albums local:directory?type=album +# Artists local:directory?type=artist +# Composers local:directory?type=artist&role=composer +# Genres local:directory?type=genre +# Performers local:directory?type=artist&role=performer +# Release Years local:directory?type=date&format=%25Y +# Tracks local:directory?type=track +# Last Week's Updates local:directory?max-age=604800 +# Last Month's Updates local:directory?max-age=2592000 +#timeout = 10 +#use_artist_sortname = false +#album_art_files = +# *.jpg +# *.jpeg +# *.png + +[mpris] +#enabled = true +#bus_type = session + +[scrobbler] +#enabled = true +#username = +#password = + +[somafm] +#enabled = true +#encoding = mp3 +#quality = fast +dj_as_artist = false + +[youtube] +#enabled = true +allow_cache = true +#youtube_api_key = +#search_results = 15 +#playlist_max_videos = 20 +#api_enabled = false +#channel_id = +#musicapi_enabled = false +#musicapi_cookie = +#autoplay_enabled = false +#strict_autoplay = false +#max_autoplay_length = 600 +#max_degrees_of_separation = 3 +youtube_dl_package = yt-dlp + +[bandcamp] +enabled = false +#discover_pages = 1 +#collection_items = 50 +discover_genres = +# All +# Electronic +# Rock +# Metal +# Alternative +# Hip-Hop/Rap +# Experimental +# Punk +# Folk +# Pop +# Ambient +# Soundtrack +# World +# Jazz +# Acoustic +# Funk +# R&B/Soul +# Devotional +# Classical +# Reggae +# Podcasts +# Country +# Spoken Word +# Comedy +# Blues +# Kids +# Audiobooks +# Latin +discover_tags = + Outrun + Future Funk + Alternative Hip-Hop + Cozy Synth + Post Metal + Post Punk +# Tokyo, Japan +#image_sizes = +# 10 +# 5 +# 2 +#identity = diff --git a/multimedia/.config/ncmpcpp/bindings b/multimedia/.config/ncmpcpp/bindings new file mode 100644 index 0000000..0c8a6ad --- /dev/null +++ b/multimedia/.config/ncmpcpp/bindings @@ -0,0 +1,630 @@ + +def_key "+" + show_clock +def_key "=" + volume_up + +def_key "j" + scroll_down +def_key "k" + scroll_up +def_key "ctrl-u" + page_up +def_key "ctrl-d" + page_down +def_key "u" + page_up +def_key "d" + page_down +def_key "h" + previous_column +def_key "l" + next_column +def_key "." + show_lyrics +def_key "n" + next_found_item +def_key "N" + previous_found_item +# not used but bound +def_key "J" + move_selected_items_down +def_key "K" + move_selected_items_up +def_key "h" + jump_to_parent_directory +def_key "l" + enter_directory +def_key "l" + run_action +def_key "l" + play_item +def_key "m" + show_media_library +def_key "m" + toggle_media_library_columns_mode +def_key "t" + select_item + scroll_down +def_key "v" + select_range +def_key "ctrl-v" + select_item +def_key "V" + remove_selection +def_key "G" + move_end +def_key "g" + move_home +def_key "U" + update_database +def_key "s" + reset_search_engine +def_key "s" + show_search_engine +#def_key "f" +# show_browser +#def_key "f" +# change_browse_mode +def_key "x" + delete_playlist_items +def_key "P" + move_selected_items_to +def_key "f" + seek_forward +def_key "b" + seek_backward +def_key "'" + jump_to_playing_song + +############################################################## +## This is the example bindings file. Copy it to ## +## $XDG_CONFIG_HOME/ncmpcpp/bindings or ~/.ncmpcpp/bindings ## +## and set up your preferences. ## +############################################################## +## +##### General rules ##### +## +## 1) Because each action has runtime checks whether it's +## ok to run it, a few actions can be bound to one key. +## Actions will be bound in order given in configuration +## file. When a key is pressed, first action in order +## will test itself whether it's possible to run it. If +## test succeeds, action is executed and other actions +## bound to this key are ignored. If it doesn't, next +## action in order tests itself etc. +## +## 2) It's possible to bind more that one action at once +## to a key. It can be done using the following syntax: +## +## def_key "key" +## action1 +## action2 +## ... +## +## This creates a chain of actions. When such chain is +## executed, each action in chain is run until the end of +## chain is reached or one of its actions fails to execute +## due to its requirements not being met. If multiple actions +## and/or chains are bound to the same key, they will be +## consecutively run until one of them gets fully executed. +## +## 3) When ncmpcpp starts, bindings configuration file is +## parsed and then ncmpcpp provides "missing pieces" +## of default keybindings. If you want to disable some +## bindings, there is a special action called 'dummy' +## for that purpose. Eg. if you want to disable ability +## to crop playlists, you need to put the following +## into configuration file: +## +## def_key "C" +## dummy +## +## After that ncmpcpp will not bind any default action +## to this key. +## +## 4) To let you write simple macros, the following special +## actions are provided: +## +## - push_character "character" - pushes given special +## character into input queue, so it will be immediately +## picked by ncmpcpp upon next call to readKey function. +## Accepted values: mouse, up, down, page_up, page_down, +## home, end, space, enter, insert, delete, left, right, +## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\, +## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace. +## In addition, most of these names can be prefixed with +## alt-/ctrl-/shift- to be recognized with the appropriate +## modifier key(s). +## +## - push_characters "string" - pushes given string into +## input queue. +## +## - require_runnable "action" - checks whether given action +## is runnable and fails if it isn't. This is especially +## useful when mixed with previous two functions. Consider +## the following macro definition: +## +## def_key "key" +## push_characters "custom_filter" +## apply_filter +## +## If apply_filter can't be currently run, we end up with +## sequence of characters in input queue which will be +## treated just as we typed them. This may lead to unexpected +## results (in this case 'c' will most likely clear current +## playlist, 'u' will trigger database update, 's' will stop +## playback etc.). To prevent such thing from happening, we +## need to change above definition to this one: +## +## def_key "key" +## require_runnable "apply_filter" +## push_characters "custom_filter" +## apply_filter +## +## Here, first we test whether apply_filter can be actually run +## before we stuff characters into input queue, so if condition +## is not met, whole chain is aborted and we're fine. +## +## - require_screen "screen" - checks whether given screen is +## currently active. accepted values: browser, clock, help, +## media_library, outputs, playlist, playlist_editor, +## search_engine, tag_editor, visualizer, last_fm, lyrics, +## selected_items_adder, server_info, song_info, +## sort_playlist_dialog, tiny_tag_editor. +## +## - run_external_command "command" - runs given command using +## system() function. +## +## - run_external_console_command "command" - runs given console +## command using system() function. +## +## +## 5) In addition to binding to a key, you can also bind actions +## or chains of actions to a command. If it comes to commands, +## syntax is very similar to defining keys. Here goes example +## definition of a command: +## +## def_command "quit" [deferred] +## stop +## quit +## +## If you execute the above command (which can be done by +## invoking action execute_command, typing 'quit' and pressing +## enter), ncmpcpp will stop the player and then quit. Note the +## presence of word 'deferred' enclosed in square brackets. It +## tells ncmpcpp to wait for confirmation (ie. pressing enter) +## after you typed quit. Instead of 'deferred', 'immediate' +## could be used. Then ncmpcpp will not wait for confirmation +## (enter) and will execute the command the moment it sees it. +## +## Note: while command chains are executed, internal environment +## update (which includes current window refresh and mpd status +## update) is not performed for performance reasons. However, it +## may be desirable to do so in some situration. Therefore it's +## possible to invoke by hand by performing 'update enviroment' +## action. +## +## Note: There is a difference between: +## +## def_key "key" +## action1 +## +## def_key "key" +## action2 +## +## and +## +## def_key "key" +## action1 +## action2 +## +## First one binds two single actions to the same key whilst +## second one defines a chain of actions. The behavior of +## these two is different and is described in (1) and (2). +## +## Note: Function def_key accepts non-ascii characters. +## +##### List of unbound actions ##### +## +## The following actions are not bound to any key/command: +## +## - set_volume +## - load +## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "shift-up" +# select_item +# scroll_up +# +#def_key "down" +# scroll_down +# +#def_key "shift-down" +# select_item +# scroll_down +# +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "insert" +# select_item +# +#def_key "enter" +# enter_directory +# +#def_key "enter" +# toggle_output +# +#def_key "enter" +# run_action +# +#def_key "enter" +# play_item +# +#def_key "space" +# add_item_to_playlist +# +#def_key "space" +# toggle_lyrics_update_on_song_change +# +#def_key "space" +# toggle_visualization_type +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_browser_items +# +#def_key "delete" +# delete_stored_playlist +# +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift-tab" +# previous_screen +# +#def_key "f1" +# show_help +# +#def_key "1" +# show_playlist +# +#def_key "2" +# show_browser +# +#def_key "2" +# change_browse_mode +# +#def_key "3" +# show_search_engine +# +#def_key "3" +# reset_search_engine +# +#def_key "4" +# show_media_library +# +#def_key "4" +# toggle_media_library_columns_mode +# +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl-h" +# jump_to_parent_directory +# +#def_key "ctrl-h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +#def_key "backspace" +# play +# +#def_key "f" +# seek_forward +# +#def_key "b" +# seek_backward +# +#def_key "r" +# toggle_repeat +# +#def_key "z" +# toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl-s" +# sort_playlist +# +#def_key "ctrl-s" +# toggle_browser_sort_mode +# +#def_key "ctrl-s" +# toggle_media_library_sort_mode +# +#def_key "ctrl-r" +# reverse_playlist +# +#def_key "ctrl-f" +# apply_filter +# +#def_key "ctrl-_" +# select_found_items +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "ctrl-v" +# select_range +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# fetch_lyrics_in_background +# +#def_key "alt-l" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl-l" +# toggle_screen_lock +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# add_random_items +# +#def_key "ctrl-p" +# set_selected_items_priority +# +#def_key "q" +# quit +# diff --git a/multimedia/.config/ncmpcpp/config b/multimedia/.config/ncmpcpp/config new file mode 100644 index 0000000..eeefbaa --- /dev/null +++ b/multimedia/.config/ncmpcpp/config @@ -0,0 +1,56 @@ +mouse_support = "yes" +jump_to_now_playing_song_at_start = "yes" +playlist_disable_highlight_delay = "3" +message_delay_time = "1" +song_window_title_format = "{%a - }{%t}|{%f}" +titles_visibility = "yes" +header_text_scrolling = "yes" +display_remaining_time = "yes" +ignore_leading_the = "yes" +colors_enabled = "yes" +color1 = "cyan" +color2 = "blue" +current_item_prefix = "$(magenta_236)" +current_item_suffix = "$(end)" +current_item_inactive_column_prefix = "$(magenta)" +current_item_inactive_column_suffix = "$(end)" + +[header] +header_visibility = "no" +# header_window_color = "magenta" +header_window_color = "default" +volume_color = "4" +# state_flags_color = "blue" +# main_window_color = "cyan" +state_line_color = "9" + +[playlist] +playlist_display_mode = "columns" #(classic/columns) +browser_display_mode = "columns" #(classic/columns) +song_columns_list_format = "(33)[cyan]{t} (32)[green]{a} (30)[magenta]{b} (5f)[blue]{l}" +song_list_format = "{%a - }{%t}|{$5%f$9}$R{$7(%l)$9}" +now_playing_prefix = "$b" +now_playing_suffix = "$/b" +browser_playlist_prefix = "$1»$1 " + +[statusbar] +#progressbar_look = "─╼" (Alternative look) +progressbar_look = "━━━" +progressbar_color = "9" +statusbar_visibility = "yes" +progressbar_elapsed_color = "4" +statusbar_color = "cyan" +song_status_format = "$5$b%t $5$/b• $3%a $5• $6%b {(Disc %d) }$5• $4%y" + +[library] +song_library_format = "{{%a - %t}|{%f}}{$R%l}" +empty_tag_marker = "" +empty_tag_color = "9" + +[global] +user_interface = "alternative" #(classic/alternative) +main_window_color = "default" +centered_cursor = "yes" +enable_window_title = "yes" +external_editor = "nvim" +execute_on_song_change="notify-send "Now Playing ♫" "$(playerctl metadata artist): $(playerctl metadata title)" -i $HOME/.local/share/mopidy/local/images/$(playerctl metadata mpris:artUrl | sed -e 's|/local/||')" From 660f6b0ca6f2cc2a9747c38b87aa205fcc7b125a Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 24 Dec 2022 16:41:45 +0100 Subject: [PATCH 02/29] wayland: Fix suspend input locking after timeout This commit fixes input locking when suspend was invoked autoatically after a certain amount of time. Previously, it would invoke the lockscreen first, then dim the screen and finally suspend the machine. While suspending it would invoke the lockscreen *again* however, which seems to lead to generally locking input (perhaps 2 instances of waylock disable each others' input ability?). This change checks for a running lockscreen first before invoking another one, which should hopefully fix the issue. --- wayland/.config/river/init | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index 81ec6b6..65e2300 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -250,12 +250,12 @@ exec kanshi & # start screen idle locking/dimming/sleep tool killall swayidle exec swayidle \ - timeout "${time_to_lockscreen}" 'lockscreen' \ + timeout "${time_to_lockscreen}" 'pidof waylock || lockscreen' \ timeout "${time_to_screendim}" 'wlopm --off "*"' \ timeout "${time_to_suspend}" 'systemctl suspend-then-hibernate' \ - resume 'wlopm --on "*"' \ - after-resume 'wlopm --on "*"' \ - before-sleep 'lockscreen' & + resume 'wlopm --on "*"' \ + after-resume 'wlopm --on "*"' \ + before-sleep 'pidof waylock || lockscreen' & killall clipman exec wl-paste -t text --watch clipman store & From 2bff4dfe76bc010e9e8f74493001a70755f22198 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 24 Dec 2022 16:44:59 +0100 Subject: [PATCH 03/29] wayland: Set wallpapers for all connected screens Changes the wallpaper setting code on startup to set a wallpaper for each screen that it finds currently connected. Still a bit hacky and should be improved for reactive wallpaper setting as new screens are connected/disconnected but should work for the moment. --- wayland/.config/river/init | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index 65e2300..04ee534 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -228,12 +228,15 @@ done setxkbmap -option "compose:menu" # set a nice wallpaper -exec swww init & -if [ -e "$HOME/pictures/wall_l.jpg" ] && [ -e "$HOME/pictures/wall_r.jpg" ]; then - swww img -o DP-5 "$HOME/pictures/wall_l.jpg" & - swww img -o DP-3 "$HOME/pictures/wall_r.jpg" & -elif [ -e "$HOME/pictures/wall.jpg" ]; then - swww img "$HOME/pictures/wall.jpg" & +if exist wlopm && exist swww; then + exec swww init & + if [ -e "$HOME/pictures/wall.jpg" ]; then + swww img "$HOME/pictures/wall.jpg" & + fi + if wlopm | grep -q DP-5 && wlopm | grep -q DP-3 && [ -e "$HOME/pictures/wall_l.jpg" ] && [ -e "$HOME/pictures/wall_r.jpg" ]; then + swww img -o DP-5 "$HOME/pictures/wall_l.jpg" & + swww img -o DP-3 "$HOME/pictures/wall_r.jpg" & + fi fi # killall mako From e72da989468fafe941c9854a974250db9ea3eb08 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 30 Dec 2022 14:48:11 +0100 Subject: [PATCH 04/29] multimedia: Update beets configuration --- multimedia/.config/beets/config.yaml | 123 ++++++++++-------- .../sh/env.d/beets-ensure-library-dir.sh | 4 + 2 files changed, 72 insertions(+), 55 deletions(-) create mode 100644 multimedia/.config/sh/env.d/beets-ensure-library-dir.sh diff --git a/multimedia/.config/beets/config.yaml b/multimedia/.config/beets/config.yaml index 59993f9..b70f81b 100644 --- a/multimedia/.config/beets/config.yaml +++ b/multimedia/.config/beets/config.yaml @@ -2,9 +2,40 @@ # is stolen from https://github.com/montchr/beets-config/ with much gratitude directory: ~/media/audio/music +library: ~/.local/share/beets/library.db + threaded: true art_filename: albumart +# Use the album's original date instead of the release's date +original_date: yes +# Use safer pathnames +asciify_paths: yes +max_filename_length: 255 +# Long format - I don't need all the extra info for each invocation +#format_item: '[$id] [$album_id] [$singleton] $albumartist - $title - $album - $original_year - [$format - $bitrate $length $filesize]' +#format_album: '[$id] $albumartist - $album - $original_year [$catalognum]' + +clutter: +- Thumbs.db +- .DS_Store +- '*.m3u' +- '*.pls' +- '*.db' + +import: + copy: false + move: true + write: true + bell: true + # incremental: true + languages: + - en + log: ~/.cache/beets.log + quiet_fallback: skip + timid: false + +ignore_hidden: yes paths: default: "%the{$albumartist}/$album/$track $title" singleton: "singletons/%the{$artist - $title}" @@ -15,49 +46,12 @@ item_fields: multidisc: 1 if disctotal > 1 else 0 artist_differs: 1 if albumartist != artist else 0 -plugins: - - bpd - - chroma - - edit - - fetchart - - embedart - - mbsync - - importadded - - info - - inline - - the - - ftintitle - - fromfilename - - spotify - - deezer - - bandcamp - - acousticbrainz - - lastgenre - - ydl - -import: - bell: true - # Doesn't allow upgrades. - # incremental: true - languages: - - en - log: ~/.cache/beets.log - copy: false - move: true - quiet_fallback: skip - timid: false - write: true - -# Use the album's original date instead of the release's date -original_date: yes - -# Play it safe with filenames -asciify_paths: yes -max_filename_length: 255 - -edit: - itemfields: track title artist album - albumfields: album albumartist +musicbrainz: + extra_tags: [year, catalognum, country, media, label] + user: martyo + pass: u^a<7YKULz\#CKX\-Fm]K%Up0 + auto: yes + remove: yes match: preferred: @@ -67,19 +61,35 @@ match: medium_red_thresh: 0.25 rec_gap_thresh: 0.25 -musicbrainz: - extra_tags: [year, catalognum, country, media, label] +plugins: + - acousticbrainz + - bandcamp + - chroma + - deezer + - describe + - edit + - embedart + - export + - fetchart + - fromfilename + - ftintitle + - fuzzy + - importadded + - info + - inline + - lastgenre + - lastimport + - mbcollection + - mbsync + - missing + - spotify + - the + - ydl -albumtypes: - types: - - ep: 'EP' - - single: 'Single' - - soundtrack: 'OST' - - live: 'Live' - - compilation: 'Anthology' - - remix: 'Remix' - ignore_va: compilation - bracket: '[]' +edit: + itemfields: track title artist album + albumfields: album albumartist albumtype + ignore_fields: id path fetchart: sources: filesystem coverart discogs amazon albumart @@ -96,5 +106,8 @@ lastgenre: source: album whitelist: ~/.config/beets/lastgenre_whitelist.txt +lastfm: + user: schmitzkater + bandcamp: art: true diff --git a/multimedia/.config/sh/env.d/beets-ensure-library-dir.sh b/multimedia/.config/sh/env.d/beets-ensure-library-dir.sh new file mode 100644 index 0000000..5ac8fa0 --- /dev/null +++ b/multimedia/.config/sh/env.d/beets-ensure-library-dir.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +# Ensure the directory for beets library exists or it errors out on startup + +[ -e "${XDG_DATA_HOME:-$HOME/.local/share}/beets" ] || mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/beets" From 1701b9d34e37a444e1eb982773377404ee52ec80 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 5 Jan 2023 22:50:15 +0100 Subject: [PATCH 05/29] ncmpcpp: Set song notification class and priority --- multimedia/.config/ncmpcpp/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multimedia/.config/ncmpcpp/config b/multimedia/.config/ncmpcpp/config index eeefbaa..7643757 100644 --- a/multimedia/.config/ncmpcpp/config +++ b/multimedia/.config/ncmpcpp/config @@ -53,4 +53,4 @@ main_window_color = "default" centered_cursor = "yes" enable_window_title = "yes" external_editor = "nvim" -execute_on_song_change="notify-send "Now Playing ♫" "$(playerctl metadata artist): $(playerctl metadata title)" -i $HOME/.local/share/mopidy/local/images/$(playerctl metadata mpris:artUrl | sed -e 's|/local/||')" +execute_on_song_change="notify-send "Now Playing ♫" "$(playerctl metadata artist): $(playerctl metadata title)" -i $HOME/.local/share/mopidy/local/images/$(playerctl metadata mpris:artUrl | sed -e 's|/local/||') -c mpd -u low" From 912458d8f0cef4023734817c7e1176522dfae5b4 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:42:34 +0100 Subject: [PATCH 06/29] mpv: Remove deprecated and superfluous settings --- mpv/.config/mpv/mpv.conf | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mpv/.config/mpv/mpv.conf b/mpv/.config/mpv/mpv.conf index 2426cfc..2bb8cf4 100644 --- a/mpv/.config/mpv/mpv.conf +++ b/mpv/.config/mpv/mpv.conf @@ -81,18 +81,13 @@ volume-max=150 audio-file-auto=fuzzy # playing at different speed will pitch-correct audio-pitch-correction=yes -# no audio popping on seek -audio-stream-silence -# lets mpv calc latency instead of PA; disable if errors on network playback or similar -pulse-latency-hacks=yes ### Video +hwdec=auto profile=opengl-hq opengl-early-flush=auto opengl-pbo=no -# brigheen video slightly to account for daylight displaying -gamma-factor=1.1 # ever so slightly up saturation saturation=12 # interpolation options, will take some more cpu From 44f7c2e6ca2a68219561471bd1a6ac3d59539854 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:48:13 +0100 Subject: [PATCH 07/29] bootstrap: Update package list --- bootstrap/packages.tsv | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bootstrap/packages.tsv b/bootstrap/packages.tsv index 863474e..e648a3b 100644 --- a/bootstrap/packages.tsv +++ b/bootstrap/packages.tsv @@ -17,8 +17,8 @@ aspell-de German dictionary for aspell R aspell-en English dictionary for aspell R atool A script for managing file archives of various types R aubio A tool for extracting annotations from audio signals R -awesome Highly configurable framework window manager R barrier Open-source KVM software based on Synergy (GUI) R +base Minimal package set to define a basic Arch Linux installation R bash-bats Bash Automated Testing System R bash-completion Programmable completion for the bash shell R bash-language-server Bash language server implementation based on Tree Sitter and its grammar for Bash R @@ -101,6 +101,7 @@ htop Interactive process viewer R hugo Fast and Flexible Static Site Generator in Go R iftop Display bandwidth usage on an interface R imapfilter A mail filtering utility for processing IMAP mailboxes A +imv Image viewer for Wayland and X11 R intel-ucode Microcode update files for Intel CPUs R iputils Network monitoring tools, including ping R ipython An enhanced Interactive Python shell. R @@ -152,18 +153,20 @@ micro Modern and intuitive terminal-based text editor R mimeo Open files by MIME-type or file name using regular expressions. A minidlna A DLNA/UPnP-AV Media server (aka ReadyDLNA) R minio-client Replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage R +mopidy-bandcamp Mopidy backend for Bandcamp A mopidy-iris A Mopidy Web client that utilizes the Spotify and EchoNest frameworks. (Formerly Spotmop) A mopidy-local Mopidy extension for local media playback A mopidy-mpd Mopidy extension for controlling playback from MPD clients A mopidy-mpris Mopidy extension for controlling Mopidy through the MPRIS D-Bus interface A mopidy-scrobbler Mopidy extension for scrobbling played tracks to Last.fm A +mopidy-somafm Mopidy extension for playing music from SomaFM A mopidy-spotify Mopidy extension for playing music from Spotify A +mopidy-youtube Mopidy extension for playing music from Youtube A moreutils A growing collection of the unix tools that nobody thought to write thirty years ago R mosh Mobile shell, surviving disconnects with local echo and line editing R mpv-mpris MPRIS plugin for mpv R msmtp A mini smtp client R mutt-ics Show calendar event details in mutt A -nano Pico editor clone with enhancements R ncmpcpp Almost exact clone of ncmpc with some new features R needrestart Restart daemons after library updates. A neomutt A version of mutt with added features R @@ -173,7 +176,7 @@ netctl Profile based systemd network management R nethogs A net top tool which displays traffic used per process instead of per IP or interface R network-manager-applet Applet for managing network connections R networkmanager-openconnect NetworkManager VPN plugin for OpenConnect R -newsboat An RSS/Atom feed reader for text terminals R +newsboat RSS/Atom feed reader for text terminals R nextcloud-client Nextcloud desktop client R nfs-utils Support programs for Network File Systems R nmap Utility for network discovery and security auditing R @@ -324,7 +327,6 @@ xdg-user-dirs Manage user directories like ~/Desktop and ~/Music R xsv A CLI for indexing, slicing, analyzing, splitting and joining CSV files R yaml-language-server YAML Language Server R yarn Fast, reliable, and secure dependency management R -youtube-dl A command-line program to download videos from YouTube.com and a few more sites R yt-dlp A youtube-dl fork with additional features and fixes R ytfzf A POSIX script to find and watch youtube videos from the terminal R zathura-cb Adds comic book support to zathura R From 001919d183c2faa72e23d06d0ae657449f1512e5 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:48:41 +0100 Subject: [PATCH 08/29] mako: Add --- mako/.config/mako/config | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 mako/.config/mako/config diff --git a/mako/.config/mako/config b/mako/.config/mako/config new file mode 100644 index 0000000..2a53616 --- /dev/null +++ b/mako/.config/mako/config @@ -0,0 +1,30 @@ +sort=-time +layer=overlay +background-color=#2e3440 +width=300 +height=110 +border-size=2 +border-color=#88c0d0 +border-radius=15 +max-icon-size=64 +default-timeout=5000 +ignore-timeout=1 +font=monospace 14 + +[urgency=low] +border-color=#cccccc + +[urgency=normal] +border-color=#d08770 + +[urgency=critical] +#on-notify=exec mpv /usr/share/sounds/freedesktop/stereo/message.oga +border-color=#bf616a +default-timeout=0 + +[mode=do-not-disturb] +invisible=1 + +[category=mpd] +default-timeout=2000 +group-by=category From 9a1f9be8c6e60b494670adc6fe21d32a9214124d Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:48:54 +0100 Subject: [PATCH 09/29] mail: Switch to imv for images --- office/.config/neomutt/mailcap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/office/.config/neomutt/mailcap b/office/.config/neomutt/mailcap index c1634ae..d1afae9 100644 --- a/office/.config/neomutt/mailcap +++ b/office/.config/neomutt/mailcap @@ -10,7 +10,7 @@ text/calendar; mutt-ics; copiousoutput application/ics; mutt-ics; copiousoutput # open images externally -image/*; nsxiv %s ; +image/*; imv %s ; # open videos in mpv video/*; mpv --autofit-larger=90\%x90\% %s; needsterminal; From ccd9c51cc0f6ffeefbee313f0c92333f31bd48fa Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:49:15 +0100 Subject: [PATCH 10/29] mail: Allow moving threads to other mailboxes --- office/.config/neomutt/maps | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/office/.config/neomutt/maps b/office/.config/neomutt/maps index 6874cd3..da5854d 100644 --- a/office/.config/neomutt/maps +++ b/office/.config/neomutt/maps @@ -30,6 +30,10 @@ bind pager,index za collapse-thread bind pager,index zA collapse-all bind pager,index zr reconstruct-thread bind pager,index zR entire-thread +# Saner copy/move dialogs +macro index,pager C "?" "copy a message to a mailbox" +macro index,pager M "?" "move a message to a mailbox" +macro index,pager gM "?" "move thread to a mailbox" # Email completion bindings bind editor complete-query @@ -78,9 +82,6 @@ macro index,pager \CU "|urlview" "call urlview to open links" macro index O "export MBSYNC_PRE=true; sync-mail" "refresh all e-mail" macro index o "export MBSYNC_PRE=true; sync-mail gmail-inbox" "refresh inbox e-mail" -# Saner copy/move dialogs -macro index C "?" "copy a message to a mailbox" -macro index M "?" "move a message to a mailbox" # Send mail to taskwarrior macro index,pager T "mutt2task -c -d -t" "add mail as task to taskwarrior with custom description and tags" From bd1182a873809fd3a3a2c3d9926d8129da50d911 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:50:09 +0100 Subject: [PATCH 11/29] qutebrowser: Add pypi search,Remove google translate --- qutebrowser/.config/qutebrowser/url.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/.config/qutebrowser/url.py b/qutebrowser/.config/qutebrowser/url.py index 3048daf..852501a 100644 --- a/qutebrowser/.config/qutebrowser/url.py +++ b/qutebrowser/.config/qutebrowser/url.py @@ -13,7 +13,6 @@ c.url.searchengines = { "g": "https://www.google.com/search?q={}", "gh": "https://github.com/search?q={}", "gol": "https://golang.org/pkg/{}/", - "gt": "https://translate.google.com/#auto/de/{}", "hn": "https://hn.algolia.com/?q={}", "kb": "https://soeg.kb.dk/discovery/search?query=any,contains,{}&lang=en", "l": "https://links.martyoeh.me/?searchterm={}&searchtags=", @@ -21,6 +20,7 @@ c.url.searchengines = { "man": "https://manned.org/browse/search?q={}", "maps": "https://www.qwant.com/maps/?q={}", "pcw": "https://www.pcgamingwiki.com/w/index.php?search={}", + "py": "https://pypi.org/search/?q={}", "r": "https://www.reddit.com/r/{}", "t": "https://www.thesaurus.com/browse/{}", "w": "https://en.wikipedia.org/w/index.php?search={}", From cb0605971df92d9909473f1523e9ae7d688d614a Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:50:34 +0100 Subject: [PATCH 12/29] scripts: Add wallcrop.sh Added hacky script to quickly cut apart dual-screen wallpapers. I run two 1920x1080 screens side-by-side, so I just cut double wide wallpapers in two and display one on each screen. Script is very inflexible on probably not too useful for the future but it works for its purposes now. --- scripts/.local/bin/wallcrop.sh | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 scripts/.local/bin/wallcrop.sh diff --git a/scripts/.local/bin/wallcrop.sh b/scripts/.local/bin/wallcrop.sh new file mode 100755 index 0000000..9155dd8 --- /dev/null +++ b/scripts/.local/bin/wallcrop.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# A simple script to make it easy for me to crop newly found wallpapers +# to size, for one 1920x1080 screen on the left and one on the right. +# The resulting images can be used with wallpaper programs (e.g. swww) +# to nicely display per monitor without stretching. +# +# Usage: wallcrop.sh path/to/my/imagefile.jpg +# It will drop two cut versions in the same directory and tell you where +# they are. + +# TODO check image dimensions and warn user if not 3840x1080, or at least if smaller than cropped area + +main() { + fullname="$1" + filename=$(basename -- "$fullname") + pathonly=${fullname/$filename/} + extension="${filename##*.}" + filename="${filename%.*}" + + out_left="${pathonly}${filename}_l.$extension" + out_right="${pathonly}${filename}_r.$extension" + + printf "input: %s\noutput left:%s\noutput right: %s\n" "$fullname" "$out_left" "$out_right" + gm convert "$fullname" -crop 1920x1080+0+0 "$out_left" + gm convert "$fullname" -crop 1920x1080+1920+0 "$out_right" +} + +usage="$(basename "$0") [-h] path/to/my/imagefile.jpg -- Simple image cropper for dual screen 1920x1080 setups. + +A simple script to make it easy for me to crop newly found wallpapers +to size, for one 1920x1080 screen on the left and one on the right. +The resulting images can be used with wallpaper programs (e.g. swww) +to nicely display per monitor without stretching. + + -h show this help text + +It will drop two cut versions in the same directory and tell you where +they are." + +while getopts ':h' option; do + case "$option" in + h) + echo "$usage" + exit + ;; + :) + printf "missing argument for -%s\n" "$OPTARG" >&2 + echo "$usage" >&2 + exit 1 + ;; + \?) + printf "illegal option: -%s\n" "$OPTARG" >&2 + echo "$usage" >&2 + exit 1 + ;; + esac +done +shift $((OPTIND - 1)) + +if [ "$#" -ne 1 ]; then + echo "$usage" >&2 + exit 1 +fi +main "$1" From 969c8367905c87cdafdf121a1706286d3914937c Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:52:14 +0100 Subject: [PATCH 13/29] services: Remove deprecated X services --- services/.config/systemd/user/activitywatch.service | 12 ------------ .../user/default.target.wants/activitywatch.service | 1 - .../systemd/user/default.target.wants/dunst.service | 1 - .../user/default.target.wants/geoclue-agent.service | 1 - .../user/default.target.wants/redshift.service | 1 - .../default.target.wants/uni-notes-sync.service | 1 - services/.config/systemd/user/geoclue-agent.service | 8 -------- .../systemd/user/redshift.service.d/override.conf | 3 --- .../.config/systemd/user/uni-notes-sync.service | 13 ------------- 9 files changed, 41 deletions(-) delete mode 100644 services/.config/systemd/user/activitywatch.service delete mode 120000 services/.config/systemd/user/default.target.wants/activitywatch.service delete mode 120000 services/.config/systemd/user/default.target.wants/dunst.service delete mode 120000 services/.config/systemd/user/default.target.wants/geoclue-agent.service delete mode 120000 services/.config/systemd/user/default.target.wants/redshift.service delete mode 120000 services/.config/systemd/user/default.target.wants/uni-notes-sync.service delete mode 100644 services/.config/systemd/user/geoclue-agent.service delete mode 100644 services/.config/systemd/user/redshift.service.d/override.conf delete mode 100644 services/.config/systemd/user/uni-notes-sync.service diff --git a/services/.config/systemd/user/activitywatch.service b/services/.config/systemd/user/activitywatch.service deleted file mode 100644 index 7c73d88..0000000 --- a/services/.config/systemd/user/activitywatch.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Record pc window usage -PartOf=graphical-session.target -Requires=x-started-confirm.service -After=x-started-confirm.service - -[Service] -ExecStart=/usr/bin/aw-qt -Restart=on-failure - -[Install] -WantedBy=default.target diff --git a/services/.config/systemd/user/default.target.wants/activitywatch.service b/services/.config/systemd/user/default.target.wants/activitywatch.service deleted file mode 120000 index 29b339e..0000000 --- a/services/.config/systemd/user/default.target.wants/activitywatch.service +++ /dev/null @@ -1 +0,0 @@ -../activitywatch.service \ No newline at end of file diff --git a/services/.config/systemd/user/default.target.wants/dunst.service b/services/.config/systemd/user/default.target.wants/dunst.service deleted file mode 120000 index b24d3b1..0000000 --- a/services/.config/systemd/user/default.target.wants/dunst.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/user/dunst.service \ No newline at end of file diff --git a/services/.config/systemd/user/default.target.wants/geoclue-agent.service b/services/.config/systemd/user/default.target.wants/geoclue-agent.service deleted file mode 120000 index 9a62bd1..0000000 --- a/services/.config/systemd/user/default.target.wants/geoclue-agent.service +++ /dev/null @@ -1 +0,0 @@ -../geoclue-agent.service \ No newline at end of file diff --git a/services/.config/systemd/user/default.target.wants/redshift.service b/services/.config/systemd/user/default.target.wants/redshift.service deleted file mode 120000 index a9cf4c7..0000000 --- a/services/.config/systemd/user/default.target.wants/redshift.service +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/systemd/user/redshift.service \ No newline at end of file diff --git a/services/.config/systemd/user/default.target.wants/uni-notes-sync.service b/services/.config/systemd/user/default.target.wants/uni-notes-sync.service deleted file mode 120000 index 4cda226..0000000 --- a/services/.config/systemd/user/default.target.wants/uni-notes-sync.service +++ /dev/null @@ -1 +0,0 @@ -../uni-notes-sync.service \ No newline at end of file diff --git a/services/.config/systemd/user/geoclue-agent.service b/services/.config/systemd/user/geoclue-agent.service deleted file mode 100644 index 9f2adc0..0000000 --- a/services/.config/systemd/user/geoclue-agent.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=redshift needs to get a (geo)clue - -[Service] -ExecStart=/usr/lib/geoclue-2.0/demos/agent - -[Install] -WantedBy=default.target diff --git a/services/.config/systemd/user/redshift.service.d/override.conf b/services/.config/systemd/user/redshift.service.d/override.conf deleted file mode 100644 index 673779e..0000000 --- a/services/.config/systemd/user/redshift.service.d/override.conf +++ /dev/null @@ -1,3 +0,0 @@ -[Unit] -Requires=x-started-confirm.service -After=x-started-confirm.service diff --git a/services/.config/systemd/user/uni-notes-sync.service b/services/.config/systemd/user/uni-notes-sync.service deleted file mode 100644 index 88e00ca..0000000 --- a/services/.config/systemd/user/uni-notes-sync.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Automatically commit notes in university directory -After=display-manager.service - -[Service] -Type=simple -Environment=GS_TIME_TO_COMMIT=120 GS_UNCHANGED_RUNS_TO_PUSH=30 -# workaround to allow relative executable invocation (i.e. current users' home dir) -ExecStart=/bin/bash -c '%h/.local/share/services/git-sync %h/documents/notes/uni' -Restart=on-failure - -[Install] -WantedBy=default.target From b6e6ddcf06bac67f373ab999779b8b7a995f428f Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:52:48 +0100 Subject: [PATCH 14/29] social: Add minimal newsboat rss config --- social/.config/newsboat/config | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 social/.config/newsboat/config diff --git a/social/.config/newsboat/config b/social/.config/newsboat/config new file mode 100644 index 0000000..a6ba69e --- /dev/null +++ b/social/.config/newsboat/config @@ -0,0 +1,3 @@ +urls-source "miniflux" +miniflux-url "https://rss.martyoeh.me/" +miniflux-tokeneval "pass show personal/rss.martyoeh.me/Marty | grep newsboat | cut -f2 -d:" From 46a349cba1daea6815306df285e294ebfc6e0887 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:53:03 +0100 Subject: [PATCH 15/29] social: Add simple tut configuration I am mostly using the TUI Mastodon client tut for any social interaction, so here I keep its configuration. Nothing big changed yet, I mostly like the default options, with the exception of some layout changes. --- social/.config/tut/config.ini | 806 ++++++++++++++++++++++++++++++++++ 1 file changed, 806 insertions(+) create mode 100644 social/.config/tut/config.ini diff --git a/social/.config/tut/config.ini b/social/.config/tut/config.ini new file mode 100644 index 0000000..c6b7031 --- /dev/null +++ b/social/.config/tut/config.ini @@ -0,0 +1,806 @@ +# Configuration file for tut + +[general] +# Shows a confirmation view before actions such as favorite, delete toot, boost +# etc. +# default=true +confirmation=true + +# Enable support for using the mouse in tut to select items. +# default=false +mouse-support=true + +# Timelines adds windows of feeds. You can customize the number of feeds, what +# they should show and the key to activate them. +# +# Available timelines: home, direct, local, federated, bookmarks, saved, +# favorited, notifications, lists, tag +# +# Tag is special as you need to add the tag after, see the example below. +# +# The syntax is: +# timelines=feed,[name],[keys...],[showBoosts],[showReplies] +# +# Tha values in brackets are optional. You can see the syntax for keys under the +# [input] section. +# +# showBoosts and showReplies must be formated as bools. So either true or false. +# They always defaults to true. +# +# Some examples: +# +# home timeline with the name Home +# timelines=home,Home +# +# local timeline with the name Local and it gets focus when you press 2. It will +# also hide boosts in the timeline, but show toots that are replies. +# timelines=local,Local,'2',false,true +# +# notification timeline with the name [N]otifications and it gets focus when you +# press n or N +# timelines=notifications,[N]otifications,'n','N' +# +# tag timeline for #linux with the name Linux and it gets focus when you press +# timelines=tag linux,Linux,"F2" +# +# +# If you don't set any timelines it will default to this: +# timelines=home +# timelines=notifications,[N]otifications,'n','N' +# +timelines=home,Home,'1' +timelines=notifications,[N]otifications,'n','N' +timelines=local,Local,'2',false,true + + +# The date format to be used. See https://godoc.org/time#Time.Format +# default=2006-01-02 15:04 +date-format=2006-01-02 15:04 + +# Format for dates the same day. See date-format for more info. +# default=15:04 +date-today-format=15:04 + +# This displays relative dates instead for statuses that are one day or older +# the output is 1y2m1d (1 year 2 months and 1 day) +# +# The value is an integear +# -1 = don't use relative dates +# 0 = always use relative dates, except for dates < 1 day +# 1 - ∞ = number of days to use relative dates +# +# Example: date-relative=28 will display a relative date for toots that are +# between 1-28 days old. Otherwhise it will use the short or long format. +# default=-1 +date-relative=-1 + +# The max width of text before it wraps when displaying toots. +# 0 = no restriction. +# default=0 +max-width=0 + +# Where do you want the list of toots to be placed? +# Valid values: left, right, top, bottom. +# default=left +list-placement=bottom + +# If you have notification-feed set to true you can display it under the main +# list of toots (row) or place it to the right of the main list of toots +# (column). +# default=row +list-split=column + +# You can change the proportions of the list view in relation to the content +# view list-proportion=1 and content-proportoin=3 will result in the content +# taking up 3 times more space. +# Must be n > 0 +# default=1 +list-proportion=1 + +# See list-proportion +# default=2 +content-proportion=2 + +# Hide notifications of this type. If you have multiple you separate them with a +# comma. Valid types: mention, status, boost, follow, follow_request, favorite, +# poll, edit. +# default= +notifications-to-hide= + +# If you always want to quote original message when replying. +# default=false +quote-reply=false + +# If you're on an instance with a custom character limit you can set it here. +# default=500 +char-limit=500 + +# If you want to show icons in the list of toots. +# default=true +show-icons=true + +# If you've learnt all the shortcut keys you can remove the help text and only +# show the key in tui. So it gets less cluttered. +# default=false +short-hints=false + +# If you want to display the filter that filtered a toot. +# default=true +show-filter-phrase=true + +# If you want to show a message in the cmdbar on how to access the help text. +# default=true +show-help=true + +# If you always want tut to jump to the newest post. May ruin your reading +# experience. +# default=false +stick-to-top=false + +# 0 = No terminal title +# 1 = Show title in terminal and top bar +# 2 = Only show terminal title, and no top bar in tut. +# default=0 +terminal-title=0 + +# If you don't want the whole UI to update, and only the text content you can +# set this option to true. This will lead to some artifacts being left on the +# screen when emojis are present. But it will keep the UI from flashing on every +# single toot in some terminals. +# default=true +redraw-ui=true + +# The leader is used as a shortcut to run commands as you can do in Vim. By +# default this is disabled and you enable it by setting a leader-key. It can +# only consist of one char and I like to use comma as leader key. So to set it +# you write leader-key=, +# default= +leader-key= + +# Number of milliseconds before the leader command resets. So if you tap the +# leader-key by mistake or are to slow it empties all the input after X +# milliseconds. +# default=1000 +leader-timeout=1000 + +# You set actions for the leader-key with one or more leader-action. It consists +# of two parts first the action then the shortcut. And they're separated by a +# comma. +# +# Available commands: home, direct, local, federated, clear-notifications, +# compose, edit, history, blocking, bookmarks, saved, favorited, boosts, +# favorites, following, followers, muting, newer, preferences, profile, +# notifications, lists, stick-to-top, tag, tags, window, list-placement, +# list-split, proportions +# +# The shortcuts are up to you, but keep them quite short and make sure they +# don't collide. If you have one shortcut that is "f" and an other one that is +# "fav", the one with "f" will always run and "fav" will never run. +# +# Some special leaders: +# tag is special as you need to add the tag after, e.g. tag linux +# window is special as it's a shortcut for switching between the timelines +# you've set under general and they are zero indexed. window 0 = your first +# timeline, window 1 = your second and so on. +# list-placement as it takes the argument top, right, bottom or left +# list-split as it takes the argument column or row +# proportions takes the arguments [int] [int], where the first integer is the +# list and the other content, e.g. proportions 1 3. See list-proportion above +# for more information. +# +# Some examples: +# leader-action=local,lo +# leader-action=lists,li +# leader-action=federated,fed +# leader-action=direct,d +# leader-action=history,h +# leader-action=tag linux,tl +# leader-action=window 0,h +# leader-action=list-placement bottom,b +# leader-action=list-split column,c +# leader-action=proportions 1 3,3 +# + + +[media] +# Your image viewer. +# default=xdg-open +image-viewer=imv + +# Open the image viewer in the same terminal as toot. Only for terminal based +# viewers. +# default=false +image-terminal=false + +# If images should open one by one e.g. "imv image.png" multiple times. If set +# to false all images will open at the same time like this "imv image1.png +# image2.png image3.png". Not all image viewers support this, so try it first. +# default=true +image-single=true + +# If you want to open the images in reverse order. In some image viewers this +# will display the images in the "right" order. +# default=false +image-reverse=false + +# Your video viewer. +# default=xdg-open +video-viewer=umpv + +# Open the video viewer in the same terminal as toot. Only for terminal based +# viewers. +# default=false +video-terminal=false + +# If videos should open one by one. See image-single. +# default=true +video-single=true + +# If you want your videos in reverse order. In some video apps this will play +# the files in the "right" order. +# default=false +video-reverse=false + +# Your audio viewer. +# default=xdg-open +audio-viewer=xdg-open + +# Open the audio viewer in the same terminal as toot. Only for terminal based +# viewers. +# default=false +audio-terminal=false + +# If audio should open one by one. See image-single. +# default=true +audio-single=true + +# If you want to play the audio files in reverse order. In some audio apps this +# will play the files in the "right" order. +# default=false +audio-reverse=false + +# Your web browser. +# default=xdg-open +link-viewer=xdg-open + +# Open the browser in the same terminal as toot. Only for terminal based +# browsers. +# default=false +link-terminal=false + +[open-custom] +# This sections allows you to set up to five custom programs to open URLs with. +# If the url points to an image, you can set c1-name to img and c1-use to imv. +# If the program runs in a terminal and you want to run it in the same terminal +# as tut. Set cX-terminal to true. The name will show up in the UI, so keep it +# short so all five fits. +# +# c1-name=name +# c1-use=program +# c1-terminal=false +# +# c2-name=name +# c2-use=program +# c2-terminal=false +# +# c3-name=name +# c3-use=program +# c3-terminal=false +# +# c4-name=name +# c4-use=program +# c4-terminal=false +# +# c5-name=name +# c5-use=program +# c5-terminal=false + +[open-pattern] +# Here you can set your own glob patterns for opening matching URLs in the +# program you want them to open up in. You could for example open Youtube videos +# in your video player instead of your default browser. +# +# You must name the keys foo-pattern, foo-use and foo-terminal, where use is the +# program that will open up the URL. To see the syntax for glob pattern you can +# follow this URL https://github.com/gobwas/glob#syntax. foo-terminal is if the +# program runs in the terminal and should open in the same terminal as tut +# itself. +# +# Example for youtube.com and youtu.be to open up in mpv instead of the browser. +# +y1-pattern=*youtube.com/watch* +y1-use=umpv +y1-terminal=false +# +y2-pattern=*youtu.be/* +y2-use=umpv +y2-terminal=false + +[desktop-notification] +# Notification when someone follows you. +# default=false +followers=false + +# Notification when someone favorites one of your toots. +# default=false +favorite=false + +# Notification when someone mentions you. +# default=false +mention=false + +# Notification when someone edits their toot. +# default=false +update=false + +# Notification when someone boosts one of your toots. +# default=false +boost=false + +# Notification of poll results. +# default=false +poll=false + +# Notification when there is new posts in current timeline. +# default=false +posts=false + +[style] +# All styles can be represented in their HEX value like #ffffff or with their +# name, so in this case white. The only special value is "default" which equals +# to transparent, so it will be the same color as your terminal. +# +# You can also use xrdb colors like this xrdb:color1 The program will use colors +# prefixed with an * first then look for URxvt or XTerm if it can't find any +# color prefixed with an asterisk. If you don't want tut to guess the prefix you +# can set the prefix yourself. If the xrdb color can't be found a preset color +# will be used. You'll have to set theme=none for this to work. + +# The xrdb prefix used for colors in .Xresources. +# default=guess +xrdb-prefix=guess + +# You can use some themes that comes bundled with tut. Check out the themes +# available on the URL below. If a theme is named "nord.ini" you just write +# theme=nord +# +# https://github.com/RasmusLindroth/tut/tree/master/config/themes +# +# You can also create a theme file in your config directory e.g. +# ~/.config/tut/themes/foo.ini and then set theme=foo. +# +# If you want to use your own theme but don't want to create a new file, set +# theme=none and then you can create your own theme below. +# default=default +theme=default + +# The background color used on most elements. +# default= +background= + +# The text color used on most of the text. +# default= +text= + +# The color to display subtle elements or subtle text. Like lines and help text. +# default= +subtle= + +# The color for errors or warnings +# default= +warning-text= + +# This color is used to display username. +# default= +text-special-one= + +# This color is used to display username and key hints. +# default= +text-special-two= + +# The color of the bar at the top +# default= +top-bar-background= + +# The color of the text in the bar at the top. +# default= +top-bar-text= + +# The color of the bar at the bottom +# default= +status-bar-background= + +# The color of the text in the bar at the bottom. +# default= +status-bar-text= + +# The color of the bar at the bottom in view mode. +# default= +status-bar-view-background= + +# The color of the text in the bar at the bottom in view mode. +# default= +status-bar-view-text= + +# The color of the text in the command bar at the bottom. +# default= +command-text= + +# Background of selected list items. +# default= +list-selected-background= + +# The text color of selected list items. +# default= +list-selected-text= + +# The background color of selected list items that are out of focus. +# default= +list-selected-inactive-background= + +# The text color of selected list items that are out of focus. +# default= +list-selected-inactive-text= + +# The main color of the text for key hints +# default= +controls-text= + +# The highlight color of for key hints +# default= +controls-highlight= + +# The background color in dropdowns and autocompletions +# default= +autocomplete-background= + +# The text color in dropdowns at autocompletions +# default= +autocomplete-text= + +# The background color for selected value in dropdowns and autocompletions +# default= +autocomplete-selected-background= + +# The text color for selected value in dropdowns and autocompletions +# default= +autocomplete-selected-text= + +# The background color on selected button and the text color of unselected +# buttons +# default= +button-color-one= + +# The text color on selected button and the background color of unselected +# buttons +# default= +button-color-two= + +# The background on named timelines. +# default= +timeline-name-background= + +# The text color on named timelines +# default= +timeline-name-text= + +[input] +# You can edit the keys for tut below. +# +# The syntax is a bit weird, but it works. And I'll try to explain it as well as +# I can. +# +# Example: +# status-favorite="[F]avorite","Un[F]avorite",'f','F' +# status-delete="[D]elete",'d','D' +# +# status-favorite and status-delete differs because favorite can be in two +# states, so you will have to add two key hints. +# Most keys will only have on key hint. Look at the default value for reference. +# +# Key hints must be in some of the following formats. Remember the quotation +# marks. +# "" = empty +# "[D]elete" = Delete with a highlighted D +# "Un[F]ollow" = UnFollow with a highlighted F +# "[Enter]" = Enter where everything is highlighted +# "Yan[K]" = YanK with a highlighted K +# +# After the hint (or hints) you must set the keys. You can do this in two ways, +# with single quotation marks or double ones. +# +# The single ones are for single chars like 'a', 'b', 'c' and double marks are +# for special keys like "Enter". Remember that they are case sensitive. +# +# To find the names of special keys you have to go to the following site and +# look for "var KeyNames = map[Key]string{" +# +# https://github.com/gdamore/tcell/blob/master/key.go + +# Keys for moving down +# default="",'j','J',"Down" +global-down="",'j','J',"Down" + +# Keys for moving up +# default="",'k','K',"Up" +global-up="",'k','K',"Up" + +# To select items +# default="","Enter" +global-enter="","Enter" + +# To go back +# default="[Esc]","Esc" +global-back="[Esc]","Esc" + +# To go back and exit Tut +# default="[Q]uit",'q','Q' +global-exit="[Q]uit",'q','Q' + +# Move to the top +# default="",'g',"Home" +main-home="",'g',"Home" + +# Move to the bottom +# default="",'G',"End" +main-end="",'G',"End" + +# Go to previous feed +# default="",'h','H',"Left" +main-prev-feed="",'h','H',"Left" + +# Go to next feed +# default="",'l','L',"Right" +main-next-feed="",'l','L',"Right" + +# Focus on the previous feed window +# default="","Backtab" +main-prev-window="","Backtab" + +# Focus on the next feed window +# default="","Tab" +main-next-window="","Tab" + +# Focus on the notification list +# default="[N]otifications",'n','N' +main-notification-focus="[N]otifications",'n','N' + +# Compose a new toot +# default="",'c','C' +main-compose="",'c','C' + +# Open avatar +# default="[A]vatar",'a','A' +status-avatar="[A]vatar",'a','A' + +# Boost a toot +# default="[B]oost","Un[B]oost",'b','B' +status-boost="[B]oost","Un[B]oost",'b','B' + +# Edit a toot +# default="[E]dit",'e','E' +status-edit="[E]dit",'e','E' + +# Delete a toot +# default="[D]elete",'d','D' +status-delete="[D]elete",'d','D' + +# Favorite a toot +# default="[F]avorite","Un[F]avorite",'f','F' +status-favorite="[F]avorite","Un[F]avorite",'f','F' + +# Open toots media files +# default="[M]edia",'m','M' +status-media="[M]edia",'m','M' + +# Open links +# default="[O]pen",'o','O' +status-links="[O]pen",'o','O' + +# Open poll +# default="[P]oll",'p','P' +status-poll="[P]oll",'p','P' + +# Reply to toot +# default="[R]eply",'r','R' +status-reply="[R]eply",'r','R' + +# Save/bookmark a toot +# default="[S]ave","Un[S]ave",'s','S' +status-bookmark="[S]ave","Un[S]ave",'s','S' + +# View thread +# default="[T]hread",'t','T' +status-thread="[T]hread",'t','T' + +# Open user profile +# default="[U]ser",'u','U' +status-user="[U]ser",'u','U' + +# Open the view mode +# default="[V]iew",'v','V' +status-view-focus="[V]iew",'v','V' + +# Yank the url of the toot +# default="[Y]ank",'y','Y' +status-yank="[Y]ank",'y','Y' + +# Remove the spoiler +# default="Press [Z] to toggle spoiler",'z','Z' +status-toggle-spoiler="Press [Z] to toggle spoiler",'z','Z' + +# View avatar +# default="[A]vatar",'a','A' +user-avatar="[A]vatar",'a','A' + +# Block the user +# default="[B]lock","Un[B]lock",'b','B' +user-block="[B]lock","Un[B]lock",'b','B' + +# Follow user +# default="[F]ollow","Un[F]ollow",'f','F' +user-follow="[F]ollow","Un[F]ollow",'f','F' + +# Follow user +# default="Follow [R]equest","Follow [R]equest",'r','R' +user-follow-request-decide="Follow [R]equest","Follow [R]equest",'r','R' + +# Mute user +# default="[M]ute","Un[M]ute",'m','M' +user-mute="[M]ute","Un[M]ute",'m','M' + +# Open links +# default="[O]pen",'o','O' +user-links="[O]pen",'o','O' + +# View user profile +# default="[U]ser",'u','U' +user-user="[U]ser",'u','U' + +# Open view mode +# default="[V]iew",'v','V' +user-view-focus="[V]iew",'v','V' + +# Yank the user URL +# default="[Y]ank",'y','Y' +user-yank="[Y]ank",'y','Y' + +# Open list +# default="[O]pen",'o','O' +list-open-feed="[O]pen",'o','O' + +# List all users in a list +# default="[U]sers",'u','U' +list-user-list="[U]sers",'u','U' + +# Add user to list +# default="[A]dd",'a','A' +list-user-add="[A]dd",'a','A' + +# Delete user from list +# default="[D]elete",'d','D' +list-user-delete="[D]elete",'d','D' + +# Open URL +# default="[O]pen",'o','O' +link-open="[O]pen",'o','O' + +# Yank the URL +# default="[Y]ank",'y','Y' +link-yank="[Y]ank",'y','Y' + +# Open tag feed +# default="[O]pen",'o','O' +tag-open-feed="[O]pen",'o','O' + +# Toggle follow on tag +# default="[F]ollow","Un[F]ollow",'f','F' +tag-follow="[F]ollow","Un[F]ollow",'f','F' + +# Edit spoiler text on new toot +# default="[C]W text",'c','C' +compose-edit-spoiler="[C]W text",'c','C' + +# Edit the text on new toot +# default="[E]dit text",'e','E' +compose-edit-text="[E]dit text",'e','E' + +# Include a quote when replying +# default="[I]nclude quote",'i','I' +compose-include-quote="[I]nclude quote",'i','I' + +# Focus on adding media to toot +# default="[M]edia",'m','M' +compose-media-focus="[M]edia",'m','M' + +# Post the new toot +# default="[P]ost",'p','P' +compose-post="[P]ost",'p','P' + +# Toggle content warning on toot +# default="[T]oggle CW",'t','T' +compose-toggle-content-warning="[T]oggle CW",'t','T' + +# Edit the visibility on new toot +# default="[V]isibility",'v','V' +compose-visibility="[V]isibility",'v','V' + +# Edit the language of a toot +# default="[L]ang",'l','L' +compose-language="[L]ang",'l','L' + +# Switch to creating a poll +# default="P[O]ll",'o','O' +compose-poll="P[O]ll",'o','O' + +# Delete media file +# default="[D]elete",'d','D' +media-delete="[D]elete",'d','D' + +# Edit the description on media file +# default="[E]dit desc",'e','E' +media-edit-desc="[E]dit desc",'e','E' + +# Add a new media file +# default="[A]dd",'a','A' +media-add="[A]dd",'a','A' + +# Vote on poll +# default="[V]ote",'v','V' +vote-vote="[V]ote",'v','V' + +# Select item to vote on +# default="[Enter] to select",' ', "Enter" +vote-select="[Enter] to select",' ', "Enter" + +# Add a new poll option +# default="[A]dd",'a','A' +poll-add="[A]dd",'a','A' + +# Edit a poll option +# default="[E]dit",'e','E' +poll-edit="[E]dit",'e','E' + +# Delete a poll option +# default="[D]elete",'d','D' +poll-delete="[D]elete",'d','D' + +# Toggle voting on multiple options +# default="Toggle [M]ultiple",'m','M' +poll-multi-toggle="Toggle [M]ultiple",'m','M' + +# Change the expiration of poll +# default="E[X]pires",'x','X' +poll-expiration="E[X]pires",'x','X' + +# Change display name +# default="[N]ame",'n','N' +preference-name="[N]ame",'n','N' + +# Change default visibility of toots +# default="[V]isibility",'v','V' +preference-visibility="[V]isibility",'v','V' + +# Change bio in profile +# default="[B]io",'b','B' +preference-bio="[B]io",'b','B' + +# Save your preferences +# default="[S]ave",'s','S' +preference-save="[S]ave",'s','S' + +# Edit profile fields +# default="[F]ields",'f','F' +preference-fields="[F]ields",'f','F' + +# Add new field +# default="[A]dd",'a','A' +preference-fields-add="[A]dd",'a','A' + +# Edit current field +# default="[E]dit",'e','E' +preference-fields-edit="[E]dit",'e','E' + +# Delete current field +# default="[D]elete",'d','D' +preference-fields-delete="[D]elete",'d','D' From 3ece309f67f217707ff4c9e6a3cdaa692169dc9f Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:54:32 +0100 Subject: [PATCH 16/29] sh: Add imv to iv image alias --- sh/.config/sh/alias | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sh/.config/sh/alias b/sh/.config/sh/alias index 54e9ea5..c5b4ed7 100644 --- a/sh/.config/sh/alias +++ b/sh/.config/sh/alias @@ -94,8 +94,18 @@ if exist vifm; then alias vmm='vifm ${PWD}' fi -# nsxiv image viewer -if exist nsxiv; then +# default image viewer +if exist imv-folder; then + iv() { + if [ "$#" -eq 1 ] && [ -f "$1" ]; then + imv-folder "$1" + else + imv "$@" + fi + } +elif exist imv; then + alias iv=imv +elif exist nsxiv; then if exist nsxiv-rifle; then alias iv=nsxiv-rifle else From 5d2ed8174c8acba91cb37550523bf745b300ed76 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:54:55 +0100 Subject: [PATCH 17/29] sh: Add hidden file inclusive ls tree view --- sh/.config/sh/alias | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sh/.config/sh/alias b/sh/.config/sh/alias index c5b4ed7..0aaa856 100644 --- a/sh/.config/sh/alias +++ b/sh/.config/sh/alias @@ -31,6 +31,8 @@ if exist exa; then # - usually want to change levels recursed with -L2 -L3 or similar alias ll="exa --tree -L2 --group-directories-first" alias LL="exa -a --tree -L2 --group-directories-first" + alias lla="exa --tree --group-directories-first" + alias LLA="exa -a --tree --group-directories-first" else alias l="ls -lhF" alias L="ls -lAhF" From 4f75888dfe5703edf3ff36367270947552083ed3 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:56:04 +0100 Subject: [PATCH 18/29] sh: Remove docker xdg configuration Podman rebels if it finds an explicitly set DOCKER_CONFIG file pointing to a non-existent (due to using podman) configuration file. Since we are not using docker anyway, this removes the env var. --- sh/.config/sh/xdg | 1 - 1 file changed, 1 deletion(-) diff --git a/sh/.config/sh/xdg b/sh/.config/sh/xdg index 4d645e1..72f42ea 100644 --- a/sh/.config/sh/xdg +++ b/sh/.config/sh/xdg @@ -70,7 +70,6 @@ unset -f xdg_isThere xdg_makeForUser export ANDROID_HOME="$XDG_DATA_HOME/android" export ATOM_HOME="$XDG_DATA_HOME/atom" export CARGO_HOME="$XDG_DATA_HOME/cargo" -export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker" export GEM_HOME="$XDG_DATA_HOME/gem" export GEM_SPEC_CACHE="$XDG_CACHE_HOME/gem" export GNUPGHOME="$XDG_DATA_HOME/gnupg" From 0bc4a41e03a16bdcc06fece9f2d324d414bd0c33 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:57:12 +0100 Subject: [PATCH 19/29] vifm: Add imv as image viewer --- vifm/.config/vifm/vifmrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vifm/.config/vifm/vifmrc b/vifm/.config/vifm/vifmrc index f1938f2..f5dfb6f 100644 --- a/vifm/.config/vifm/vifmrc +++ b/vifm/.config/vifm/vifmrc @@ -442,6 +442,8 @@ filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm \ timg --title --center --clear %f; read -k 1 -s -r, \ {View in nsxiv directory viewer} \ vifm-thumbnailer %c, + \ {View in imv} + \ imv %f, \ {View in nsxiv} \ nsxiv %f, \ {View in vimiv} From 824e76c6547f8eff52632d3c97bc848c78267eba Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:57:24 +0100 Subject: [PATCH 20/29] vifm: Add zip creation shortcut xz --- vifm/.config/vifm/vifmrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vifm/.config/vifm/vifmrc b/vifm/.config/vifm/vifmrc index f5dfb6f..821d4db 100644 --- a/vifm/.config/vifm/vifmrc +++ b/vifm/.config/vifm/vifmrc @@ -279,6 +279,8 @@ nnoremap xx :!atool -x %f nnoremap xc :!atool -a %c:r.tar.gz %f " archive currently selected file(s) nnoremap xa :!atool -a %c:r.tar %f +" archive currently selected file(s) +nnoremap xz :!atool -a %c:r.zip %f " combine selected PDFs into single one (named output.pdf) noremap gc :!pdftk %f cat output output.pdf From 40245120f503b87a701936a864a5bfcd7e9cc1f6 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:58:26 +0100 Subject: [PATCH 21/29] river: Hide cursor when typing Makes use of new river functionality to automatically hide the cursor whenever you begin to type. --- wayland/.config/river/init | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index 04ee534..84d8b8c 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -10,6 +10,8 @@ time_to_suspend=1200 ## OPTIONS riverctl spawn "dbus-update-activation-environment SEATD_SOCK DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river" riverctl focus-follows-cursor normal +riverctl set-cursor-warp on-output-change +riverctl hide-cursor when-typing enabled riverctl attach-mode bottom # Set background and border color From c49d87722cf58893a12ddba0b73ce583cf27f881 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:59:11 +0100 Subject: [PATCH 22/29] river: Try to remove client side deco from zathura --- wayland/.config/river/init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index 84d8b8c..f079dda 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -26,7 +26,7 @@ riverctl float-filter-add app-id float # riverctl float-filter-add title "popup title with spaces" # # Set app-ids and titles of views which should use client side decorations # riverctl csd-filter-add app-id "gedit" -riverctl csd-filter-add app-id "zathura" +riverctl csd-filter-remove app-id "org.pwmt.zathura" ## DEBUG # Reload river configuration From c3279799d8709b38e57118f25a659fe77223becb Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 14:59:53 +0100 Subject: [PATCH 23/29] river: Fix wezterm floating term start --- wayland/.config/river/init | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index f079dda..c265a30 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -59,7 +59,7 @@ riverctl map normal $mod+Shift O spawn "qutedmenu" riverctl map normal $mod+Shift Space spawn "clipman pick --tool=bemenu" # Open floating calculator -riverctl map normal $mod+Shift R spawn "$term --class float -e qalc" +riverctl map normal $mod+Shift R spawn "$term start --class float -e qalc" # Open emoji picker riverctl map normal $mod+Shift E spawn "bemoji -nt" @@ -75,7 +75,7 @@ riverctl map normal $mod+Shift S spawn 'styler set $(styler list themes | bemenu riverctl map normal $mod+Shift P spawn "pass-pick" # File upload -riverctl map normal $mod+Shift U spawn "$term --class float -e sharefile | xargs notify-send" +riverctl map normal $mod+Shift U spawn "$term start --class float -e sharefile | xargs notify-send" # # Screenshot riverctl map normal None Print spawn "screenshot" From c193a90b404b8640f91b9e99945daac19d55f88b Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:00:35 +0100 Subject: [PATCH 24/29] river: Switch notification maps to use mako --- wayland/.config/river/init | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index c265a30..e15a994 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -83,10 +83,10 @@ riverctl map normal Shift Print spawn "screenshot | sharefile -" riverctl map normal $mod Print spawn "screenshot region" riverctl map normal $mod+Shift Print spawn "screenshot region | sharefile -" -# control dunst notification daemon -riverctl map normal $mod N spawn "dunstctl close" -riverctl map normal $mod+Shift N spawn "dunstctl close-all" -riverctl map normal $mod+Control N spawn "dunstctl history-pop" +# control notification daemon +riverctl map normal $mod N spawn "makoctl dismiss" +riverctl map normal $mod+Shift N spawn "makoctl dismiss --all" +riverctl map normal $mod+Control N spawn "makoctl restore" # MOVEMENT # focus the next/previous view in the layout stack From 951365bd92b82376f76f81e133262845316b8c93 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:01:12 +0100 Subject: [PATCH 25/29] river: Fix startup procedure process spawning --- wayland/.config/river/init | 48 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index e15a994..f3dc4fb 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -231,47 +231,53 @@ done setxkbmap -option "compose:menu" # set a nice wallpaper if exist wlopm && exist swww; then - exec swww init & + riverctl spawn "swww init" if [ -e "$HOME/pictures/wall.jpg" ]; then - swww img "$HOME/pictures/wall.jpg" & + swww img "$HOME/pictures/wall.jpg" fi if wlopm | grep -q DP-5 && wlopm | grep -q DP-3 && [ -e "$HOME/pictures/wall_l.jpg" ] && [ -e "$HOME/pictures/wall_r.jpg" ]; then - swww img -o DP-5 "$HOME/pictures/wall_l.jpg" & - swww img -o DP-3 "$HOME/pictures/wall_r.jpg" & + swww img -o DP-5 "$HOME/pictures/wall_l.jpg" + swww img -o DP-3 "$HOME/pictures/wall_r.jpg" fi fi -# killall mako -# mako & - # start status bar killall waybar -exec waybar & +riverctl spawn waybar # start dynamic display configuration killall kanshi -exec kanshi & +riverctl spawn kanshi + +# start redshift-like sundown warming using current location or standard values +killall wlsunset +loc=$(curl ipinfo.io | grep -e '"loc": ' | sed -e 's/^.*"loc": "\(.*\)",$/\1/') +if [ -n "$loc" ]; then + riverctl spawn "wlsunset -l \"$(echo "$loc" | cut -d, -f1)\" -L \"$(echo "$loc" | cut -d, -f2)\"" +else + riverctl spawn "wlsunset -S \"09:00\" -s \"21:00\" -d \"3600\"" +fi +unset loc # start screen idle locking/dimming/sleep tool killall swayidle -exec swayidle \ - timeout "${time_to_lockscreen}" 'pidof waylock || lockscreen' \ - timeout "${time_to_screendim}" 'wlopm --off "*"' \ - timeout "${time_to_suspend}" 'systemctl suspend-then-hibernate' \ - resume 'wlopm --on "*"' \ - after-resume 'wlopm --on "*"' \ - before-sleep 'pidof waylock || lockscreen' & +riverctl spawn "swayidle \ + timeout ${time_to_lockscreen} 'pidof waylock || lockscreen' \ + timeout ${time_to_screendim} 'wlopm --off \"*\"' \ + timeout ${time_to_suspend} 'systemctl suspend-then-hibernate' \ + resume 'wlopm --on \"*\"' \ + after-resume 'wlopm --on \"*\"' \ + before-sleep 'pidof waylock || lockscreen' &" killall clipman -exec wl-paste -t text --watch clipman store & +riverctl spawn "wl-paste -t text --watch clipman store" # bash ~/.config/bin/gtktheme # setting our gtk variables # killall polkit-gnome-authentication-agent-1 # /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & -# Set and exec into the default layout generator, rivercarro. -# River will send the process group of the init executable SIGTERM on exit. -riverctl default-layout rivercarro & # start layouting engine killall rivercarro -exec rivercarro -main-ratio 0.65 & +riverctl spawn "rivercarro -main-ratio 0.65" +# River will send the process group of the init executable SIGTERM on exit. +riverctl default-layout rivercarro # exec rivercarro -main-ratio 0.65 -view-padding 6 -outer-padding 6 & # -> does not work with current rivercarro version (0.1.4) brightnessctl set 70% From 56c9f66d72cc3cbf0cd391fb03d6af04a3689d45 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:03:14 +0100 Subject: [PATCH 26/29] river: Add experimental map to hide views mod-Shift-M to switch to an always-unused tag for all connected outputs to simply hide all application that can currently be seen. Would probably be more useful with an option to reverse but that probably requires a more extensive script to implement (perhaps using `lswt`?) so this will be good enough for now. I am not even entirely sure how much I will be using it. --- wayland/.config/river/init | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wayland/.config/river/init b/wayland/.config/river/init index f3dc4fb..6d2ed52 100755 --- a/wayland/.config/river/init +++ b/wayland/.config/river/init @@ -115,6 +115,10 @@ riverctl map normal $mod+Control L snap right # Mod+F to toggle fullscreen riverctl map normal $mod F toggle-fullscreen +# shellcheck disable=SC2016 +# Make all connected outputs show the desktop and no windows at all +riverctl map normal $mod+Shift M spawn 'for i in $(wlopm | wc -l); do riverctl set-focused-tags $((1 << 10)); riverctl focus-output next; done; riverctl set-focused-tags $((1 << 10)); riverctl focus-output next' + # toggle float riverctl map normal $mod+Shift v toggle-float # Mod + Left Mouse Button to move views From e224f7f20a9910377b8dc51bfc4a54d901e204fd Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:11:51 +0100 Subject: [PATCH 27/29] kanshi: Update profiles and notify on change --- wayland/.config/kanshi/config | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/wayland/.config/kanshi/config b/wayland/.config/kanshi/config index dc7010e..ece2f81 100644 --- a/wayland/.config/kanshi/config +++ b/wayland/.config/kanshi/config @@ -1,9 +1,18 @@ +profile docked { + output eDP-1 disable + output "LG Electronics W2442 0x000075FD" position 1920,0 + output "LG Electronics W2442 0x000075E1" position 0,0 + exec notify-send "💻 Display changed" "Applying docked profile" +} + profile docked { output eDP-1 disable output "Goldstar Company Ltd W2442 0x000075FD" position 1920,0 output "Goldstar Company Ltd W2442 0x000075E1" position 0,0 + exec notify-send "💻 Display changed" "Applying docked profile" } -profile single { +profile portable { output eDP-1 enable position 0,0 + exec notify-send "💻 Display changed" "Applying portable profile" } From f975e5885e28781c1ad63e7f0fff553f43cf4b88 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:12:44 +0100 Subject: [PATCH 28/29] wezterm: Add timeout to scrolling mode --- wezterm/.config/wezterm/maps.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wezterm/.config/wezterm/maps.lua b/wezterm/.config/wezterm/maps.lua index 53a274a..78c9e13 100644 --- a/wezterm/.config/wezterm/maps.lua +++ b/wezterm/.config/wezterm/maps.lua @@ -67,14 +67,15 @@ local keys = { action = act.ActivateKeyTable { name = 'scroll_mode', one_shot = false, - replace_current = true + replace_current = true, + timeout_milliseconds = 15000, } }, { key = 'e', mods = 'LEADER', action = act.EmitEvent 'edit-scrollback' }, { key = 'l', mods = 'LEADER', action = act.EmitEvent 'ActivatePaneDirection-Right' }, - { key = 'a', mods = 'CTRL|ALT', action = act.EmitEvent 'toggle-leader'} + { key = 'a', mods = 'CTRL|ALT', action = act.EmitEvent 'toggle-leader' } } -- Leader + number to activate that tab From e9659a2829ff58cfbac79d603d02f96a99fcd160 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jan 2023 15:27:17 +0100 Subject: [PATCH 29/29] bootstrap: Update package list --- bootstrap/packages.tsv | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/bootstrap/packages.tsv b/bootstrap/packages.tsv index e648a3b..bd92489 100644 --- a/bootstrap/packages.tsv +++ b/bootstrap/packages.tsv @@ -49,16 +49,16 @@ devour Window Manager agnostic swallowing feature for terminal emulators A dhcpcd RFC2131 compliant DHCP client daemon R diff-so-fancy Good-looking diffs with diff-highlight and more R distrobox Use any linux distribution inside your terminal. A +dnsmasq Lightweight, easy to configure DNS forwarder and DHCP server R +docker Pack, ship and run any application as a lightweight container R docker-compose Fast, isolated development environments using Docker R docx2txt Recovers text from DOCX files, with good formatting. R dos2unix Text file format converter R duf Disk Usage/Free Utility R -dunst Customizable and lightweight notification-daemon R dust A more intuitive version of du in rust R efm-langserver General purpose Language Server A enca Charset analyser and converter R entr Run arbitrary commands when files change R -evince Document viewer (PDF, PostScript, XPS, djvu, dvi, tiff, cbr, cbz, cb7, cbt) R exa ls replacement R exercism-bin Command line client for exercism.io A exfat-utils Utilities for exFAT file system R @@ -120,11 +120,11 @@ khard Console address book manager R kitty A modern, hackable, featureful, OpenGL-based terminal emulator R kubo IPFS implementation in Go R lazygit Simple terminal UI for git commands R +lib32-gamemode A daemon/lib combo that allows games to request a set of optimisations be temporarily applied to the host OS R libdvdcss Portable abstraction library for DVD decryption R libqalculate Multi-purpose desktop calculator R libreoffice-fresh LibreOffice branch which contains new features and program enhancements R libva-intel-driver VA-API implementation for Intel G45 and HD Graphics family R -licenses A set of common license files R libvirt API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc) R linux The Linux kernel and modules R linux-firmware Firmware files for Linux R @@ -142,7 +142,9 @@ lutris Open Gaming Platform R ly TUI display manager A lynx A text browser for the World Wide Web R maestral Open-source Dropbox client A +magic-wormhole Securely transfer data between computers R maim Utility to take a screenshot using imlib2 R +mako Lightweight notification daemon for Wayland R man-db A utility for reading man pages R man-pages Linux man pages R masterpdfeditor-free A complete solution for creation and editing PDF files - Free version without watermark A @@ -166,6 +168,7 @@ moreutils A growing collection of the unix tools that nobody thought to write th mosh Mobile shell, surviving disconnects with local echo and line editing R mpv-mpris MPRIS plugin for mpv R msmtp A mini smtp client R +mupdf-gl Lightweight PDF and XPS viewer with OpenGL backend R mutt-ics Show calendar event details in mutt A ncmpcpp Almost exact clone of ncmpc with some new features R needrestart Restart daemons after library updates. A @@ -182,6 +185,7 @@ nfs-utils Support programs for Network File Systems R nmap Utility for network discovery and security auditing R nodejs-markdownlint-cli MarkdownLint Command Line Interface A nodejs-pandiff Prose diffs for any document format supported by Pandoc A +noto-fonts-emoji Google Noto emoji fonts R npm A package manager for javascript R nss-mdns glibc plugin providing host name resolution via mDNS R nsxiv Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer A @@ -192,8 +196,8 @@ nzbget Download from Usenet using .nzb files R offpunk-git Fork of the command-line Gemini client AV-98 with added offline capabilities A oh-my-zsh-git A community-driven framework for managing your zsh configuration. Includes 180+ optional plugins and over 120 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community A os-prober Utility to detect other OSes on a set of drives R -otf-nerd-fonts-fira-code Monospaced font with programming ligatures. Patched with Nerd Fonts icons. A parallel A shell tool for executing jobs in parallel R +parsec-bin Remotely connect to a gaming pc for a low latency remote computing experience A paru-bin Feature packed AUR helper A pass-coffin A password store extension that hides data inside a signed and encrypted coffin A pass-ssh A pass extension that creates ssh keys with an automatically generated passphrases stored in pass and outputs the public key using fzf or rofi A @@ -204,6 +208,7 @@ pdftk Command-line tool for working with PDFs R peek Simple screen recorder with an easy to use interface R perf Linux kernel performance auditing tool R perl-authen-sasl Perl/CPAN Module Authen::SASL : SASL authentication framework R +piavpn-bin Private Internet Access client A pigz Parallel implementation of the gzip file compressor R pipewire-alsa Low-latency audio/video router and processor - ALSA configuration R playerctl mpris media player controller and lib for spotify, vlc, audacious, bmp, xmms2, and others. R @@ -212,6 +217,7 @@ powertop A tool to diagnose issues with power consumption and power management R prettier An opinionated code formatter for JS, JSON, CSS, YAML and much more R protonvpn Official ProtonVPN metapackage that installs protonvpn-gui and protonvpn-cli, maintained by the ProtonVPN team. A ptpython Python REPL build on top of prompt_toolkit A +pubs Your bibliography on the command line A pulsemixer CLI and curses mixer for pulseaudio R pv A terminal-based tool for monitoring the progress of data through a pipeline. R pyright Type checker for the Python language R @@ -235,7 +241,7 @@ python-pyqt6-networkauth Python bindings for QtNetworkAuth R python-readability-lxml Fast html to text parser (article readability tool) python library R python-slugify A Python slugify application that handles unicode R python-tasklib Python library for interacting with taskwarrior databases R -qemu-base A basic QEMU setup for headless environments R +qemu-desktop A QEMU setup for desktop environments R qt5-wayland Provides APIs for Wayland R qt5-xmlpatterns Support for XPath, XQuery, XSLT and XML schema validation R qt6-svg Classes for displaying the contents of SVG files R @@ -243,7 +249,6 @@ qt6-wayland Provides APIs for Wayland R qtcurve-gtk2 A configurable set of widget styles for KDE and Gtk R quarto-cli-bin An open-source scientific and technical publishing system built on Pandoc (binary from official repo) A qutebrowser A keyboard-driven, vim-like browser based on PyQt5 R -redshift Adjusts the color temperature of your screen according to your surroundings. R refind An EFI boot manager R refind-btrfs Generate rEFInd manual boot stanzas from Btrfs snapshots A reflector A Python 3 module and script to retrieve and filter the latest Pacman mirror list. R @@ -265,6 +270,7 @@ smartmontools Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives R snap-pac Pacman hooks that use snapper to create pre/post btrfs snapshots like openSUSE's YaST R speedtest-cli Command line interface for testing internet bandwidth using speedtest.net R sshfs FUSE client based on the SSH File Transfer Protocol R +steam Valve's digital software delivery system R stow Manage installation of multiple softwares in the same directory tree R surfraw Shell Users' Revolutionary Front Rage Against the Web R swaybg Wallpaper tool for Wayland compositors R @@ -308,6 +314,7 @@ vdirsyncer Synchronize CalDAV and CardDAV. R viddy A modern watch command A vifm-git Ncurses based file manager with vi like keybindings A vim-language-server VimScript language server A +virt-manager Desktop user interface for managing virtual machines R virtualbox Powerful x86 virtualization for enterprise as well as home use R virtualbox-guest-iso The official VirtualBox Guest Additions ISO image R visidata Terminal spreadsheet multitool for discovering and arranging data R @@ -321,6 +328,7 @@ wget Network utility to retrieve files from the Web R wireguard-tools next generation secure network tunnel - tools for configuration R wireless_tools Tools allowing to manipulate the Wireless Extensions R wlopm Wayland output power management. A +wlsunset Day/night gamma adjustments for Wayland compositors A wpa_actiond Daemon that connects to wpa_supplicant and handles connect and disconnect events A wtype xdotool type for wayland R xdg-user-dirs Manage user directories like ~/Desktop and ~/Music R