Compare commits

..

14 commits

Author SHA1 Message Date
418eb40295
Make Nextcloud auto-start on login 2022-07-28 16:54:37 +02:00
4c6526b1cc
Add config for mackup
- ignore apps whose config files are in the `dotfiles` repo
  (see: https://gitlab.webartifex.biz/alexander/dotfiles)
- include various (config) files that should not be public:
  + Cisco's AnyConnect
  + history files for `bash`, `less`, `python`, `psql`, `tig`, and `zsh`
  + Nautilus' bookmarks
  + SSH config & known hosts
2022-07-28 16:54:37 +02:00
c90705bc62
Add public SSH keys 2022-07-28 16:54:36 +02:00
dcdb32585a
Set up Python develop environments
- use `pyenv` to manage the various develop environments
  + install several Python binaries
  + each environment receives its own `poetry` install
- add two virtual environments:
  + "interactive" => default environment with no library,
                     which receives accidental `pip install`s
  + "utils" => hosts various globally available tools/apps
               (e.g., `mackup`)
- add installation and update scripts
2022-07-28 16:54:36 +02:00
5c3a914658
Add config for vim 2022-07-28 16:54:36 +02:00
c1393d0756
Add config for psql 2022-07-28 16:54:35 +02:00
c5cf44f72e
Add base config for Nextcloud
Some of the config keys are set by the machine automatically
and are machine-specific or provide info about the Nextcloud
2022-07-28 16:54:35 +02:00
e56e5b6ba0
Integrate Nextcloud in XDG user directories 2022-07-28 16:54:35 +02:00
0a800cac88
Disable Pop! OS's updater notification 2022-07-28 16:54:34 +02:00
c87bed3a6a
Add config for flameshot 2022-07-28 16:54:34 +02:00
b66256f83a
Add config for batcat, the nicer cat 2022-07-28 16:54:34 +02:00
bca227ff27
Add installation script for the ~/.dotfiles bare repo 2022-07-28 16:54:16 +02:00
9c4ea2ecfe
Initial version of the shells' dotfiles
- add config files for both bash and zsh
- as some utilities regard git to be present, git's config files
  are included as well
2022-07-27 20:15:10 +02:00
c90d4825a7
Hide LICENSE.txt and README.md in Ubuntu's Nautilus 2022-07-10 20:57:19 +02:00
93 changed files with 1188 additions and 4007 deletions

View file

@ -1,8 +1,4 @@
# Executed by bash when a login shell starts # Executed by bash when a login shell starts
# Mimic bash's default behavior explicitly # Mimic bash's default behavior and source `~/.profile`
if [ -f "$HOME/.profile" ]; then source "$HOME/.profile"
source "$HOME/.profile"
else
source "$HOME/.bashrc"
fi

View file

@ -1,3 +1,4 @@
# Executed by bash when a login shell exits # Executed by bash when a login shell exits
source "$HOME/.config/shell/logout.sh" source "$HOME/.config/shell/logout.sh"

View file

@ -1,10 +1,8 @@
# Executed by bash when a login shell starts # Executed by bash when a login shell starts
# Mimic bash's default behavior explicitly # Mimic bash's default behavior and source `~/.bash_login` next
if [ -f "$HOME/.bash_login" ]; then if [ -f "$HOME/.bash_login" ]; then
source "$HOME/.bash_login" source "$HOME/.bash_login"
elif [ -f "$HOME/.profile" ]; then
source "$HOME/.profile"
else else
source "$HOME/.bashrc" source "$HOME/.profile"
fi fi

129
.bashrc
View file

@ -1,4 +1,4 @@
# Executed by bash when a (non-)login shell starts # Executed by bash when a non-login shell starts
# Ensure bash is running interactively # Ensure bash is running interactively
@ -6,18 +6,23 @@
# Check if a command can be found on the $PATH # Check if a command can be found on the $PATH
_command_exists() { command_exists() {
command -v "$1" 1>/dev/null 2>&1 command -v "$1" 1>/dev/null 2>&1
} }
# Enable XON/XOFF software flow control # ==================
# Base Configuration
# ==================
# Disable Ctrl-S and Ctrl-Q
stty -ixon stty -ixon
# Report status of background jobs immediately # Report status of background jobs immediately
set -o notify set -o notify
# Show number of running jobs when exiting a shell # Show # of running jobs when exiting a shell
shopt -s checkjobs shopt -s checkjobs
# Just type the directory to cd into it # Just type the directory to cd into it
@ -38,16 +43,10 @@ shopt -s checkwinsize
# Set these environment variables here (and not in ~/.profile) # =======
# due to conflict/overlap with zsh # History
export HISTFILE="$XDG_STATE_HOME/bash/history" # =======
export HISTSIZE=999999 # number of lines kept in memory
export HISTFILESIZE=999999 # number of lines kept in $HISTFILE
# Ignore commands prefixed with a space,
# and ones entered identically just before
# (this mimics zsh's default behavior)
export HISTCONTROL=ignoreboth
# Remember multi-line commands in history as one command # Remember multi-line commands in history as one command
shopt -s cmdhist shopt -s cmdhist
@ -58,31 +57,25 @@ shopt -s histreedit
# Store multi-line commands in history without semicolons # Store multi-line commands in history without semicolons
shopt -s lithist shopt -s lithist
# Cannot be set in `~/.profile` due to conflict with `zsh` (same env variable)
export HISTFILE="$HOME/.bash_history"
# Ignore commands prefixed with a space, and ones used identically just before
# Initialize various utilities and aliases # (this mimics zsh's default behavior)
source "$HOME/.config/shell/init.sh" export HISTCONTROL=ignoreboth
# Enable programmable completion features # =========================
if ! shopt -oq posix; then # Shell Utilities & Aliases
if [ -f /usr/share/bash-completion/bash_completion ]; then # =========================
source /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
source /etc/bash_completion source "$HOME/.config/shell/utils.sh"
fi source "$HOME/.config/shell/aliases.sh"
fi
# Enable completions for various tools
_command_exists invoke && eval "$(invoke --print-completion-script=bash)"
_command_exists nox && eval "$(register-python-argcomplete nox)"
_command_exists pip && eval "$(pip completion --bash)"
_command_exists pipx && eval "$(register-python-argcomplete pipx)"
_command_exists poetry && eval "$(poetry completions bash)"
# Add tab completion for all aliases to commands with completion functions # Add tab completion for all aliases to commands with completion functions
# (must come after bash completions have been set up)
# Source: https://superuser.com/a/437508 # Source: https://superuser.com/a/437508
_alias_completion() { _alias_completion() {
local namespace="alias_completion" local namespace="alias_completion"
@ -143,26 +136,68 @@ _alias_completion() {
source "$tmp_file" && \rm -f "$tmp_file" source "$tmp_file" && \rm -f "$tmp_file"
}; _alias_completion }; _alias_completion
# Must come after `_alias_completion`
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Mimic zsh's PowerLevel10k
# ================
# Bash Completions
# ================
# Enable programmable completion features
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
source /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
source /etc/bash_completion
fi
fi
# Enable completions for various tools
command_exists invoke && eval "$(invoke --print-completion-script=bash)"
command_exists nox && eval "$(register-python-argcomplete nox)"
command_exists pip && eval "$(pip completion --bash)"
command_exists pipx && eval "$(register-python-argcomplete pipx)"
command_exists poetry && eval "$(poetry completions bash)"
# ============
# Key Bindings
# ============
# Allow easier clearing of the screen (like in zsh)
bind -x '"\C-l": clear;'
# ======
# Prompt
# ======
# Set a variable identifying the chroot you work in
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
_debian_chroot=$(cat /etc/debian_chroot) _debian_chroot=$(cat /etc/debian_chroot)
fi fi
_prompt_git() { # Show a git repo's state
# Mimic PowerLevel10k's git prompt (only rough approximation)
_prompt_git() {
local out ref uncommited unstaged untracked ahead behind local out ref uncommited unstaged untracked ahead behind
# Check if the pwd contains a git repository and exit early if it does not # Check if the pwd contains a git repository and exit early if it does not
ref=$(git rev-parse --abbrev-ref --symbolic-full-name HEAD 2> /dev/null) ref=$(git rev-parse --abbrev-ref --symbolic-full-name HEAD 2> /dev/null)
[ "$ref" == "" ] && return [ "$ref" == "" ] && return
# Check if the current HEAD is detached or reachable by a ref # Check if the current HEAD is detached or reachable by a ref
printf "\033[0;37m " echo -en "\033[0;37m "
if [ "$ref" == "HEAD" ]; then if [ "$ref" == "HEAD" ]; then
ref=$(git rev-parse --short HEAD) ref=$(git rev-parse --short HEAD)
printf "@" echo -en "@"
fi fi
printf "\033[0;32m$ref\033[0m" echo -en "\033[0;32m$ref\033[0m"
# Indicate if local is ahead and/or behind upstream # Indicate if local is ahead and/or behind upstream
ahead=0 ahead=0
behind=0 behind=0
@ -179,33 +214,35 @@ _prompt_git() { # Show a git repo's state
done done
if [ $ahead -gt 0 ] && [ $behind -gt 0 ]; then if [ $ahead -gt 0 ] && [ $behind -gt 0 ]; then
printf "\033[0;32m <>\033[0m" echo -en "\033[0;32m <>\033[0m"
elif [ $ahead -gt 0 ]; then elif [ $ahead -gt 0 ]; then
printf "\033[0;32m >\033[0m" echo -en "\033[0;32m >\033[0m"
elif [ $behind -gt 0 ]; then elif [ $behind -gt 0 ]; then
printf "\033[0;32m <\033[0m" echo -en "\033[0;32m <\033[0m"
fi fi
) )
# Indicate stashed files with a * # Indicate stashed files with a *
[ "$(git stash list 2> /dev/null)" != "" ] && printf "\033[0;32m *\033[0m" [ "$(git stash list 2> /dev/null)" != "" ] && echo -en "\033[0;32m *\033[0m"
# Indicate uncommited/staged with a + # Indicate uncommited/staged with a +
git diff-index --cached --exit-code --quiet HEAD -- 2> /dev/null git diff-index --cached --exit-code --quiet HEAD -- 2> /dev/null
[ $? -gt 0 ] && printf "\033[0;33m +\033[0m" [ $? -gt 0 ] && echo -en "\033[0;33m +\033[0m"
# Indicate unstaged with a ! # Indicate unstaged with a !
git diff-files --exit-code --quiet 2> /dev/null git diff-files --exit-code --quiet 2> /dev/null
[ $? -gt 0 ] && printf "\033[0;33m !\033[0m" [ $? -gt 0 ] && echo -en "\033[0;33m !\033[0m"
# Indicate untracked files with a ? # Indicate untracked files with a ?
if [ "$(git ls-files --exclude-standard --others 2> /dev/null)" != "" ]; then if [ "$(git ls-files --exclude-standard --others 2> /dev/null)" != "" ]; then
printf "\033[0;34m ?\033[0m" echo -en "\033[0;34m ?\033[0m"
fi fi
} }
_prompt_jobs() { # Indicate running background jobs with a"%" # Mimic zsh's "%" symbol indicating background jobs
_prompt_jobs() {
local running local running
(( $(jobs -rp | wc -l) )) && printf "\033[0;32m %\033[0m" (( $(jobs -rp | wc -l) )) && echo -e "\033[0;32m %\033[0m"
} }
_prompt_pyenv() { # Mimic zsh's pyenv/venv integration # Mimic zsh's pyenv/venv integration
_prompt_pyenv() {
if [ -n "$VIRTUAL_ENV" ]; then if [ -n "$VIRTUAL_ENV" ]; then
echo -e "\033[0;36m py $(python -c "import os, sys; (hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)) and print(os.path.basename(sys.prefix))")\033[0m" echo -e "\033[0;36m py $(python -c "import os, sys; (hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)) and print(os.path.basename(sys.prefix))")\033[0m"
elif [ -n "$PYENV_VERSION" ]; then elif [ -n "$PYENV_VERSION" ]; then

View file

@ -1,34 +1,22 @@
[General] [General]
confirmExternalStorage=true confirmExternalStorage=false
crashReporter=false crashReporter=false
isVfsEnabled=false
launchOnSystemStartup=true
monoIcons=true monoIcons=true
moveToTrash=false newBigFolderSizeLimit=99999
newBigFolderSizeLimit=10000
notifyExistingFoldersOverLimit=true
optionalServerNotifications=false optionalServerNotifications=false
showCallNotifications=false useNewBigFolderSizeLimit=false
stopSyncingExistingFoldersOverLimit=false
useNewBigFolderSizeLimit=true
[Accounts] [Accounts]
0\Folders\1\ignoreHiddenFiles=false 0\Folders\1\ignoreHiddenFiles=false
0\Folders\1\localPath=/home/alexander/Cloud/ 0\Folders\1\localPath=/home/alexander/nextcloud/
0\Folders\1\paused=false 0\Folders\1\paused=false
0\Folders\1\targetPath=/ 0\Folders\1\targetPath=/
0\Folders\1\version=2 0\Folders\1\version=2
0\Folders\1\virtualFilesMode=off 0\Folders\1\virtualFilesMode=off
0\authType=webflow 0\authType=webflow
0\dav_user=alexander 0\dav_user=alexander
0\url=https://getraenkemarkt.cloud 0\url=https://nextcloud.webartifex.biz
0\user=@Invalid() 0\user=@Invalid()
0\version=1 0\version=1
0\webflow_user=alexander 0\webflow_user=alexander
version=2 version=2
[Nextcloud]
autoUpdateCheck=false
[Proxy]
type=2

View file

@ -1,52 +1,37 @@
# This file contains fixed global exclude patterns ]*~
]~$*
*~ ].~lock.*
~$* ]~*.tmp
.~lock.*
~*.tmp
]*.~* ]*.~*
]Icon\r* ]Icon\r*
].DS_Store ].DS_Store
].ds_store ].ds_store
*.textClipping ]*.textClipping
._* ]._*
]Thumbs.db ]Thumbs.db
]photothumb.db ]photothumb.db
System Volume Information ]System Volume Information
].*.sw?
.*.sw? ].*.*sw?
.*.*sw?
].TemporaryItems ].TemporaryItems
].Trashes ].Trashes
].DocumentRevisions-V100 ].DocumentRevisions-V100
].Trash-* ].Trash-*
.fseventd ].fseventd
.apdisk ].apdisk
.Spotlight-V100 ].Spotlight-V100
].directory
.directory ]*.part
]*.filepart
*.part ]*.crdownload
*.filepart ]*.kate-swp
*.crdownload ]*.gnucash.tmp-*
].synkron.*
*.kate-swp ].sync.ffs_db
*.gnucash.tmp-* ].symform
].symform-store
.synkron.* ].fuse_hidden*
.sync.ffs_db ]*.unison
.symform ].nfs*
.symform-store ]My Saved Places.
.fuse_hidden* ]\#*#
*.unison
.nfs*
My Saved Places.
\#*#
*.sb-*
# LibreOffice's lock files
.lock

View file

@ -1,56 +0,0 @@
[colors]
draw_bold_text_with_bright_colors = true
[cursor]
blink_interval = 500
thickness = 0.1
unfocused_hollow = true
[cursor.style]
blinking = "On"
shape = "Block"
[font]
size = 12.0
[font.bold]
family = "FiraCode Nerd Font"
style = "Bold"
[font.bold_italic]
family = "FiraCode Nerd Font"
style = "Semibold"
[font.italic]
family = "FiraCode Nerd Font"
style = "Light"
[font.normal]
family = "FiraCode Nerd Font"
style = "Regular"
[font.offset]
x = 0
y = 0
[[keyboard.bindings]]
action = "SpawnNewInstance"
key = "Return"
mods = "Control|Shift"
[scrolling]
history = 9999
multiplier = 10
[terminal.shell]
args = ["-l"]
program = "/usr/bin/zsh"
[window]
decorations = "none"
dynamic_padding = true
opacity = 0.95
[window.padding]
x = 10
y = 10

View file

@ -2,6 +2,5 @@
--style="numbers,changes,header" --style="numbers,changes,header"
--map-syntax ".bash_history:Bourne Again Shell (bash)" --map-syntax ".flake8:ini"
--map-syntax ".flake8:INI" --map-syntax "poetry.lock:toml"
--map-syntax "poetry.lock:TOML"

View file

@ -1,7 +0,0 @@
[general]
# Make `bpython` and `python` share their history
hist_file = ~/.python_history
# No limit
hist_length = 0

View file

@ -5,7 +5,7 @@ drawColor=#ff0000
drawThickness=3 drawThickness=3
filenamePattern=%F_%H-%M-%S filenamePattern=%F_%H-%M-%S
saveAsFileExtension=png saveAsFileExtension=png
savePath=/home/alexander/data/uploads/screenshots savePath=/home/alexander/nextcloud/uploads/screenshots
showHelp=false showHelp=false
startupLaunch=false startupLaunch=false
uiColor=#ff3a00 uiColor=#ff3a00

View file

@ -11,6 +11,7 @@
#-------------------------------------------------| #-------------------------------------------------|
#=======================================================================| #=======================================================================|
# BODY (optional) ======================================================| # BODY (optional) ======================================================|
#=======================================================================| #=======================================================================|

View file

@ -1,49 +1,4 @@
# Generic temporary files
*.backup
*.bak
*.orig
*.temp
*.tmp
# LibreOffice
# Source: https://github.com/github/gitignore/blob/main/Global/LibreOffice.gitignore
#
# Locks
.~lock.*#
# Linux typical files we do not want under version control
# Source: https://github.com/github/gitignore/blob/main/Global/Linux.gitignore
#
*~
# Temporary files created if a process still has a handle open to a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder possibly appearing on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# pyenv
.python-version
# Vim # Vim
# Source: https://github.com/github/gitignore/blob/main/Global/Vim.gitignore
#
# Swap
[._]*.s[a-v][a-z]
!*.svg
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
*~ *~
# Auto-generated tag files .*.swp
tags .env
# Persistent undo
[._]*.un~

View file

@ -1,7 +0,0 @@
# Gnome Settings
This folder contains my Gnome settings
split into several \*.ini files by logical group.
Load them into Gnome with `dconf load / < <file>`.
It is important to always load them in anchored at the root (i.e., `/`).

View file

@ -1,53 +0,0 @@
[org/gnome/desktop/app-folders]
folder-children=['Browsers', 'Communication', 'Develop', 'Files', 'Multimedia', 'Office', 'Remote', 'Settings', 'Terminal', 'Utilities']
[org/gnome/desktop/app-folders/folders/Browsers]
apps=['google-chrome.desktop', 'org.mozilla.firefox.desktop']
name='Browsers'
translate=true
[org/gnome/desktop/app-folders/folders/Communication]
apps=['org.mozilla.thunderbird.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Contacts.desktop', 'org.gnome.Evolution.desktop', 'org.telegram.desktop.desktop', 'Zoom.desktop']
name='Communication'
translate=true
[org/gnome/desktop/app-folders/folders/Develop]
apps=['com.jetbrains.PyCharm-Professional.desktop', 'org.gnome.Boxes.desktop', 'rstudio.desktop', 'texmaker.desktop', 'scrcpy.desktop', 'scrcpy-console.desktop', 'sqlitebrowser.desktop']
name='Develop'
translate=true
[org/gnome/desktop/app-folders/folders/Files]
apps=['fr.romainvigier.MetadataCleaner.desktop', 'org.cryptomator.Cryptomator.desktop', 'org.gnome.Evince.desktop', 'org.gnome.FileRoller.desktop', 'org.gnome.Loupe.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.TextEditor.desktop', 'simple-scan.desktop']
name='Files'
translate=true
[org/gnome/desktop/app-folders/folders/Multimedia]
apps=['com.obsproject.Studio.desktop', 'com.spotify.Client.desktop', 'org.gnome.Rhythmbox3.desktop', 'vlc.desktop']
name='Multimedia'
translate=true
[org/gnome/desktop/app-folders/folders/Office]
apps=['libreoffice-base.desktop', 'libreoffice-calc.desktop', 'libreoffice-draw.desktop', 'libreoffice-impress.desktop', 'libreoffice-math.desktop', 'libreoffice-startcenter.desktop', 'libreoffice-writer.desktop', 'simple-scan.desktop']
name='Office'
translate=true
[org/gnome/desktop/app-folders/folders/Remote]
apps=['org.remmina.Remmina.desktop', 'rustdesk.desktop', 'scrcpy.desktop', 'scrcpy-console.desktop']
name='Remote'
translate=true
[org/gnome/desktop/app-folders/folders/Settings]
apps=['ca.desrt.dconf-editor.desktop', 'com.github.joseexposito.touche.desktop', 'com.system76.keyboardconfigurator.desktop', 'firewall-config.desktop', 'gnome-language-selector.desktop', 'gnome-session-properties.desktop', 'gnome-system-monitor.desktop', 'im-config.desktop', 'menulibre.desktop', 'nm-connection-editor.desktop', 'nvidia-settings.desktop', 'org.bleachbit.BleachBit.desktop', 'org.gnome.Extensions.desktop', 'org.gnome.PowerStats.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Software.desktop', 'org.gnome.tweaks.desktop', 'org.pulseaudio.pavucontrol.desktop', 'software-properties-gnome.desktop', 'system76-driver.desktop', 'system76-firmware.desktop']
name='Settings'
translate=true
[org/gnome/desktop/app-folders/folders/Terminal]
apps=['Alacritty.desktop', 'htop.desktop', 'org.gnome.Terminal.desktop', 'ranger.desktop']
name='Terminal'
translate=true
[org/gnome/desktop/app-folders/folders/Utilities]
apps=['com.github.donadigo.eddy.desktop', 'com.system76.Popsicle.desktop', 'gparted.desktop', 'gucharmap.desktop', 'info.desktop', 'java-17-openjdk-17.0.4.0.8-1.fc36.x86_64-jconsole.desktop', 'org.gnome.baobab.desktop', 'org.gnome.Characters.desktop', 'org.gnome.DiskUtility.desktop', 'org.gnome.eog.desktop', 'org.gnome.font-viewer.desktop', 'org.gnome.Logs.desktop', 'org.gnome.Screenshot.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.Totem.desktop', 'pop-cosmic-applications.desktop', 'pop-cosmic-launcher.desktop', 'pop-cosmic-workspaces.desktop', 'screenkey.desktop', 'yelp.desktop']
name='Utilities'
translate=true

View file

@ -1,144 +0,0 @@
# This file contains settings for various individual desktop apps
[ca/desrt/dconf-editor]
# Always start at dconf's root
saved-pathbar-path='/'
saved-view='/'
show-warning=false
[org/gnome/Contacts]
did-initial-setup=true
[org/gnome/TextEditor]
auto-indent=true
highlight-current-line=true
indent-style='space'
restore-session=false
show-grid=true
show-map=true
tab-width=4
wrap-text=false
[org/gnome/calendar]
active-view='week'
[org/gnome/control-center]
last-panel='info-overview'
# [org/gnome/gedit]
[org/gnome/gedit/plugins/filebrowser]
tree-view=true
[org/gnome/gedit/preferences/ui]
show-tabs-mode='auto'
[org/gnome/gnome-system-monitor]
cpu-smooth-graph=true
cpu-stacked-area-chart=false
disks-interval=1000
graph-update-interval=250
maximized=false
network-in-bits=true
show-all-fs=true
show-dependencies=false
show-whose-processes='user'
update-interval=1000
# [org/gnome/nautilus]
[org/gnome/nautilus/compression]
default-compression-format='zip'
[org/gnome/nautilus/icon-view]
captions=['size', 'none', 'none']
[org/gnome/nautilus/list-view]
default-column-order=['name', 'size', 'type', 'owner', 'group', 'permissions', 'where', 'date_modified', 'date_modified_with_time', 'date_accessed', 'recency', 'starred', 'detailed_type']
default-visible-columns=['name', 'size', 'date_modified', 'starred']
use-tree-view=true
[org/gnome/nautilus/preferences]
always-use-location-entry=true
default-folder-viewer='list-view'
search-filter-time-type='last_modified'
search-view='list-view'
show-create-link=false
show-delete-permanently=true
[org/gnome/software]
allow-updates=false
check-timestamp=0
download-updates=false
download-updates-notify=false
first-run=false
install-timestamp=0
online-updates-timestamp=0
security-timestamp=0
update-notification-timestamp=0
upgrade-notification-timestamp=0
# [org/gnome/terminal]
[org/gnome/terminal/legacy]
confirm-close=false
# [org/gnome/terminal/legacy/keybindings]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
[org/gnome/terminal/legacy/profiles:]
default='b1dcc9dd-5262-4d8d-a863-c897e6d979b9'
list=['b1dcc9dd-5262-4d8d-a863-c897e6d979b9']
[org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
audible-bell=false
background-color='rgb(0,0,0)'
bold-is-bright=true
custom-command='/usr/bin/zsh'
foreground-color='rgb(255,255,255)'
login-shell=false
use-custom-command=true
use-theme-colors=true
visible-name='Default'
[org/gnome/tweaks]
show-extensions-notice=false
# [org/gtk/*/settings/file-chooser]
# This is Gnome Files
[org/gtk/gtk4/settings/file-chooser]
# Keep in sync with [org/gtk/settings/file-chooser]
date-format='regular'
location-mode='path-bar'
show-hidden=false
show-size-column=true
show-type-column=true
sort-column='name'
sort-directories-first=true
sort-order='ascending'
type-format='category'
[org/gtk/settings/file-chooser]
# Keep in sync with [org/gtk/gtk4/settings/file-chooser]
date-format='regular'
location-mode='path-bar'
show-hidden=false
show-size-column=true
show-type-column=true
sort-column='name'
sort-directories-first=true
sort-order='ascending'
type-format='category'

View file

@ -1,5 +0,0 @@
# Elgato Key Lights
The Python files in this folder are hooked as keyboard shortcuts in Gnome.
They allow to toggle the key lights in my office.
In the long-run, these scripts should be improved a bit.

View file

@ -1,12 +0,0 @@
#!/usr/bin/env python
import leglight
LEFT_KEYLIGHT_IP = "192.168.190.62"
RIGHT_KEYLIGHT_IP = "192.168.190.63"
left = leglight.LegLight(LEFT_KEYLIGHT_IP, port=9123)
right = leglight.LegLight(RIGHT_KEYLIGHT_IP, port=9123)
left.decBrightness(5)
right.decBrightness(5)

View file

@ -1,12 +0,0 @@
#!/usr/bin/env python
import leglight
LEFT_KEYLIGHT_IP = "192.168.190.62"
RIGHT_KEYLIGHT_IP = "192.168.190.63"
left = leglight.LegLight(LEFT_KEYLIGHT_IP, port=9123)
right = leglight.LegLight(RIGHT_KEYLIGHT_IP, port=9123)
left.decColor(200)
right.decColor(200)

View file

@ -1,12 +0,0 @@
#!/usr/bin/env python
import leglight
LEFT_KEYLIGHT_IP = "192.168.190.62"
RIGHT_KEYLIGHT_IP = "192.168.190.63"
left = leglight.LegLight(LEFT_KEYLIGHT_IP, port=9123)
right = leglight.LegLight(RIGHT_KEYLIGHT_IP, port=9123)
left.incBrightness(5)
right.incBrightness(5)

View file

@ -1,12 +0,0 @@
#!/usr/bin/env python
import leglight
LEFT_KEYLIGHT_IP = "192.168.190.62"
RIGHT_KEYLIGHT_IP = "192.168.190.63"
left = leglight.LegLight(LEFT_KEYLIGHT_IP, port=9123)
right = leglight.LegLight(RIGHT_KEYLIGHT_IP, port=9123)
left.incColor(200)
right.incColor(200)

View file

@ -1,21 +0,0 @@
#!/usr/bin/env python
import leglight
LEFT_KEYLIGHT_IP = "192.168.190.62"
RIGHT_KEYLIGHT_IP = "192.168.190.63"
left = leglight.LegLight(LEFT_KEYLIGHT_IP, port=9123)
right = leglight.LegLight(RIGHT_KEYLIGHT_IP, port=9123)
if left.info()["on"] or right.info()["on"]:
left.off()
right.off()
else:
left.on()
right.on()
left.brightness(30)
right.brightness(30)
left.color(6000)
right.color(6000)

View file

@ -1,318 +0,0 @@
# Unify all key bindings in this file to conveniently keep them consistent
[org/gnome/desktop/wm/keybindings]
# <Super><Shift>q is i3wm's default
close=['<Super>Q', '<Super><Shift>Q', '<Primary><Shift>Q', '<Alt>F4']
maximize=@as []
unmaximize=@as []
toggle-maximized=['<Super>M']
minimize=@as []
switch-applications=['<Super>Tab', '<Primary>Tab']
switch-applications-backward=['<Super><Shift>Tab', '<Primary><Shift>Tab']
switch-input-source=@as []
switch-input-source-backward=@as []
switch-group=@as []
switch-group-backward=@as []
switch-panels=@as []
switch-panels-backward=@as []
cycle-group=@as []
cycle-group-backward=@as []
cycle-panels=@as []
cycle-panels-backward=@as []
cycle-windows=@as []
cycle-windows-backward=@as []
begin-move=@as []
begin-resize=@as []
# - <Super><Primary>Left/Right is the default to move left/right => <Super><Primary>1-5
# - <Super>1-5 is i3wm's default way
switch-to-workspace-1=['<Super>1', '<Super><Primary>1']
switch-to-workspace-2=['<Super>2', '<Super><Primary>2']
switch-to-workspace-3=['<Super>3', '<Super><Primary>3']
switch-to-workspace-4=['<Super>4', '<Super><Primary>4']
switch-to-workspace-5=['<Super>5', '<Super><Primary>5']
switch-to-workspace-6=['<Super>6', '<Super><Primary>6']
switch-to-workspace-7=['<Super>7', '<Super><Primary>7']
switch-to-workspace-8=['<Super>8', '<Super><Primary>8']
switch-to-workspace-9=['<Super>9', '<Super><Primary>9']
switch-to-workspace-10=['<Super>0', '<Super><Primary>0']
switch-to-workspace-last=['<Super>End', '<Super><Primary>End']
switch-to-workspace-left=['<Super><Primary>Left']
switch-to-workspace-right=['<Super><Primary>Right']
# <Super><Shift>1-5 is i3wm's default
move-to-workspace-1=['<Super><Shift>1', '<Primary><Shift>1']
move-to-workspace-2=['<Super><Shift>2', '<Primary><Shift>2']
move-to-workspace-3=['<Super><Shift>3', '<Primary><Shift>3']
move-to-workspace-4=['<Super><Shift>4', '<Primary><Shift>4']
move-to-workspace-5=['<Super><Shift>5', '<Primary><Shift>5']
move-to-workspace-6=['<Super><Shift>6', '<Primary><Shift>6']
move-to-workspace-7=['<Super><Shift>7', '<Primary><Shift>7']
move-to-workspace-8=['<Super><Shift>8', '<Primary><Shift>8']
move-to-workspace-9=['<Super><Shift>9', '<Primary><Shift>9']
move-to-workspace-10=['<Super><Shift>0', '<Primary><Shift>0']
move-to-workspace-last=['<Super><Shift>End', '<Primary><Shift>End']
move-to-workspace-left=['<Super><Shift>Left', '<Primary><Shift>Left']
move-to-workspace-right=['<Super><Shift>Right', '<Primary><Shift>Right']
[org/gnome/mutter/keybindings]
toggle-tiled-left=@as []
toggle-tiled-right=@as []
[org/gnome/settings-daemon/plugins/media-keys]
email=['<Super>E']
help=@as []
home=['<Super>F']
search=['<Super>slash']
terminal=@as []
www=['<Super>B']
screensaver=['<Super>Escape']
logout=@as []
# Besides the numkeys, we use "/", ".", and "," to control the media
play=['<Primary><Alt>Slash']
next=['<Primary><Alt>Right']
previous=['<Primary><Alt>Left']
# Note: I often type "m" for "mute" intuitively
volume-mute=['<Primary><Alt>M']
volume-up=['<Primary><Alt>Up']
volume-down=['<Primary><Alt>Down']
magnifier=@as []
magnifier-zoom-in=@as []
magnifier-zoom-out=@as []
on-screen-keyboard=@as []
screenreader=@as []
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom10/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom11/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom12/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom13/']
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
binding='<Primary><Alt>Home'
command='gnome-session-quit --reboot'
name='Reboot Machine'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1]
binding='<Primary><Alt>End'
command='gnome-session-quit --power-off'
name='Shutdown Machine'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2]
binding='<Primary><Alt>Delete'
command='gnome-session-quit --logout'
name='Log out (1)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3]
binding='<Primary><Alt>BackSpace'
command='gnome-session-quit --logout'
name='Log out (2)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4]
binding='<Super>G'
command='google-chrome'
name='Google Chrome'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5]
# Mimic i3wm's default way to open terminals
binding='<Super>Return'
command='alacritty'
name='Terminal (1)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6]
# Faster than the default <Primary><Alt>t
binding='<Super>T'
command='alacritty'
name='Terminal (2)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7]
# Gnome's actual default, but with a custom terminal emulator
binding='<Primary><Alt>T'
command='alacritty'
name='Terminal (3)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8]
binding='<Primary><Alt>L'
command='/home/alexander/.local/share/elgato/bin/python /home/alexander/.config/gnome-settings/elgato/toggle_keylights.py'
name='Toggle Keylights in the Office'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9]
binding='<Primary><Alt>Apostrophe'
command='/home/alexander/.local/share/elgato/bin/python /home/alexander/.config/gnome-settings/elgato/inc_brightness.py'
name='Increase Brightness of Keylights in the Office'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom10]
binding='<Primary><Alt>Semicolon'
command='/home/alexander/.local/share/elgato/bin/python /home/alexander/.config/gnome-settings/elgato/dec_brightness.py'
name='Decrease Brightness of Keylights in the Office'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom11]
binding='<Primary><Alt>Bracketright'
command='/home/alexander/.local/share/elgato/bin/python /home/alexander/.config/gnome-settings/elgato/inc_color.py'
name='Increase Color of Keylights in the Office'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom12]
binding='<Primary><Alt>Bracketleft'
command='/home/alexander/.local/share/elgato/bin/python /home/alexander/.config/gnome-settings/elgato/dec_color.py'
name='Decrease Color of Keylights in the Office'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom13]
binding='<Super>U'
command='/usr/bin/flatpak run com.spotify.Client'
name='Spotify'
[org/gnome/shell/extensions/forge/keybindings]
focus-border-toggle=@as []
prefs-tiling-toggle=@as []
# Changing the gap size dynamically is not needed
window-gap-size-decrease=@as []
window-gap-size-increase=@as []
workspace-active-tile-toggle=['<Super><Shift>Y']
window-toggle-float=@as []
window-toggle-always-float=['<Super>Y']
window-focus-up=['<Super>Up']
window-focus-down=['<Super>Down']
window-focus-left=['<Super>Left']
window-focus-right=['<Super>Right']
window-move-up=['<Super><Shift>Up']
window-move-down=['<Super><Shift>Down']
window-move-left=['<Super><Shift>Left']
window-move-right=['<Super><Shift>Right']
window-swap-up=['<Super><Primary>Up']
window-swap-down=['<Super><Primary>Down']
window-swap-left=['<Super><Primary>Left']
window-swap-right=['<Super><Primary>Right']
window-swap-last-active=['<Super><Primary>Return']
window-resize-top-increase=['<Super><Alt>Up']
window-resize-top-decrease=['<Super><Alt><Primary>Down']
window-resize-bottom-increase=['<Super><Alt>Down']
window-resize-bottom-decrease=['<Super><Alt><Primary>Up']
window-resize-left-increase=['<Super><Alt>Left']
window-resize-left-decrease=['<Super><Alt><Primary>Right']
window-resize-right-increase=['<Super><Alt>Right']
window-resize-right-decrease=['<Super><Alt><Primary>Left']
window-snap-center=@as []
window-snap-one-third-left=@as []
window-snap-one-third-right=@as []
window-snap-two-third-left=@as []
window-snap-two-third-right=@as []
# Container stuff
con-split-horizontal=@as []
con-split-vertical=@as []
con-split-layout-toggle=@as []
con-stacked-layout-toggle=@as []
con-tabbed-layout-toggle=@as []
con-tabbed-showtab-decoration-toggle=@as []
[org/gnome/shell/extensions/nightthemeswitcher/time]
nightthemeswitcher-ondemand-keybinding=['<Primary><Alt>D']
[org/gnome/shell/extensions/pop-shell]
# The launcher does not work without Pop!OS
activate-launcher=@as []
# "toggle-floating" only puts the active window into floating mode
# while "toggle-tiling" turns the tiling mode on and off for all windows
toggle-floating=['<Super>Y']
toggle-tiling=['<Super><Shift>Y']
focus-up=['<Super>Up']
focus-down=['<Super>Down']
focus-left=['<Super>Left']
focus-right=['<Super>Right']
# Extends the move-to-workspace-* options above; in particular,
# "Up" and "Down" can be used to move windows to the upper monitors
pop-monitor-up=['<Super><Primary><Shift>Up', '<Super><Shift>Up', '<Primary><Shift>Up']
pop-monitor-down=['<Super><Primary><Shift>Down', '<Super><Shift>Down', '<Primary><Shift>Down']
pop-monitor-left=['<Super><Primary><Shift>Left']
pop-monitor-right=['<Super><Primary><Shift>Right']
pop-workspace-down=@as []
pop-workspace-up=@as []
# <Super><Shift>Return instead of the default <Super>Return
# so that <Super>Return opens terminal (like i3wm) above
tile-enter=['<Primary><Shift>Return', '<Super><Shift>Return']
tile-accept=['Return']
tile-move-up=['Up']
tile-move-down=['Down']
tile-move-left=['Left']
tile-move-right=['Right']
tile-resize-up=['<Shift>Down']
tile-resize-down=['<Shift>Up']
tile-resize-left=['<Shift>Left']
tile-resize-right=['<Shift>Right']
tile-swap-up=['<Primary>Up']
tile-swap-down=['<Primary>Down']
tile-swap-left=['<Primary>Left']
tile-swap-right=['<Primary>Right']
[org/gnome/shell/keybindings]
focus-active-notification=@as []
open-application-menu=@as []
# Disable Gnome's default behavior of opening "favorite" apps
# with <Super>1-10 and instead switch workspaces
# (goes together with [org/gnome/shell/extensions/dash-to-dock] > hot-keys)
# Source: https://askubuntu.com/a/1138322
switch-to-application-1=@as []
switch-to-application-2=@as []
switch-to-application-3=@as []
switch-to-application-4=@as []
switch-to-application-5=@as []
switch-to-application-6=@as []
switch-to-application-7=@as []
switch-to-application-8=@as []
switch-to-application-9=@as []
switch-to-application-10=@as []
toggle-message-tray=@as []
toggle-overview=@as []
[org/gnome/terminal/legacy/keybindings]
close-tab='<Primary>W'
close-window='<Primary>Q'
find='<Primary>F'
find-clear='<Primary>J'
find-next='<Primary>N'
find-previous='<Primary>H'
new-tab='<Primary>T'
new-window='<Primary>N'
zoom-in='<Primary><Shift>Plus'
# default: zoom-out='<Primary>minus'

View file

@ -1,199 +0,0 @@
[org/freedesktop/tracker/miner/files]
index-recursive-directories=['&DESKTOP', '&DOCUMENTS', '&MUSIC', '&PICTURES', '&VIDEOS', '&DOWNLOAD', '/home/alexander/Cloud']
[org/gnome/desktop/a11y/applications]
screen-keyboard-enabled=false
[org/gnome/desktop/background]
# Keep picture-* in sync with [org/gnome/desktop/screensaver] below
color-shading-type='solid'
picture-options='spanned'
picture-uri='file:///usr/share/backgrounds/lake_in_front_of_mountains.jpg'
picture-uri-dark='file:///usr/share/backgrounds/lake_in_front_of_mountains.jpg'
primary-color='#000000000000'
secondary-color='#000000000000'
[org/gnome/desktop/calendar]
show-weekdate=true
[org/gnome/desktop/datetime]
automatic-timezone=true
[org/gnome/desktop/input-sources]
per-window=false
sources=[('xkb', 'us')]
xkb-options=['compose:ralt', 'caps:ctrl_modifier', 'lv3:menu_switch']
[org/gnome/desktop/interface]
clock-format='24h'
clock-show-date=true
clock-show-seconds=true
clock-show-weekday=true
color-scheme='default'
document-font-name='Clear Sans Medium 11'
enable-animations=true
enable-hot-corners=false
font-antialiasing='grayscale'
font-hinting='slight'
font-name='Clear Sans Medium 11'
# gtk-im-module='gtk-im-context-simple'
# gtk-theme='Pop-dark'
# icon-theme='Pop'
monospace-font-name='FiraCode Nerd Font Mono 11'
show-battery-percentage=true
toolkit-accessibility=false
[org/gnome/desktop/lockdown]
disbale-user-switching=true
[org/gnome/desktop/media-handling]
automount=true
automount-open=false
autorun-never=true
autorun-x-content-ignore=@as []
autorun-x-content-open-folder=@as []
autorun-x-content-start-app=@as []
[org/gnome/desktop/peripherals/keyboard]
numlock-state=true
remember-numlock-state=true
[org/gnome/desktop/peripherals/mouse]
natural-scroll=false
[org/gnome/desktop/peripherals/touchpad]
edge-scrolling-enabled=false
natural-scroll=true
tap-to-click=true
two-finger-scrolling-enabled=true
[org/gnome/desktop/privacy]
disable-camera=false
disable-microphone=false
disable-sound-output=false
hide-identity=true
old-files-age=uint32 7
recent-files-max-age=int32 1
remember-app-usage=false
remember-recent-files=false
remove-old-temp-files=true
remove-old-trash-files=true
report-technical-problems=false
send-software-usage-stats=false
show-full-name-in-top-bar=false
[org/gnome/desktop/screensaver]
# Keep picture-* in sync with [org/gnome/desktop/background] above
color-shading-type='solid'
lock-delay=uint32 0
lock-enabled=false
logout-enabled=true
picture-options='spanned'
picture-uri='file:///usr/share/backgrounds/lake_in_front_of_mountains.jpg'
primary-color='#000000000000'
secondary-color='#000000000000'
show-full-name-in-top-bar=false
status-message-enabled=false
user-switch-enabled=false
[org/gnome/desktop/search-providers]
disable-external=false
disabled=['firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Characters.desktop', 'org.gnome.Contacts.desktop', 'org.gnome.Photos.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.Terminal.desktop']
sort-order=['org.gnome.Documents.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Software.desktop']
[org/gnome/desktop/session]
idle-delay=uint32 900
[org/gnome/desktop/sound]
allow-volume-above-100-percent=true
event-sounds=true
input-feedback-sounds=true
# [org/gnome/desktop/wm/keybindings]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
[org/gnome/desktop/wm/preferences]
audible-bell=false
button-layout='close:'
num-workspaces=10
titlebar-font='Clear Sans Bold 12'
workspace-names=['1', '2', '3/communications', '4/organization', '5', '6', '7', '8', '9/music', '10/settings']
[org/gnome/login-screen]
allowed-failures=999
disable-user-list=true
# The following keys are non-writeable
# See: /etc/dconf/db/distro.d/locks/20-authselect
# enable-fingerprint-authentication=false
# enable-password-authentication=true
# enable-smartcard-authentication=false
[org/gnome/mutter]
dynamic-workspaces=false
# We use Pop Shell for tiling
edge-tiling=false
workspaces-only-on-primary=true
# [org/gnome/mutter/keybindings]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
[org/gnome/nm-applet]
disable-connected-notifications=true
disable-disconnected-notifications=true
suppress-wireless-networks-available=true
[org/gnome/settings-daemon/plugins/color]
night-light-enabled=true
night-light-schedule-automatic=true
night-light-schedule-from=22.0
night-light-schedule-to=6.0
[org/gnome/settings-daemon/plugins/media-keys]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
volume-step=10
[org/gnome/settings-daemon/plugins/power]
idle-dim=false
power-button-action='suspend'
sleep-inactive-ac-timeout=0
sleep-inactive-ac-type='nothing'
sleep-inactive-battery-timeout=600
sleep-inactive-battery-type='nothing'
[org/gnome/system/location]
enabled=false
[system/locale]
# Basically English display with near-German settings (e.g., DIN A4)
region='en_DK.UTF-8'
[system/proxy]
mode='none'

View file

@ -1,298 +0,0 @@
[org/gnome/desktop/notifications]
application-children=@as []
show-banners=true
show-in-lock-screen=false
[org/gnome/desktop/notifications/application/alacritty]
enable=false
[org/gnome/desktop/notifications/application/ca-desrt-dconf-editor]
enable=false
[org/gnome/desktop/notifications/application/com-alacritty-alacritty]
enable=false
[org/gnome/desktop/notifications/application/com-cisco-anyconnect-gui]
enable=false
[org/gnome/desktop/notifications/application/com-github-donadigo-eddy]
enable=false
[org/gnome/desktop/notifications/application/com-nextcloud-desktopclient-nextcloud]
enable=false
[org/gnome/desktop/notifications/application/com-obsproject-studio]
enable=false
[org/gnome/desktop/notifications/application/com-spotify-client]
enable=false
[org/gnome/desktop/notifications/application/com-system76-keyboardconfigurator]
enable=false
[org/gnome/desktop/notifications/application/discord]
enable=false
[org/gnome/desktop/notifications/application/display-im6-q16]
enable=false
[org/gnome/desktop/notifications/application/firewall-config]
enable=false
[org/gnome/desktop/notifications/application/gnome-analytics-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-color-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-control-center]
enable=false
[org/gnome/desktop/notifications/application/gnome-datetime-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-firmware-panel]
enable=true
show-banners=false
[org/gnome/desktop/notifications/application/gnome-language-selector]
enable=false
[org/gnome/desktop/notifications/application/gnome-network-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-power-panel]
enable=true
show-banners=false
[org/gnome/desktop/notifications/application/gnome-printers-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-session-properties]
enable=false
[org/gnome/desktop/notifications/application/gnome-support-panel]
enable=false
[org/gnome/desktop/notifications/application/gnome-system-monitor]
enable=false
[org/gnome/desktop/notifications/application/gnome-upgrade-panel]
enable=false
[org/gnome/desktop/notifications/application/gparted]
enable=false
[org/gnome/desktop/notifications/application/gucharmap]
enable=false
[org/gnome/desktop/notifications/application/htop]
enable=false
[org/gnome/desktop/notifications/application/info]
enable=false
[org/gnome/desktop/notifications/application/install4j-a303jh-mediathekview]
enable=false
[org/gnome/desktop/notifications/application/io-elementary-appcenter]
enable=false
[org/gnome/desktop/notifications/application/java-17-openjdk-17-0-4-0-8-1-fc36-x86-64-jconsole]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-base]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-calc]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-draw]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-impress]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-math]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-startcenter]
enable=false
[org/gnome/desktop/notifications/application/libreoffice-writer]
enable=false
[org/gnome/desktop/notifications/application/menulibre]
enable=false
[org/gnome/desktop/notifications/application/nm-connection-editor]
enable=false
[org/gnome/desktop/notifications/application/nvidia-settings]
enable=false
[org/gnome/desktop/notifications/application/org-bleachbit-bleachbit]
enable=false
[org/gnome/desktop/notifications/application/org-cryptomator-cryptomator]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-baobab]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-calculator]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-calendar]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-characters]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-chromegnomeshell]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-contacts]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-diskutility]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-eog]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-evince]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-evolution-alarm-notify]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-evolution]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-extensions-desktop]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-extensions]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-fileroller]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-font-viewer]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-gedit]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-logs]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-nautilus]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-octave]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-photos]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-powerstats]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-screenshot]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-seahorse-application]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-settings]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-shell-extensions]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-software]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-terminal]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-texteditor]
enable=false
[org/gnome/desktop/notifications/application/org-gnome-tweaks]
enable=false
[org/gnome/desktop/notifications/application/org-mozilla-firefox]
enable=false
[org/gnome/desktop/notifications/application/org-mozilla-thunderbird]
enable=false
[org/gnome/desktop/notifications/application/org-pulseaudio-pavucontrol]
enable=false
[org/gnome/desktop/notifications/application/org-remmina-remmina]
enable=false
[org/gnome/desktop/notifications/application/org-telegram-desktop]
enable=false
[org/gnome/desktop/notifications/application/pop-cosmic-applications]
enable=false
[org/gnome/desktop/notifications/application/pop-cosmic-launcher]
enable=false
[org/gnome/desktop/notifications/application/pop-cosmic-workspaces]
enable=false
[org/gnome/desktop/notifications/application/r]
enable=false
[org/gnome/desktop/notifications/application/ranger]
enable=false
[org/gnome/desktop/notifications/application/rstudio]
enable=false
[org/gnome/desktop/notifications/application/screenkey]
enable=false
[org/gnome/desktop/notifications/application/simple-scan]
enable=false
[org/gnome/desktop/notifications/application/sqlitebrowser]
enable=false
[org/gnome/desktop/notifications/application/system76-driver]
enable=false
[org/gnome/desktop/notifications/application/telegramdesktop]
enable=false
[org/gnome/desktop/notifications/application/texdoctk]
enable=false
[org/gnome/desktop/notifications/application/texmaker]
enable=false
[org/gnome/desktop/notifications/application/timeshift-gtk]
enable=false
[org/gnome/desktop/notifications/application/us-zoom-zoom]
enable=false
[org/gnome/desktop/notifications/application/vim]
enable=false
[org/gnome/desktop/notifications/application/vlc]
enable=false
[org/gnome/desktop/notifications/application/yelp]
enable=false
[org/gnome/desktop/notifications/application/zoom]
enable=false

View file

@ -1,31 +0,0 @@
[org/gnome/shell]
# We use the 'AlphabeticalAppGrid@stuarthayhurst'
# extension to populate "app-picker-layout"
# See ~/.config/gnome-settings/shell-extensions.ini
# app-picker-layout=@aa{sv} []
# Always reset the command history
command-history=@as []
development-tools=false
favorite-apps=@as []
# Never show Gnome's welcome dialog again
welcome-dialog-last-shown-version='999.999'
[org/gnome/shell/app-switcher]
current-workspace-only=true
# [org/gnome/shell/keybindings]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
[org/gnome/shell/window-switcher]
app-icon-mode='both'
current-workspace-only=true
[org/gnome/shell/world-clocks]
locations=@av []

View file

@ -1,263 +0,0 @@
[org/gnome/shell]
disable-user-extensions=false
disabled-extensions=@as []
enabled-extensions=['allowlockedremotedesktop@kamens.us', 'AlphabeticalAppGrid@stuarthayhurst', 'appindicatorsupport@rgcjonas.gmail.com', 'auto-move-windows@gnome-shell-extensions.gcampax.github.com', 'blur-my-shell@aunetx', 'caffeine@patapon.info', 'just-perfection-desktop@just-perfection', 'launch-new-instance@gnome-shell-extensions.gcampax.github.com', 'space-bar@luchrioh', 'pop-shell@system76.com']
[org/gnome/shell/extensions/alphabetical-app-grid]
folder-order-position='alphabetical'
logging-enabled=false
sort-folder-contents=true
[org/gnome/shell/extensions/auto-move-windows]
application-list=['org.mozilla.firefox.desktop:1', 'com.google.Chrome.desktop:2', 'com.discordapp.Discord.desktop:3', 'org.telegram.desktop.desktop:3', 'Zoom.desktop:3', 'org.gnome.Evolution.desktop:4', 'org.mozilla.thunderbird.desktop:4', 'com.spotify.Client.desktop:9', 'org.gnome.Settings.desktop:10', 'gnome-background-panel.desktop:10', 'gnome-bluetooth-panel.desktop:10', 'bluetooth-sendto.desktop:10', 'gnome-display-panel.desktop:10', 'gnome-info-overview-panel.desktop:10', 'gnome-keyboard-panel.desktop:10', 'gnome-network-panel.desktop:10', 'gnome-notifications-panel.desktop:10', 'gnome-power-panel.desktop:10', 'gnome-printers-panel.desktop:10', 'gnome-sound-panel.desktop:10', 'gnome-wifi-panel.desktop:10', 'nvidia-settings.desktop:10', 'org.pulseaudio.pavucontrol.desktop:10']
[org/gnome/shell/extensions/blur-my-shell/applications]
blur=false
[org/gnome/shell/extensions/caffeine]
countdown-timer=0
duration-timer=2
enable-fullscreen=true
indicator-position-max=2
restore-state=true
show-notifications=false
toggle-state=false
user-enabled=false
[org/gnome/shell/extensions/dash-to-dock]
extend-height=false
# Disable Gnome's default behavior of opening "favorite" apps
# with <Super>1-10 and instead switch workspaces
# (goes together with [org/gnome/shell/keybindings] > switch-to-application-1-10)
# Source: https://askubuntu.com/a/1138322
hot-keys=false
manualhide=true
[org/gnome/shell/extensions/forge]
auto-split-enabled=true
dnd-center-layout='tabbed'
float-always-on-top-enabled=true
focus-border-toggle=true
preview-hint-enabled=true
quick-settings-enabled=true
split-border-toggle=true
stacked-tiling-mode-enabled=true
tabbed-tiling-mode-enabled=true
window-gap-hidden-on-single=true
window-gap-size=uint32 1
window-gap-size-increment=uint32 1
[org/gnome/shell/extensions/just-perfection]
accessibility-menu=false
activities-button=false
activities-button-icon-monochrome=false
activities-button-label=false
aggregate-menu=true
app-menu=false
app-menu-icon=false
background-menu=false
calendar=false
clock-menu=false
controls-manager-spacing-size=0
dash=true
double-super-to-appgrid=false
events-button=false
keyboard-layout=false
osd=true
panel=true
panel-in-overview=true
panel-notification-icon=false
power-icon=true
quick-settings=true
ripple-box=false
screen-recording-indicator=true
screen-sharing-indicator=true
search=true
show-apps-button=false
startup-status=0
theme=false
type-to-search=true
weather=false
window-demands-attention-focus=false
window-picker-icon=true
window-preview-caption=false
window-preview-close-button=true
workspace=false
workspace-background-corner-size=0
workspace-popup=false
workspace-switcher-should-show=false
workspace-wrap-around=false
workspaces-in-app-grid=false
world-clock=false
# [org/gnome/shell/extensions/nightthemeswitcher]
[org/gnome/shell/extensions/nightthemeswitcher/cursor-variants]
enabled=false
[org/gnome/shell/extensions/nightthemeswitcher/gtk-variants]
enabled=false
[org/gnome/shell/extensions/nightthemeswitcher/icon-variants]
enabled=false
[org/gnome/shell/extensions/nightthemeswitcher/shell-variants]
enabled=false
[org/gnome/shell/extensions/nightthemeswitcher/time]
manual-schedule=true
sunrise=6.0
sunset=21.0
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
# nightthemeswitcher-ondemand-keybinding=['<Primary><Alt>D']
[org/gnome/shell/extensions/openweather]
appid='e1c415e4aa29916a39e8992f57e2b09d'
city='49.6179281,9.1773699>Kirchzell, Germany>0'
days-forecast=2
delay-ext-init=1
disable-forecast=false
expand-forecast=true
position-index=1
show-comment-in-forecast=false
show-comment-in-panel=false
[org/gnome/shell/extensions/pop-cosmic]
show-applications-button=false
show-workspaces-button=false
[org/gnome/shell/extensions/pop-shell]
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
active-hint=true
gap-inner=uint32 1
gap-outer=uint32 1
hint-color-rgba='rgb(53,132,228)'
show-skip-taskbar=true
show-title=true
smart-gaps=false
tile-by-default=true
[org/gnome/shell/extensions/simple-system-monitor]
cpu-usage-text='cpu'
download-speed-text='↓'
is-cpu-usage-enable=true
is-download-speed-enable=false
is-memory-usage-enable=true
is-upload-speed-enable=false
item-separator=' '
memory-usage-text='ram'
refresh-interval=1
upload-speed-text='↑'
[org/gnome/shell/extensions/sound-output-device-chooser]
expand-volume-menu=true
hide-on-single-device=true
integrate-with-slider=true
show-profiles=false
[org/gnome/shell/extensions/space-bar/appearance]
active-workspace-border-radius=8
active-workspace-border-width=0
active-workspace-padding-h=8
active-workspace-padding-v=2
empty-workspace-border-radius=8
empty-workspace-border-width=0
empty-workspace-padding-h=8
empty-workspace-padding-v=2
inactive-workspace-border-radius=8
inactive-workspace-border-width=0
inactive-workspace-padding-h=8
inactive-workspace-padding-v=2
workspace-margin=0
workspaces-bar-padding=4
[org/gnome/shell/extensions/space-bar/behavior]
scroll-wheel='disabled'
show-empty-workspaces=false
[org/gnome/shell/extensions/space-bar/shortcuts]
enable-move-to-workspace-shortcuts=true
open-menu=@as []
[org/gnome/shell/extensions/status-area-horizontal-spacing]
hpadding=10
[org/gnome/shell/extensions/system-monitor]
center-display=false
compact-display=false
icon-display=false
move-clock=false
show-tooltip=false
battery-display=false
battery-hidesystem=false
battery-show-menu=false
battery-show-text=false
battery-time=false
cpu-display=true
cpu-show-menu=false
cpu-show-text=true
cpu-style='digit'
cpu-individual-cores=false
disk-display=false
disk-show-menu=false
disk-show-text=false
disk-style='digit'
disk-usage-style='none'
fan-display=false
fan-show-menu=false
fan-show-text=false
fan-style='digit'
freq-display=false
freq-show-menu=false
freq-show-text=false
freq-style='digit'
gpu-display=false
gpu-show-menu=false
gpu-show-text=false
gpu-style='digit'
memory-display=true
memory-show-menu=false
memory-show-text=true
memory-style='digit'
net-display=false
net-show-menu=false
net-show-text=false
net-style='digit'
swap-display=false
swap-show-menu=false
swap-show-text=false
swap-style='digit'
thermal-display=false
thermal-show-menu=false
thermal-show-text=false
thermal-style='digit'
thermal-fahrenheit-unit=false

View file

@ -1,16 +0,0 @@
# Configuration for `mackup`
This folder contains various **config** files
to make [`mackup`](https://github.com/lra/mackup)
synchronize (dot) files the general public should *not* see.
Their format is described [here](https://github.com/lra/mackup/tree/master/doc#add-support-for-an-application-or-almost-any-file-or-directory).
## Changed Location
`mackup`'s default configuration lies the the ~/.mackup.cfg file
and in the ~/.mackup folder that holds config files with
custom sync rules not supported "out of the box."
With a "little hack" during the setup of the dotfiles in this repository,
`mackup`s config files are moved to $XDG_CONFIG_HOME/mackup.

View file

@ -1,5 +0,0 @@
[application]
name = gnupg
[configuration_files]
.local/share/gnupg/trustdb.gpg

View file

@ -1,14 +0,0 @@
[application]
name = various history files
[configuration_files]
# Note: $XDG_STATE_HOME => ~/.local/state
.local/state/bash/history
# .local/state/less/history -> less overwrites the symlink unfortunately
.local/state/python/history
# tig only supports $XDG_DATA_HOME
.local/share/tig/history
# entire folder as $XDG_CONFIG_HOME/psql/psqlrc sets one history file per database
.local/state/psql
.local/state/wget/history
# .local/state/zsh/history -> zsh overwrites the symlink unfortunately

View file

@ -1,35 +0,0 @@
[storage]
engine = file_system
path = /home/alexander/Cloud/Getraenkemarkt
directory = Mackup
[applications_to_ignore]
# Do not sync configuration files managed by
# https://code.webartifex.biz/alexander/dotfiles
alacritty
bash
bat
git
flameshot
mackup
neofetch
p10k
pgsql
poetry
ssh
vim
zsh
# Do not sync $XDG_DATA_HOME/password-store as it contains symlinks
# that Nextcloud does NOT support
pass
# This section is mainly needed such that this file
# does not cause a ConfigParser error
# => Background: The enclosing folder should only
# contain config files for individual applications
# that are to be synced and not mackup's own config
[application]
name = mackup

View file

@ -1,8 +0,0 @@
[application]
name = Remmina's remote clients and config
[configuration_files]
# Note: $XDG_CONFIG_HOME => ~/.config
.config/remmina/remmina.pref
# Note: $XDG_DATA_HOME => ~/.local/share
.local/share/remmina

View file

@ -1,5 +0,0 @@
[application]
name = private SSH (config) files
[configuration_files]
.ssh/config

View file

@ -1,12 +0,0 @@
# MediathekView
This folder contains the configuration for the tool
[MediathekView](https://mediathekview.de/),
a downloading software for Germany's public media publications.
Some files in this folder get created by running the program
and are *not* kept under version control.
**Important**: In order for the configurations in this folder to be used,
the program must be started with a custom config location, i.e.:
`/opt/MediathekView/MediathekView $XDG_CONFIG_HOME/mediathek-view`

View file

@ -1,3 +0,0 @@
{
"bookmarks" : [ ]
}

View file

@ -1,153 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Mediathek>
<system>
<Abo-Mindestdauer-Minuten></Abo-Mindestdauer-Minuten>
<Abos-sofort-suchen>true</Abos-sofort-suchen>
<Ansicht-Set-lang></Ansicht-Set-lang>
<Blacklist-auch-Abo></Blacklist-auch-Abo>
<Blacklist-ausgeschaltet>false</Blacklist-ausgeschaltet>
<Blacklist-Filmlaenge>0</Blacklist-Filmlaenge>
<Blacklist-ist-Whitelist></Blacklist-ist-Whitelist>
<Blacklist-Start-ausgeschaltet>false</Blacklist-Start-ausgeschaltet>
<Blacklist-Zukunft-nicht-anzeigen></Blacklist-Zukunft-nicht-anzeigen>
<Dialog-Download-D-Starten>true</Dialog-Download-D-Starten>
<download-error-msg>true</download-error-msg>
<Download-Ordner-oeffnen></Download-Ordner-oeffnen>
<Download-sofort-starten>false</Download-sofort-starten>
<Eigenschaften-Tabellen-Abos></Eigenschaften-Tabellen-Abos>
<Eigenschaften-Tabellen-Downloads>75,75,150,100,150,250,50,50,100,100,100,100,100,100,100,50,50,0,100,0,0,200,0,0,200,0,0,0,0,0,0,200,0,0,0,0,0,0,0,0|0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39||</Eigenschaften-Tabellen-Downloads>
<Eigenschaften-Tabellen-Filme>75,100,200,300,20,20,20,100,100,100,100,50,50,100,500,0,0|0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,0||</Eigenschaften-Tabellen-Filme>
<Ersetzungstabelle-verwenden>true</Ersetzungstabelle-verwenden>
<FARBE_BUTTON_SET_ABSPIELEN></FARBE_BUTTON_SET_ABSPIELEN>
<FARBE_DOWNLOAD_ANSEHEN></FARBE_DOWNLOAD_ANSEHEN>
<FARBE_DOWNLOAD_DATEINAME_ALT></FARBE_DOWNLOAD_DATEINAME_ALT>
<FARBE_DOWNLOAD_DATEINAME_EXISTIERT></FARBE_DOWNLOAD_DATEINAME_EXISTIERT>
<FARBE_DOWNLOAD_DATEINAME_NEU></FARBE_DOWNLOAD_DATEINAME_NEU>
<FARBE_DOWNLOAD_FEHLER></FARBE_DOWNLOAD_FEHLER>
<FARBE_DOWNLOAD_FEHLER_SEL></FARBE_DOWNLOAD_FEHLER_SEL>
<FARBE_DOWNLOAD_FERTIG></FARBE_DOWNLOAD_FERTIG>
<FARBE_DOWNLOAD_FERTIG_SEL></FARBE_DOWNLOAD_FERTIG_SEL>
<FARBE_DOWNLOAD_IST_ABO></FARBE_DOWNLOAD_IST_ABO>
<FARBE_DOWNLOAD_IST_DIREKTER_DOWNLOAD></FARBE_DOWNLOAD_IST_DIREKTER_DOWNLOAD>
<FARBE_DOWNLOAD_RUN></FARBE_DOWNLOAD_RUN>
<FARBE_DOWNLOAD_RUN_SEL></FARBE_DOWNLOAD_RUN_SEL>
<FARBE_DOWNLOAD_WAIT></FARBE_DOWNLOAD_WAIT>
<FARBE_DOWNLOAD_WAIT_SEL></FARBE_DOWNLOAD_WAIT_SEL>
<FARBE_FILM_BOOKMARKED></FARBE_FILM_BOOKMARKED>
<FARBE_FILM_GEOBLOCK_BACKGROUND></FARBE_FILM_GEOBLOCK_BACKGROUND>
<FARBE_FILM_GEOBLOCK_BACKGROUND_SEL></FARBE_FILM_GEOBLOCK_BACKGROUND_SEL>
<FARBE_FILM_HISTORY></FARBE_FILM_HISTORY>
<FARBE_FILM_LIVESTREAM></FARBE_FILM_LIVESTREAM>
<FARBE_FILM_NEU></FARBE_FILM_NEU>
<FARBE_FILMLISTE_LADEN_AKTIV></FARBE_FILMLISTE_LADEN_AKTIV>
<FARBE_FILTER_REGEX></FARBE_FILTER_REGEX>
<FARBE_FILTER_REGEX_FEHLER></FARBE_FILTER_REGEX_FEHLER>
<Hinweis-Nr-angezeigt></Hinweis-Nr-angezeigt>
<Meldungsfenster-Playermeldungen></Meldungsfenster-Playermeldungen>
<Meldungsfenster-Systemmeldungen></Meldungsfenster-Systemmeldungen>
<nur-ascii>false</nur-ascii>
<Pfade-zum-Speichern></Pfade-zum-Speichern>
<pfad-ffmpeg>/usr/bin/ffmpeg</pfad-ffmpeg>
<pfad-vlc>/usr/bin/vlc</pfad-vlc>
<Player-zum-Abspielen></Player-zum-Abspielen>
<Programm-Linux-Shutdown></Programm-Linux-Shutdown>
<Programm-Url-oeffnen></Programm-Url-oeffnen>
<system-import-url-manuell></system-import-url-manuell>
<system-tab-abo-icon-anzeigen>true</system-tab-abo-icon-anzeigen>
<system-tab-abo-icon-klein>true</system-tab-abo-icon-klein>
<system-tab-download-filter-vis>true</system-tab-download-filter-vis>
<system-tab-download-icon-anzeigen>true</system-tab-download-icon-anzeigen>
<system-tab-download-icon-klein>true</system-tab-download-icon-klein>
<system-tab-download-linebreak>false</system-tab-download-linebreak>
<system-tab-filme-icon-anzeigen>true</system-tab-filme-icon-anzeigen>
<system-tab-filme-icon-klein>true</system-tab-filme-icon-klein>
<system-tab-filme-linebreak>false</system-tab-filme-linebreak>
<update-filme>2</update-filme>
<Version-Programmset>6</Version-Programmset>
</system>
<Programmset>
<Name>Linux Speichern</Name>
<Praefix>http</Praefix>
<Suffix>mp4,mp3,m4v,flv,m4a</Suffix>
<Zielpfad>/home/alexander/downloads/mediathek-view</Zielpfad>
<Zieldateiname>%t-%T-%z</Zieldateiname>
<Thema-anlegen>true</Thema-anlegen>
<Abspielen>false</Abspielen>
<Speichern>true</Speichern>
<Button>true</Button>
<Abo>true</Abo>
<Laenge>false</Laenge>
<Laenge-Feld>false</Laenge-Feld>
<max-Laenge>25</max-Laenge>
<Aufloesung>normal</Aufloesung>
<Beschreibung>Standardset zum Speichern der Filme</Beschreibung>
<Infodatei>false</Infodatei>
<Spotlight>false</Spotlight>
<Untertitel>false</Untertitel>
</Programmset>
<Programm>
<Programmname>ffmpeg</Programmname>
<Zieldateiname>%t-%T-%Z.mp4</Zieldateiname>
<Programmpfad>/usr/bin/ffmpeg</Programmpfad>
<Programmschalter>-i %f -c copy -bsf:a aac_adtstoasc **</Programmschalter>
<Praefix>http</Praefix>
<Suffix>m3u8</Suffix>
<Restart>false</Restart>
<Downloadmanager>false</Downloadmanager>
</Programm>
<Programm>
<Programmname>VLC</Programmname>
<Zieldateiname>%t-%T-%Z.ts</Zieldateiname>
<Programmpfad>/usr/bin/vlc</Programmpfad>
<Programmschalter>%f :sout=#standard{access=file,mux=ts,dst=**} -I dummy --play-and-exit</Programmschalter>
<Restart>false</Restart>
<Downloadmanager>false</Downloadmanager>
</Programm>
<Programmset>
<Name>Linux Abspielen</Name>
<Thema-anlegen>true</Thema-anlegen>
<Abspielen>true</Abspielen>
<Speichern>false</Speichern>
<Button>true</Button>
<Abo>false</Abo>
<Laenge>false</Laenge>
<Laenge-Feld>false</Laenge-Feld>
<max-Laenge>25</max-Laenge>
<Aufloesung>normal</Aufloesung>
<Beschreibung>Standardset zum direkten Abspielen der Filme</Beschreibung>
<Infodatei>false</Infodatei>
<Spotlight>false</Spotlight>
<Untertitel>false</Untertitel>
</Programmset>
<Programm>
<Programmname>Vlc</Programmname>
<Programmpfad>/usr/bin/vlc</Programmpfad>
<Programmschalter>%f --play-and-exit</Programmschalter>
<Restart>false</Restart>
<Downloadmanager>false</Downloadmanager>
</Programm>
<Ersetzungstabelle><von> </von><nach>_</nach></Ersetzungstabelle>
</Mediathek>

View file

@ -1,859 +0,0 @@
# See this Wiki for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
info title
info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Resolution" resolution
info "DE" de
info "WM" wm
info "WM Theme" wm_theme
info "Theme" theme
info "Icons" icons
info "Terminal" term
info "Terminal Font" term_font
info "Font" font
info "CPU" cpu
info "GPU" gpu
info "GPU Driver" gpu_driver
info "Memory" memory
info "Disk" disk
info "Local IP" local_ip
info "Public IP" public_ip
info "Locale" locale
info cols
}
# Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="on"
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="off"
# Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="on"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="gib"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="C"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="on"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="="
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=":"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

View file

@ -0,0 +1 @@
(enabled:false,notification_frequency:Weekly)

View file

@ -1,38 +0,0 @@
# This file moves Python's history file to $XDG_STATE_HOME/python/history
# Adapted from: https://unix.stackexchange.com/questions/630642/change-location-of-python-history
import os
import atexit
import readline
try:
import pathlib
except ImportError: # not part of python2
pass
else:
if readline.get_current_history_length() == 0:
state_home = os.environ.get("XDG_STATE_HOME")
if state_home is None:
state_home = pathlib.Path.home() / ".local" / "state"
else:
state_home = pathlib.Path(state_home)
history_path = state_home / "python" / "history"
if history_path.is_dir():
raise OSError(history_path + " cannot be a directory")
history = str(history_path)
try:
readline.read_history_file(history)
except OSError: # Non existent
pass
def write_history():
try:
readline.write_history_file(history)
except OSError:
pass
atexit.register(write_history)

View file

@ -1,11 +1,3 @@
# Shell-related Configuration # Shell-related Configs
This folder contains further files that are sourced by `bash` and `zsh`. This folder contains further files that are sourced by `bash` and `zsh`.
[init.sh](https://gitlab.webartifex.biz/alexander/dotfiles/-/blob/main/.config/shell/init.sh)
contains the common initialization logic for all shells
and
integrates the two sub-folders
[aliases.d](https://gitlab.webartifex.biz/alexander/dotfiles/-/tree/main/.config/shell/aliases.d)
and
[utils.d](https://gitlab.webartifex.biz/alexander/dotfiles/-/tree/main/.config/shell/utils.d).

View file

@ -1,7 +0,0 @@
# Shell Aliases
This folder contains various files that define aliases
to be used in the shell.
Originally, they all were defined in one big "~/.config/shell/aliases.sh" file
but are now split across many smaller files here for clarity.

View file

@ -1,59 +0,0 @@
# Make working with files more convenient
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Avoid bad mistakes and show what happens
alias cp="cp --interactive --verbose"
alias ln='ln --interactive --verbose'
alias mv='mv --interactive --verbose'
alias rm='rm -I --preserve-root --verbose'
# Faster directory switching
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
# Convenient defaults
alias mkdir='mkdir -p'
alias md='mkdir'
alias rmdir='rmdir --parents --verbose'
alias rd='rmdir'
# Convenient grepping
alias grep='grep --color=auto --exclude-dir={.cache,\*.egg-info,.git,.nox,.tox,.venv}'
alias egrep='egrep --color=auto --exclude-dir={.cache,\*.egg-info,.git,.nox,.tox,.venv}'
alias fgrep='fgrep --color=auto --exclude-dir={.cache,*.egg-info,.git,.nox,.tox,.venv}'
# Convenient searching
alias fdir='find . -type d -name'
alias ffile='find . -type f -name'
# Convenient listings
alias ls='ls --classify --color=auto --group-directories-first --human-readable --no-group --time-style=long-iso'
alias la='ls --almost-all'
alias lal='la -l'
alias ll='ls -l'
alias l.='ls --directory .*'
alias ll.='l. -l'
# More convenience with various other file-related utilities
alias df='df --human-readable'
alias du='du --human-readable'
alias diff='diff --color=auto --unified'
_command_exists colordiff && alias diff='colordiff --unified'
alias free='free --human --total'
alias less='less --chop-long-lines --ignore-case --LONG-PROMPT --no-init --status-column --quit-if-one-screen'
alias more='less'
alias tree='tree -C --dirsfirst'

View file

@ -1,77 +0,0 @@
# Generic shell aliases for bash and zsh
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
_in_zsh() {
[ -n "$ZSH_VERSION" ]
}
# Re-run last command with sudo privileges
if _in_zsh; then
alias ,,='sudo $(fc -ln -1)'
else
alias ,,='sudo $(history -p !!)'
fi
# Convenient piping with zsh
if _in_zsh; then
alias -g B='| bat'
alias -g F='| fzf'
alias -g G='| grep'
alias -g H='| head'
alias -g L='| less'
alias -g T='| tail'
alias -g NE='2 > /dev/null'
alias -g NUL='> /dev/null 2>&1'
fi
# (Non-)obvious synonyms
alias cls='clear'
alias help='man'
# Edit the $HISTFILE
alias HISTFILE="vi $HISTFILE"
# Various one-line utilities
alias datetime='date +"%Y-%m-%d %H:%M:%S %z (%Z)"'
alias datetime-iso='date --iso-8601=seconds'
alias dotfiles='git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME'
alias external-ip="curl https://icanhazip.com"
alias external-ip-alt="curl https://ipinfo.io/ip\?token=cfd78a97e15ebf && echo"
alias external-ip-extended-infos="curl https://ipinfo.io/json\?token=cfd78a97e15ebf && echo"
alias speedtest="curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/22210ca35228f0bbcef75a7c14587c4ecb875ab4/speedtest.py | python -"
# Fix common typos
_command_exists ifconfig && alias ipconfig='ifconfig'
_command_exists R && alias r='R'
# Use sane defaults
_command_exists exa && alias exa='exa --group-directories-first --git --time-style=long-iso'
_command_exists netstat && alias ports='netstat -tulanp'
_command_exists screenfetch && alias screenfetch='screenfetch -n'
alias uptime='uptime --pretty'
alias wget="wget --continue --hsts-file=$XDG_STATE_HOME/wget/history"
# Create shorter aliases for various utilities
_command_exists batcat && alias bat='batcat'
_command_exists fdfind && alias fd='fdfind'
_command_exists neofetch && alias nf='neofetch'
_command_exists ranger && alias rn='ranger'
_command_exists screenfetch && alias sf='screenfetch'
# Alias to align commands in ~/.config/i3/config
# Debian/Arch => dex
# Fedora => dex-autostart
_command_exists dex-autostart && alias dex='dex-autostart'

View file

@ -1,24 +0,0 @@
# All git aliases (with < 7 characters) become shell aliases with a "g" prefix
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
if _command_exists git; then
alias g='git'
for al in $(git internal-aliases); do
[ ${#al} -lt 7 ] && eval "alias g$al='git $al'"
done
# Check if a 'main' branch exists in place of a 'master' branch
git_main_branch() {
if [[ -n "$(git branch --list main)" ]]; then
echo 'main'
else
echo 'master'
fi
}
fi

View file

@ -1,25 +0,0 @@
# Make working with Python more convenient
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Interactive shells
alias py='python'
alias bpy='bpython'
alias ipy='ipython'
if _command_exists poetry; then
alias pr='poetry run'
fi
if _command_exists pyenv; then
alias pyvenvs='pyenv virtualenvs --bare --skip-aliases'
alias pyver='pyenv version'
alias pyvers='pyenv versions --skip-aliases'
alias pywhich='pyenv which'
fi

152
.config/shell/aliases.sh Normal file
View file

@ -0,0 +1,152 @@
# Shell aliases used for both bash and zsh
# Check if a command can be found on the $PATH.
command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Check if we are running from within a zsh instance.
in_zsh() {
[ -n "$ZSH_VERSION" ]
}
# Re-run last command with sudo privileges
if in_zsh; then
alias ,,='sudo $(fc -ln -1)'
else
alias ,,='sudo $(history -p !!)'
fi
# Global aliases
if in_zsh; then
alias -g F='| fzf'
alias -g G='| grep'
alias -g H='| head'
alias -g L='| less'
alias -g T='| tail'
alias -g NE='2 > /dev/null'
alias -g NUL='> /dev/null 2>&1'
fi
alias cls='clear'
alias help='man'
# Avoid bad mistakes and show what happens
alias cp="cp --interactive --verbose"
alias ln='ln --interactive --verbose'
alias mv='mv --interactive --verbose'
alias rm='rm -I --preserve-root --verbose'
# Make working with files more convenient
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias mkdir='mkdir -p'
alias md='mkdir'
alias rmdir='rmdir --parents --verbose'
alias rd='rmdir'
alias grep='grep --color=auto --exclude-dir={.cache,\*.egg-info,.git,.nox,.tox,.venv}'
alias egrep='egrep --color=auto --exclude-dir={.cache,\*.egg-info,.git,.nox,.tox,.venv}'
alias fgrep='fgrep --color=auto --exclude-dir={.cache,*.egg-info,.git,.nox,.tox,.venv}'
alias fdir='find . -type d -name'
alias ffile='find . -type f -name'
alias ls='ls --classify --color=auto --group-directories-first --human-readable --no-group --time-style=long-iso'
alias la='ls --almost-all'
alias lal='la -l'
alias ll='ls -l'
alias l.='ls --directory .*'
alias ll.='l. -l'
alias df='df --human-readable'
alias du='du --human-readable'
alias diff='diff --color=auto --unified'
command_exists colordiff && alias diff='colordiff --unified'
alias free='free --human --total'
alias less='less --chop-long-lines --ignore-case --LONG-PROMPT --no-init --status-column --quit-if-one-screen'
alias more='less'
alias tree='tree -C --dirsfirst'
# Make working with Python more convenient
alias py='python'
alias ipy='ipython'
if command_exists poetry; then
alias pr='poetry run'
fi
if command_exists pyenv; then
alias pyvenvs='pyenv virtualenvs --bare --skip-aliases'
alias pyver='pyenv version'
alias pyvers='pyenv versions --skip-aliases'
alias pywhich='pyenv which'
fi
# Aliases for various utilities
alias datetime='date +"%Y-%m-%d %H:%M:%S %z (%Z)"'
alias datetime-iso='date --iso-8601=seconds'
alias external-ip="curl https://icanhazip.com"
alias external-ip-alt="curl https://ipinfo.io/ip\?token=cfd78a97e15ebf && echo"
alias external-ip-extended-infos="curl https://ipinfo.io/json\?token=cfd78a97e15ebf && echo"
alias speedtest="curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/22210ca35228f0bbcef75a7c14587c4ecb875ab4/speedtest.py | python -"
# Fix common typos
command_exists ifconfig && alias ipconfig='ifconfig'
command_exists R && alias r='R'
# Use sane defaults
command_exists exa && alias exa='exa --group-directories-first --git --time-style=long-iso'
command_exists netstat && alias ports='netstat -tulanp'
command_exists screenfetch && alias screenfetch='screenfetch -n'
alias uptime='uptime --pretty'
alias wget='wget --continue'
# Create short aliases
command_exists batcat && alias bat='batcat'
command_exists fdfind && alias fd='fdfind'
command_exists ranger && alias rn='ranger'
command_exists screenfetch && alias sf='screenfetch'
# Integrate git
if command_exists git; then
alias g='git'
# All git aliases are shell aliases with a 'g' prefix.
for al in $(git internal-aliases); do
# Only "real" (i.e., short) aliases are created.
[ ${#al} -lt 7 ] && eval "alias g$al='git $al'"
done
# Check if a 'main' branch exists in place of a 'master' branch.
git_main_branch() {
if [[ -n "$(git branch --list main)" ]]; then
echo 'main'
else
echo 'master'
fi
}
fi
# (Un-)Encrypt vaults
alias open-documents-vault='gocryptfs -q -extpass "pass getraenkemarkt/vaults/documents" $HOME/nextcloud/vault/ $HOME/.vault/documents'
alias close-documents-vault='fusermount -q -u $HOME/.vault/documents'

View file

@ -1,49 +0,0 @@
# This file initializes the shell
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
_init_pyenv () { # used in ~/.config/shell/utils.d/python.sh as well
_command_exists pyenv || return
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
}
_init_pyenv
_in_x11 () {
_result=$(loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type --value)
if [[ $_result == "x11" ]]; then
return 0
else
return 1
fi
}
_in_wayland () {
_result=$(loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type --value)
if [[ $_result == "wayland" ]]; then
return 0
else
return 1
fi
}
# Configure the keyboard:
# - make right alt the compose key, e.g., for German Umlauts
# - make caps lock a ctrl modifier and Esc key
if _in_x11; then
setxkbmap us -option 'compose:ralt,caps:ctrl_modifier,lv3:menu_switch'
_command_exists xcape && xcape -e "Caps_Lock=Escape"
fi
# Load shell utilities and create aliases
for file in $HOME/.config/shell/{utils.d,aliases.d}/*.sh; do
source $file
done

60
.config/shell/init_dotfiles.sh Executable file
View file

@ -0,0 +1,60 @@
# This file initializes the `~/.dotfiles` bare repo
# Source it from either zsh or bash
# Check if a command can be found on the $PATH.
command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
cd $HOME
# This is only here for documentation purposes
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Remove a previous version of a `~/.dotfiles` bare repository
rm -rf "$HOME/.dotfiles" >/dev/null
git clone --bare git@git.webartifex.biz:alexander/dotfiles.git "$HOME/.dotfiles"
# Backup old dotfiles
rm -rf "$HOME/.dotfiles.bak" >/dev/null
mkdir -p $HOME/.dotfiles.bak/.config/{autostart,bat,flameshot,git,Nextcloud,pop-system-updater,psql,pypoetry,shell} && \
mkdir -p $HOME/.dotfiles.bak/.mackup && \
mkdir -p $HOME/.dotfiles.bak/.vim/{after/ftplugin,backup,swap,undo} && \
mkdir -p $HOME/.dotfiles.bak/.ssh && \
/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
xargs -I{} mv {} "$HOME/.dotfiles.bak"/{}
# Put new dotfiles in $HOME
/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME checkout --force
/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME config --local status.showUntrackedFiles no
/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME status
# Set up `zsh` only if it is available
# Note: on many servers I use these dotfiles, `zsh` is not installed
if command_exists zsh; then
# Install oh-my-zsh
export ZSH="$HOME/.oh-my-zsh"
rm -rf $ZSH >/dev/null
git clone https://github.com/ohmyzsh/ohmyzsh.git $ZSH
# Install zplug
export ZPLUG_HOME="$HOME/.zplug"
rm -rf $ZPLUG_HOME >/dev/null
git clone https://github.com/zplug/zplug $ZPLUG_HOME
# Set up all the zplug plugins (must be run interacticely
# so that `~/.zshrc` & friends are sourced again)
zsh -i -c "zplug install"
fi
echo
echo "Probably it's a good idea to restart the shell"
echo "Make sure to start bash or zsh as a login shell the next time"
echo

View file

@ -1 +1,7 @@
# This file is sourced by a login shell upon logout # This file is sourced by a login shell upon logout
# Clear the screen to increase privacy
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear ] && /usr/bin/clear || [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

View file

@ -1,7 +0,0 @@
# Shell Utilities
This folder contains various files that provide utilities
to be used in the shell.
Originally, they all were defined in one big "~/.config/shell/utils.sh" file
but are now split across many smaller files here for clarity.

View file

@ -1,66 +0,0 @@
# The utilities defined here make working with files and folders easier
# List the $PATH variable, one element per line
# (if an argument is passed, grep for it)
path() {
if [ -n "$1" ]; then
echo $PATH | perl -p -e 's/:/\n/g;' | grep -i "$1"
else
echo $PATH | perl -p -e 's/:/\n/g;'
fi
}
# Show folders by size
disk-usage() {
if [ -n "$1" ]; then
_dest="$1"
else
_dest=.
fi
\du --human-readable --max-depth=1 $_dest 2>/dev/null | sort --human-numeric-sort --reverse
}
# Search all files in a directory and its children
lsgrep() {
ls --almost-all --directory . ./**/* | uniq | grep --color=auto -i "$*"
}
# Make a directory and cd there
mcd() {
test -n "$1" || return
mkdir -p "$1" && cd "$1" || return
}
# Extract any compressed archive or file
extract() {
if [ -f "$1" ] ; then
case "$1" in
*.tar.bz2) tar xjvf "$1" ;;
*.tar.gz) tar xzvf "$1" ;;
*.tar.xz) tar xvf "$1" ;;
*.bz2) bzip2 -d "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*.Z) uncompress "$1" ;;
*.7z) 7z x "$1" ;;
*) echo "'$1' cannot be extracted automatically" ;;
esac
else
echo "'$1' is not a file"
fi
}
mktar() { # out of a directory
tar cvzf "${1%%/}.tar.gz" "${1%%/}/"
}
mkzip() { # out of a file or directory
zip -r "${1%%/}.zip" "$1"
}

View file

@ -1,80 +0,0 @@
# The utilities defined here allow to create random login credentials
# Generate random passwords that are accepted by most services
genpw() {
PARSED=$(getopt --quiet --options=acn: --longoptions=alphanum,clip,chars: -- "$@")
eval set -- "$PARSED"
SYMBOLS='--symbols'
CHARS=30
XCLIP=false
while true; do
case "$1" in
-a|--alphanum)
SYMBOLS=''
shift
;;
-c|--clip)
XCLIP=true
shift
;;
-n|--chars)
CHARS=$2
shift 2
;;
--)
shift
break
;;
*)
break
;;
esac
done
PW=$(pwgen --ambiguous --capitalize --numerals --secure $SYMBOLS --remove-chars="|/\\\"\`\'()[]{}<>^~@§$\#" $CHARS 1)
if [[ $XCLIP == true ]]; then
echo $PW | xclip -selection c
else
echo $PW
fi
}
alias genpw-alphanum='pwgen --ambiguous --capitalize --numerals --secure 30 1'
# Random email addresses that look like "normal" ones
genemail() {
PARSED=$(getopt --quiet --options=c --longoptions=clip -- "$@")
eval set -- "$PARSED"
XCLIP=false
while true; do
case "$1" in
-c|--clip)
XCLIP=true
shift
;;
--)
shift
break
;;
*)
break
;;
esac
done
FIRST=$(shuf -i 4-5 -n 1)
LAST=$(shuf -i 8-10 -n 1)
if _command_exists gpw; then
USER="$(gpw 1 $FIRST).$(gpw 1 $LAST)@webartifex.biz"
else
# Fallback that looks a bit less "normal"
USER="$(pwgen --no-capitalize --no-numerals --secure $FIRST 1).$(pwgen --no-capitalize --no-numerals --secure $LAST 1)@webartifex.biz"
fi
if [[ $XCLIP == true ]]; then
echo $USER | xclip -selection c
else
echo $USER
fi
}

View file

@ -1,101 +0,0 @@
# This file creates a function to install and update the Python develop environments
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
prepend-to-path () { # if not already there
if [ -d "$1" ] ; then
case :$PATH: in
*:$1:*) ;;
*) PATH=$1:$PATH ;;
esac
fi
}
# The Python versions pyenv creates (in descending order)
# Important: The first version also holds the "interactive" and "utils" environments
_py3_versions=('3.10.6' '3.9.13' '3.8.13' '3.7.13')
_py2_version='2.7.18'
# Each Python version receives its own copy of black, pipenv, and poetry
# (e.g., to avoid possible integration problems between pyenv and poetry
# Source: https://github.com/python-poetry/poetry/issues/5252#issuecomment-1055697424)
_py3_site_packages=('black' 'pipenv' 'poetry')
# The pyenv virtualenv "utils" contains some globally available tools (e.g., mackup)
_py3_utils=('leglight' 'mackup' 'youtube-dl')
# Important: this REMOVES the old ~/.pyenv installation
_install_pyenv() {
echo "(Re-)Installing pyenv"
# Ensure that pyenv is on the $PATH
# (otherwise, the pyenv installer emits warnings)
mkdir -p "$PYENV_ROOT/bin"
prepend-to-path "$PYENV_ROOT/bin"
# Remove old pyenv for clean install
rm -rf "$PYENV_ROOT" >/dev/null
# Run the official pyenv installer
curl https://pyenv.run | bash
# Make pyenv usable after this installation in the same shell session
_init_pyenv # defined in ~/.config/shell/utils.sh
}
create-or-update-python-envs() {
_command_exists pyenv || _install_pyenv
eval "$(pyenv init --path)"
# Keep a legacy Python 2.7, just in case
echo "Installing/updating Python $_py2_version"
pyenv install --skip-existing $_py2_version
pyenv rehash # needed on a first install
PYENV_VERSION=$_py2_version pip install --upgrade pip setuptools
PYENV_VERSION=$_py2_version python -c "import sys; print sys.version"
for version in ${_py3_versions[@]}; do
echo "Installing/updating Python $version"
pyenv install --skip-existing $version
pyenv rehash # needed on a first install
# Start the new environment with the latest pip and setuptools versions
PYENV_VERSION=$version pip install --upgrade pip setuptools
PYENV_VERSION=$version python -c "import sys; print(sys.version)"
# Put the specified utilities in the fresh environments or update them
for lib in ${_py3_site_packages[@]}; do
PYENV_VERSION=$version pip install --upgrade $lib
done
done
# Create a virtualenv based off the latest Python version to host global utilities
echo "Installing/updating the global Python utilities"
pyenv virtualenv $_py3_versions[1] 'utils'
pyenv rehash # needed on a first install
PYENV_VERSION='utils' pip install --upgrade pip setuptools
for util in ${_py3_utils[@]}; do
PYENV_VERSION='utils' pip install --upgrade $util
done
# Create a virtualenv based off the latest Python version for interactive usage
echo "Installing/updating the default/interactive Python environment"
pyenv virtualenv $_py3_versions[1] 'interactive'
pyenv rehash # needed on a first install
PYENV_VERSION='interactive' pip install --upgrade pip setuptools
# Install some tools to make interactive usage nicer
PYENV_VERSION='interactive' pip install --upgrade black bpython ipython
# Put all Python binaries/virtualenvs and the utilities on the $PATH
pyenv global 'interactive' $_py3_versions 'utils' $_py2_version
}

View file

@ -1,230 +0,0 @@
# This file defines the `update-machine` function that updates basically everything
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
_in_zsh() {
[ -n "$ZSH_VERSION" ]
}
_update_apt() {
_command_exists apt || return
echo 'Updating apt packages'
sudo apt update
sudo apt dist-upgrade
sudo apt autoremove
sudo apt clean
}
_update_dnf() {
_command_exists dnf || return
echo 'Updating dnf packages'
sudo dnf upgrade --refresh
sudo dnf autoremove
sudo dnf clean all
}
_remove_old_snaps() {
sudo snap list --all | awk "/disabled/{print $1, $3}" |
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
}
function _fetch_repos {
local base_dir="$1"
local has_dirs=false
if [ "$(ls -A "$base_dir")" ]; then
for dir in "$base_dir"/*; do
if [ -d "$dir" ]; then
has_dirs=true
break
fi
done
fi
if [ "$has_dirs" = true ]; then
for dir in "$base_dir"/*; do
if [ -d "$dir" ]; then
if [ -d "$dir/.git" ]; then
echo "Fetching $dir"
(cd "$dir" && git fetch --all --prune)
fi
_fetch_repos "$dir"
fi
done
fi
}
_update_repositories() {
[ -d $REPOS ] || return
echo 'Updating repositories'
cwd=$(pwd)
cd $REPOS
# Otherwise the for-loop waites for manual input
# if it cd's into a folder with a ".env" file
ZSH_DOTENV_FILE='.do_not_run_dotenv'
_fetch_repos "$REPOS"
ZSH_DOTENV_FILE='.env'
_command_exists pass && [ -d "$XDG_DATA_HOME/pass" ] && echo "Fetching $XDG_DATA_HOME/pass" && pass git pull
_update_dotfiles
cd $cwd
}
# Update the $XDG_DATA_HOME/dotfiles repository
_update_dotfiles() {
echo "Fetching $XDG_DATA_HOME/dotfiles"
# The `dotfiles` alias is defined in ~/.bashrc at the end of the
# "Shell Utilities & Aliases" section and can NOT be used here
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME stash --quiet
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME fetch --all --prune
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME pull --rebase --quiet
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME stash pop # --quiet is ignored
}
_update_zsh() {
_in_zsh || return
echo 'Updating zsh'
_update_omz_fork
_update_zplug
}
_update_omz_fork() {
_command_exists omz || return
# In a nutshell, `omz update` pulls the latest origin/master
# from the original "oh-my-zsh" repo
omz update
cwd=$(pwd)
cd $ZSH
git checkout --quiet forked # most likely already the case
# Keep our personal "oh-my-zsh" fork up-to-date
# See: https://code.webartifex.biz/alexander/oh-my-zsh
# Note: Without a proper GPG key, the rebasing is done without signing
# First, check if `gpg` exists and works in general
# as it might not be set up on some servers
if _command_exists gpg; then
gpg --list-keys > /dev/null
rv=$?
else
rv=1
fi
if [ $rv -eq 0 ] && [ $(gpg --list-keys | grep "AB5C0E319D77350FBA6CF143344EA5AB10D868E0") ]; then
git rebase --quiet master
# Only push a properly rebased and signed fork
git push --quiet fork forked --force
git push --quiet fork master
else
git -c commit.gpgsign=false rebase --quiet master
fi
cd $cwd
}
_update_zplug() {
_command_exists zplug || return
zplug update
zplug install # ensure newly added plugins in ~/.zshrc are never forgotten
zplug load
}
_update_python() {
echo 'Updating the Python tool chain'
if _command_exists pyenv; then
pyenv update
create-or-update-python-envs # defined in ~/.config/shell/utils.d/python.sh
fi
if _command_exists zsh-pip-cache-packages; then
zsh-pip-clear-cache
zsh-pip-cache-packages
fi
}
restore-gnome() {
_command_exists dconf || return
for file in $HOME/.config/gnome-settings/*.ini; do
dconf load / < $file
done
}
_fix_locations() {
# Gnome Seahorse (i.e., "Keyrings") uses ~/.pki by default but also
# detects $XDG_DATA_HOME/pki if it is there and uses it insead;
# setting this explicitly via an environment variable is not possible
if [ -d "$HOME/.pki" ]; then
if [ -d "$XDG_DATA_HOME/pki" ]; then
echo "Warning: both $HOME/.pki and $XDG_DATA_HOME/pki exist!"
else
mv "$HOME/.pki" "$XDG_DATA_HOME/pki"
fi
fi
}
run-private-scripts() { # in the Nextcloud
sudo --validate || return
echo
if [ -d "$HOME/Cloud/Getraenkemarkt/Setup/Shell" ]; then
for file in $HOME/Cloud/Getraenkemarkt/Setup/Shell/*.sh; do
source $file
done
fi
}
update-machine() {
sudo --validate || return
_update_apt
_update_dnf
_command_exists flatpak && sudo flatpak update -y && sudo flatpak uninstall --unused
_command_exists snap && sudo snap refresh && _remove_old_snaps
_update_repositories
_update_zsh
_update_python
restore-gnome
_fix_locations
run-private-scripts
sudo --reset-timestamp
}

View file

@ -1,26 +0,0 @@
# This file defines various utilities regarding "the web"
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# List all internal IPs
internal-ips() {
if _command_exists ifconfig; then
ifconfig | awk '/inet /{ gsub(/addr:/, ""); print $2 }'
else
echo 'ifconfig not installed'
fi
}
# Obtain a weather report
weather() {
if [ -n "$1" ]; then
curl "v1.wttr.in/$1"
else
curl 'v1.wttr.in'
fi
}

488
.config/shell/utils.sh Normal file
View file

@ -0,0 +1,488 @@
# This file is executed either by bash or zsh and holds all
# initializations and utility definitions used in both shells.
# Check if a command can be found on the $PATH.
command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Check if we are running from within a zsh instance.
in_zsh() {
[ -n "$ZSH_VERSION" ]
}
# Prepend a folder to $PATH if it is not already there
_prepend_to_path () {
if [ -d "$1" ] ; then
case :$PATH: in
*:$1:*) ;;
*) PATH=$1:$PATH ;;
esac
fi
}
# =========================
# Initialize some CLI tools
# =========================
# Load custom $LS_COLORS if available
if command_exists dircolors; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi
# Make less understand some binary types (e.g., PDFs)
# Source: https://github.com/wofr06/lesspipe
command_exists lesspipe && eval "$(SHELL=/bin/sh lesspipe)"
# Initialize pyenv if it is installed
if command_exists pyenv; then
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
fi
# Configure the keyboard:
# - make right alt and menu keys the compose key, e.g., for umlauts
# - make caps lock a ctrl modifier and Esc key
setxkbmap us -option 'compose:menu,compose:ralt,caps:ctrl_modifier'
command_exists xcape && xcape -e "Caps_Lock=Escape"
# ==========================
# Command not found handlers
# ==========================
# Check if an unknown command is in a local Python venv
command_not_found_handle() {
if [ -x ".venv/bin/$1" ]; then
echo 'You forgot to activate the virtualenv' 1>&2
exe=".venv/bin/$1"
shift
"$exe" "$@"
return $?
else
echo "$1: command not found" 1>&2
return 127
fi
}
# zsh uses another name for the handler
command_not_found_handler() {
command_not_found_handle "$@"
}
# ==============================
# Working with files and folders
# ==============================
# List the $PATH variable, one element per line
# If an argument is passed, grep for it
path() {
if [ -n "$1" ]; then
echo "$PATH" | perl -p -e 's/:/\n/g;' | grep -i "$1"
else
echo "$PATH" | perl -p -e 's/:/\n/g;'
fi
}
# Show folders by size.
disk_usage() {
local dest
if [ -n "$1" ]; then
dest="$1"
else
dest=.
fi
\du --human-readable --max-depth=1 $dest 2>/dev/null | sort --human-numeric-sort --reverse
}
# Search all files in a directory and its children.
lsgrep() {
ls --almost-all --directory . ./**/* | uniq | grep --color=auto -i "$*"
}
# Make a directory and cd there.
mcd() {
test -n "$1" || return
mkdir -p "$1" && cd "$1" || return
}
# Extract a compressed archive or file.
extract() {
if [ -f "$1" ] ; then
case "$1" in
*.tar.bz2) tar xjvf "$1" ;;
*.tar.gz) tar xzvf "$1" ;;
*.tar.xz) tar xvf "$1" ;;
*.bz2) bzip2 -d "$1" ;;
*.rar) unrar2dir "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip2dir "$1" ;;
*.Z) uncompress "$1" ;;
*.7z) 7z x "$1" ;;
*.ace) unace x "$1" ;;
*) echo "'$1' cannot be extracted automatically" ;;
esac
else
echo "'$1' is not a file"
fi
}
# Create a tar.gz archive from a given directory.
mktar() {
tar cvzf "${1%%/}.tar.gz" "${1%%/}/"
}
# Create a zip archive from a given file or directory.
mkzip() {
zip -r "${1%%/}.zip" "$1"
}
# =================================
# Creating random login credentials
# =================================
# Create random passwords for logins
genpw() {
PARSED=$(getopt --quiet --options=acn: --longoptions=alphanum,clip,chars: -- "$@")
eval set -- "$PARSED"
SYMBOLS='--symbols'
CHARS=30
XCLIP=false
while true; do
case "$1" in
-a|--alphanum)
SYMBOLS=''
shift
;;
-c|--clip)
XCLIP=true
shift
;;
-n|--chars)
CHARS=$2
shift 2
;;
--)
shift
break
;;
*)
echo 'Programming error'
break
;;
esac
done
PW=$(pwgen --ambiguous --capitalize --numerals --secure $SYMBOLS --remove-chars="|/\\\"\`\'()[]{}<>^~@§$\#" $CHARS 1)
if [[ $XCLIP == true ]]; then
echo $PW | xclip -selection c
else
echo $PW
fi
}
# Short password that is accepted by most services
alias genpw-alphanum='pwgen --ambiguous --capitalize --numerals --secure 30 1'
# Email addresses created with this utility look kind of "normal" but are totally random
genemail() {
PARSED=$(getopt --quiet --options=c --longoptions=clip -- "$@")
eval set -- "$PARSED"
XCLIP=false
while true; do
case "$1" in
-c|--clip)
XCLIP=true
shift
;;
--)
shift
break
;;
*)
echo 'Programming error'
break
;;
esac
done
FIRST=$(shuf -i 4-5 -n 1)
LAST=$(shuf -i 8-10 -n 1)
USER="$(gpw 1 $FIRST).$(gpw 1 $LAST)@webartifex.biz"
if [[ $XCLIP == true ]]; then
echo $USER | xclip -selection c
else
echo $USER
fi
}
# ===================================================
# Set up & maintain the Python (develop) environments
# ===================================================
# TODO: This needs to be updated regularly (or find an automated solution)
# The Python versions `pyenv` creates (in descending order)
_py3_versions=('3.10.5' '3.9.13' '3.8.13' '3.7.13')
_py2_version='2.7.18'
# Each Python environment uses its own `poetry` installation to avoid
# integration problems between `pyenv` and `poetry`
# Source: https://github.com/python-poetry/poetry/issues/5252#issuecomment-1055697424
_py3_site_packages=('poetry')
# The pyenv virtualenv "utils" contains some globally available tools (e.g., `mackup`)
_py3_utils=('mackup')
install-pyenv() {
echo -e "\nInstalling pyenv\n"
# The official installer does a bit more than the `git clone`s below
# `curl https://pyenv.run | bash`
git clone https://github.com/pyenv/pyenv.git "$HOME/.pyenv"
git clone https://github.com/pyenv/pyenv-doctor.git "$HOME/.pyenv/plugins/pyenv-doctor"
git clone https://github.com/pyenv/pyenv-update.git "$HOME/.pyenv/plugins/pyenv-update"
git clone https://github.com/pyenv/pyenv-virtualenv.git "$HOME/.pyenv/plugins/pyenv-virtualenv"
git clone https://github.com/pyenv/pyenv-which-ext.git "$HOME/.pyenv/plugins/pyenv-which-ext"
# On a first install, "$PYENV_ROOT/bin" is NOT on the $PATH
_prepend_to_path "$PYENV_ROOT/bin"
}
re-install-pyenv() {
echo -e "\nRemoving pyenv\n"
rm -rf "$HOME/.pyenv" >/dev/null
install-pyenv
}
create-or-update-python-envs() {
command_exists pyenv || install-pyenv
eval "$(pyenv init --path)"
# Keep a legacy Python 2.7, just in case
echo -e "\nInstalling/updating Python $_py2_version\n"
pyenv install --skip-existing $_py2_version
PYENV_VERSION=$_py2_version pip install --upgrade pip setuptools
PYENV_VERSION=$_py2_version python -c "import sys; print sys.version"
for version in ${_py3_versions[@]}; do
echo -e "\nInstalling/updating Python $version\n"
pyenv install --skip-existing $version
# Start the new environment with the latest `pip` and `setuptools` versions
PYENV_VERSION=$version pip install --upgrade pip setuptools
# Put the specified utilities in the fresh environments (or update them)
for lib in ${_py3_site_packages[@]}; do
PYENV_VERSION=$version pip install --upgrade $lib
done
done
# Create a virtualenv based off the latest Python version to host global utilities
echo -e "\nInstalling/updating global Python utilities\n"
pyenv virtualenv $_py3_versions[1] 'utils'
PYENV_VERSION='utils' pip install --upgrade pip setuptools
for util in ${_py3_utils[@]}; do
PYENV_VERSION='utils' pip install --upgrade $util
done
# Create a virtualenv based off the latest Python version for interactive usage
# (This virtualenv is empty and is the target of accidental `pip install`s)
echo -e "\nInstalling/updating the default/interactive Python environment\n"
pyenv virtualenv $_py3_versions[1] 'interactive'
PYENV_VERSION='interactive' pip install --upgrade pip setuptools
# Put all Python binaries and the utilities on the $PATH
pyenv global 'interactive' $_py3_versions 'utils' $_py2_version
}
# =============================
# Automate the update machinery
# =============================
# Pull down latest version of dot files
update-dotfiles() {
echo -e '\nUpdating dotfiles\n'
# The `dotfiles` alias is defined in ~/.bashrc at the end of the "Shell Utilities & Aliases" section
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME stash
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME fetch --all --prune
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME pull --rebase
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME stash pop
}
# Run entire aptitude upgrade cycle (incl. removal of old packages).
update-apt() {
echo -e '\nUpdating apt packages\n'
sudo apt update
echo
sudo apt upgrade
echo
sudo apt autoremove
echo
sudo apt autoclean
}
remove-old-snaps() {
sudo snap list --all | awk "/disabled/{print $1, $3}" |
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
}
# Update all repositories in ~/repos without the ones related to zsh/zplug
update-repositories() {
echo -e '\nUpdating repositories unrelated to zsh/zplug\n'
local cwd
cwd=$(pwd)
cd "$REPOS"
for dir in */; do
[ "$dir" = "zsh/" ] && continue
echo "$REPOS/$dir"
cd "$REPOS/$dir"
git stash
git fetch --all --prune
git pull --rebase
git stash pop
echo
done
cd "$cwd"
}
# Update everything related to zsh
update-zsh() {
echo -e '\nUpdating zsh/zplug related repositories\n'
if in_zsh; then
omz update
zplug update
zplug install
zplug load
else
local cwd
cwd=$(pwd)
# Pull down latest versions manually.
for dir in $HOME/.zplug/repos/*/*/; do
echo "$dir" && cd "$dir"
git fetch --all --prune
git pull --rebase
done
echo "$HOME/.oh-my-zsh" && cd "$HOME/.oh-my-zsh"
git fetch --all --prune
git pull --rebase
cd "$cwd"
fi
}
# Update the entire Python tool chain
update-python() {
echo -e '\nUpdating the Python tool chain\n'
if command_exists pyenv; then
echo -e '\nUpdating pyenv\n'
pyenv update
echo
echo -e '\nUpdating Python environments\n'
create-or-update-python-envs
echo
fi
if command_exists zsh-pip-cache-packages; then
echo -e '\nUpdating pip packages cache\n'
zsh-pip-clear-cache
zsh-pip-cache-packages
fi
}
# Wrapper to run several update functions at once
update-machine() {
sudo --validate || return
update-apt
if command_exists flatpak; then
echo -e '\nUpdating flatpaks\n'
sudo flatpak update -y
fi
if command_exists snap; then
echo -e '\nUpdating snaps\n'
sudo snap refresh
remove-old-snaps
fi
update-python
update-dotfiles
update-zsh
echo -e '\nUpdating the configs managed by mackup'
mackup restore --force
echo -e '\nUpdating password store\n'
pass git pull
echo
sudo updatedb -U /
echo
sudo --reset-timestamp
}
# =======================
# Various other Utilities
# =======================
# List all internal IPs.
internal-ips() {
if command_exists ifconfig; then
ifconfig | awk '/inet /{ gsub(/addr:/, ""); print $2 }'
else
echo 'ifconfig not installed'
fi
}
# Obtain a weather report
weather() {
if [ -n "$1" ]; then
curl "v1.wttr.in/$1"
else
curl 'v1.wttr.in'
fi
}

View file

@ -1,8 +1,10 @@
XDG_DESKTOP_DIR="$HOME/Desktop" # Configure the XDG user directories to integrate Nextcloud
XDG_DOCUMENTS_DIR="$HOME/Cloud"
XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_DESKTOP_DIR="$HOME/desktop"
XDG_MUSIC_DIR="$HOME/Cloud/Gallery/Music" XDG_DOCUMENTS_DIR="$HOME/nextcloud"
XDG_PICTURES_DIR="$HOME/Cloud/Gallery" XDG_DOWNLOAD_DIR="$HOME/downloads"
XDG_PUBLICSHARE_DIR="$HOME/Cloud/Shared/Public" XDG_MUSIC_DIR="$HOME/nextcloud"
XDG_TEMPLATES_DIR="$HOME/Cloud/Templates" XDG_PICTURES_DIR="$HOME/nextcloud/photos"
XDG_VIDEOS_DIR="$HOME/Cloud/Gallery/Videos" XDG_PUBLICSHARE_DIR="$HOME/nextcloud/shares"
XDG_TEMPLATES_DIR="$HOME/nextcloud/templates"
XDG_VIDEOS_DIR="$HOME/nextcloud/photos"

View file

@ -1,5 +0,0 @@
# Executed by zsh when a login shell starts
# Unify ~/.profile and ~/.zprofile conceptually
# (~/.zlogin is skipped here as it is sourced after ~/.zshrc)
source "$HOME/.profile"

View file

@ -1,40 +0,0 @@
# This file is sourced by zsh before ~/.zprofile and ~/.zshrc
# (it's kind of a zsh-only ~/.profile file)
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export ZSH="$XDG_DATA_HOME/oh-my-zsh"
export ZPLUG_HOME="$XDG_DATA_HOME/zplug"
export _Z_DATA="$XDG_DATA_HOME/z"
# Use <Up> key to auto-complete a partially typed command
# TODO: the coloring does not work when zsh-syntax-highlighting is loaded simultaniously
# Source: https://github.com/zsh-users/zsh-history-substring-search/issues/131
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=#ffffff,bg=#38761d,bold"
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=#ffffff,bg=#990000,bold"
# Notify about shorter aliases for typed commands
# Source: https://github.com/MichaelAquilina/zsh-you-should-use
export YSU_MESSAGE_POSITION="before"
export YSU_MODE="BESTMATCH"
# Suggest commands as one types
# Source: https://github.com/zsh-users/zsh-autosuggestions
export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#666666,bg=bold"
export ZSH_AUTOSUGGEST_STRATEGY=(history completion)
# Temporary files should go into ~/.cache
export ZSH_COMPDUMP="${XDG_CACHE_HOME:-$HOME/.cache}/.zcompdump-$HOST-$ZSH_VERSION"
# Automatically source ".env" files in folders
# Source: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/dotenv
export ZSH_DOTENV_FILE=".env"

View file

@ -1,190 +0,0 @@
# Executed by zsh when a (non-)login shell starts
# Ensure zsh is running interactively
[[ $- != *i* ]] && return
# Check if a command can be found on the $PATH
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# Enable Powerlevel10k instant prompt
if [ -r "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh" ]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Enable XON/XOFF software flow control
stty -ixon
# Enable colors and change prompt
autoload -Uz colors
colors
# Enable VI mode
bindkey -v
# If an entered command does not exist per se
# but is the name of a folder instead, go there
setopt AUTO_CD
# Treat "#", "~", and "^" as part of patterns for filename generation
setopt EXTENDED_GLOB
# Warn if there are no matches
setopt NO_MATCH
# Silence the shell
setopt NO_BEEP
# Report status of background jobs immediately
setopt NOTIFY
# Remove all "built-in" aliases
unalias -a
# Set these environment variables here (and not in ~/.profile)
# due to conflict/overlap with bash
# Note: This file is NOT synced by mackup as zsh destroys the symbolic link
export HISTFILE="$XDG_STATE_HOME/zsh/history"
export HISTSIZE=999999 # number of lines kept in memory
export SAVEHIST=999999 # number of lines kept in $HISTFILE
# Append to the $HISTFILE rather than overwrite it
setopt APPEND_HISTORY
setopt INC_APPEND_HISTORY
# Initialize oh-my-zsh's plugins
if [ -r "$ZSH/oh-my-zsh.sh" ]; then
plugins=(
command-not-found
dirhistory
dotenv # config in ~/.zshenv; `_update_repositories` temporarily disables this
git-escape-magic
invoke # completions for invoke
jsontools
pip # completions for pip
poetry # completions for poetry
z
)
source "$ZSH/oh-my-zsh.sh"
fi
# Initialize zplug's plugins
if [ -r "$XDG_DATA_HOME/zplug/init.zsh" ]; then
source "$XDG_DATA_HOME/zplug/init.zsh" # config in ~/.config/zsh/.zshenv
# Must use double quotes in this section
# Source: https://github.com/zplug/zplug#example
# Make zplug manage itself like a plugin
# Source: https://github.com/zplug/zplug#let-zplug-manage-zplug
zplug "zplug/zplug", hook-build:"zplug --self-manage"
zplug "MichaelAquilina/zsh-you-should-use" # config in ~/.zshenv
zplug "zsh-users/zsh-autosuggestions" # config in ~/.zshenv
zplug "zsh-users/zsh-history-substring-search" # config in ~/.zshenv; there are key bindings below
zplug "zsh-users/zsh-syntax-highlighting"
zplug "romkatv/powerlevel10k", as:theme, depth:1
zplug load
fi
# Initialize various utilities and aliases
source "$HOME/.config/shell/init.sh"
# Initialize zsh's completions
# This is already done via ~/.oh-my-zsh.sh above
# autoload -Uz compinit
# compinit -u -d "$ZSH_COMPDUMP"
# Enable match highlighting and scrolling through long lists,
# and provide a different style of menu completion
zmodload zsh/complist
# Include hidden files in tab completion
_comp_options+=(GLOB_DOTS)
# Enable arrow-key driven interface
zstyle ':completion:*' menu select
# Make compinit find new executables right away
zstyle ':completion:*' rehash true
# Enable grouping and group headers
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
# Enable completions for various tools
# invoke -> see plugins above; alternatively use
# _command_exists invoke && eval "$(invoke --print-completion-script=zsh)"
_command_exists nox && eval "$(register-python-argcomplete nox)"
# pip -> see plugins above; alternatively use
# _command_exists pip && eval "$(pip completion --zsh)"
_command_exists pipx && eval "$(register-python-argcomplete pipx)"
# poetry -> see plugins above; no alternative here
# Define key bindings
# zsh-autosuggestions plugin
bindkey "^ " autosuggest-accept
# Enable Ctrl-R
bindkey "^R" history-incremental-search-backward
# Use VI keys to navigate the completions in the menu
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
if [ -r "$XDG_DATA_HOME/zplug/init.zsh" ]; then
# history-substring-search plugin
# Source: https://github.com/zsh-users/zsh-history-substring-search#usage
# Normal mode
bindkey "$terminfo[kcuu1]" history-substring-search-up
bindkey "$terminfo[kcud1]" history-substring-search-down
# VI mode
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
fi
# Enable Powerlevel10k "full" prompt
[[ ! -f $XDG_CONFIG_HOME/zsh/.p10k.zsh ]] || source $XDG_CONFIG_HOME/zsh/.p10k.zsh

View file

@ -1,6 +1,6 @@
[alias] [alias]
# Important: ~/.config/shell/aliases.sh loads all git aliases with # Important: The accompanying ~/.bashrc file loads all git aliases with
# less than 7 characters into the shell's "namespace" with a "g" prefix # less than 7 characters into the global bash "namespace" with a "g" prefix
# Example: git add <=> git a <=> ga # Example: git add <=> git a <=> ga
a = add a = add
ap = add --patch ap = add --patch
@ -14,9 +14,7 @@ cf = cat-file
ci = commit ci = commit
cim = commit --message cim = commit --message
cl = clone cl = clone
checkout-all = "!f() { for branch in $(git branch -r | grep -v '\\->'); do git branch --track ${branch#origin/} $branch; done; git fetch --all; }; f"
co = checkout co = checkout
coa = checkout-all
cob = checkout -b cob = checkout -b
cod = checkout develop cod = checkout develop
com = checkout master com = checkout master
@ -82,7 +80,7 @@ ds = diff --color-words=. --ws-error-highlight=all --staged
# Clean the project folder with intuitive commands # Clean the project folder with intuitive commands
# Always keep the .python-version file, which is also often in ~.gitignore # Always keep the .python-version file, which is also often in ~.gitignore
clean-all = !git reset --hard && git clean-ignored && git clean-untracked clean-all = !git reset --hard && git clean-ignored && git clean-untracked
clean-ignored = "!f() { if [ -f .python-version ]; then mv .python-version .python-version.XYZ; fi; if [ -f .env ]; then mv .env .env.XYZ; fi; git clean -X -d -f "$@"; if [ -f .python-version.XYZ ]; then mv .python-version.XYZ .python-version; fi; if [ -f .env.XYZ ]; then mv .env.XYZ .env; fi }; f" clean-ignored = "!f() { if [ -f .python-version ]; then mv .python-version .python-version.tmp; fi; if [ -f .env ]; then mv .env .env.tmp; fi; git clean -X -d -f "$@"; if [ -f .python-version.tmp ]; then mv .python-version.tmp .python-version; fi; if [ -f .env.tmp ]; then mv .env.tmp .env; fi }; f"
clean-untracked = !git clean -x -d -e ".python-version" -e ".env" -f # The -e flag does not work with -X clean-untracked = !git clean -x -d -e ".python-version" -e ".env" -f # The -e flag does not work with -X
# Delete everything not reachable from a branch from the repository # Delete everything not reachable from a branch from the repository
gc-everything = "!f() { git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"; }; f" gc-everything = "!f() { git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"; }; f"
@ -108,8 +106,6 @@ grept = grep --break --context 1 --full-name --heading --ignore-case --line-
# Push current branch to origin # Push current branch to origin
push-to-origin = "!f(){ git push --set-upstream origin $(git current-branch) "$@"; }; f" push-to-origin = "!f(){ git push --set-upstream origin $(git current-branch) "$@"; }; f"
pso = "!f(){ git push --set-upstream origin $(git current-branch) "$@"; }; f" pso = "!f(){ git push --set-upstream origin $(git current-branch) "$@"; }; f"
prune-gone = "!git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}'"
prune-delete = "!git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d"
[clean] [clean]
requireforce = true requireforce = true
@ -124,7 +120,7 @@ HEAD = cyan dim bold reverse
branch = green bold branch = green bold
remoteBranch = red bold remoteBranch = red bold
stash = magenta dim bold reverse stash = magenta dim bold reverse
tag = magenta bold tag = magenta bold
[color "diff"] [color "diff"]
context = white context = white
@ -179,9 +175,6 @@ submodule = log
[help] [help]
autocorrect = 50 autocorrect = 50
[init]
defaultBranch = main
[merge] [merge]
conflictstyle = diff3 conflictstyle = diff3
ff = only ff = only

View file

@ -1,4 +1,2 @@
LICENSE.txt LICENSE.txt
R
README.md README.md
Screenshots

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 MiB

View file

@ -1,112 +0,0 @@
# This file sets up the $XDG_DATA_HOME/dotfiles, a bare git repository,
# such that they are available within a user's $HOME as common "dotfiles"
export XDG_BIN_HOME="$HOME/.local/bin" # temporarily set here; mainly set in ~/.profile
export XDG_DATA_HOME="$HOME/.local/share" # temporarily set here; mainly set in ~/.profile
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
cd $HOME
# Get the latest $XDG_DATA_HOME/dotfiles, possibly replacing the old ones
rm -rf "$XDG_DATA_HOME/dotfiles" >/dev/null
git clone --bare https://code.webartifex.biz/alexander/dotfiles.git "$XDG_DATA_HOME/dotfiles"
# Distribute the dotfiles in $HOME
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME checkout --force
git --git-dir=$XDG_DATA_HOME/dotfiles/ --work-tree=$HOME config --local status.showUntrackedFiles no
# Dirty Fix: Otherwise `gnupg` emits a warning
[ -d "$XDG_DATA_HOME/gnupg" ] && chmod 700 $XDG_DATA_HOME/gnupg
if _command_exists python3; then
# Set up a Python venv to host the scripts controlling the Elgato keylights in my office
python3 -m venv $XDG_DATA_HOME/elgato
$XDG_DATA_HOME/elgato/bin/pip list
$XDG_DATA_HOME/elgato/bin/pip install --upgrade pip setuptools
$XDG_DATA_HOME/elgato/bin/pip install leglight
fi
if _command_exists pip; then
# Ensure `pipx` is installed in the user's local environment
pip install --upgrade --user pipx
pipx install rexi
if [ -d "$HOME/Cloud/Getraenkemarkt" ]; then
# (Re-)Install `mackup` via `pipx` in the user's local environment
export PIPX_BIN_DIR=$XDG_BIN_HOME
export PIPX_HOME="$XDG_DATA_HOME/pipx"
$XDG_BIN_HOME/pipx uninstall mackup
$XDG_BIN_HOME/pipx install mackup
# Litte Hack: Make `mackup` respect the XDG directory structure
sed -in 's/VERSION = \".*\"/VERSION = \"0.999.0\"/g' $HOME/.local/**/mackup/constants.py
sed -in 's/CUSTOM_APPS_DIR = \"\.mackup\"/CUSTOM_APPS_DIR = \"\.config\/mackup\"/g' $HOME/.local/**/mackup/constants.py
sed -in 's/MACKUP_CONFIG_FILE = \"\.mackup\.cfg\"/MACKUP_CONFIG_FILE = \"\.config\/mackup\/mackup\.cfg\"/g' $HOME/.local/**/mackup/constants.py
$XDG_BIN_HOME/mackup restore
fi
fi
if _command_exists zsh; then
# Set the $ZDOTDIR in /etc[/zsh]/zshenv if that is not already done
# Notes:
# - must use $HOME as $XDG_CONFIG_HOME is not yet set
# - on Fedora, the global config files are not in /etc/zsh but in /etc
export ZDOTDIR="$HOME/.config/zsh"
for _file in '/etc/zshenv' '/etc/zsh/zshenv'; do
if [ -f $_file ]; then
grep -q -F "export ZDOTDIR" $_file || echo 'export ZDOTDIR="$HOME"/.config/zsh' | sudo tee -a $_file
fi
done
# (Re-)Install oh-my-zsh
export ZSH="$XDG_DATA_HOME/oh-my-zsh" # temporarily set here; mainly set in $XDG_CONFIG_HOME/zsh/.zshenv
rm -rf $ZSH >/dev/null
# Let's NOT use the main repository but our personal fork
git clone --origin fork --branch forked https://code.webartifex.biz/alexander/oh-my-zsh.git $ZSH
cd $ZSH
git remote add origin https://github.com/ohmyzsh/ohmyzsh.git
cd $HOME
# (Re-)Install zplug
export ZPLUG_HOME="$XDG_DATA_HOME/zplug" # temporarily set here; mainly set in $XDG_CONFIG_HOME/zsh/.zshenv
rm -rf $ZPLUG_HOME >/dev/null
git clone https://github.com/zplug/zplug $ZPLUG_HOME
# Set up all the zplug plugins (-i so that the new $XDG_CONFIG_HOME/zsh/.zshrc is sourced)
zsh -i -c "zplug install"
fi
# Warn user if ~/.local/pipx already exists
# => As we use the custom $XDG_DATA_HOME/pipx location,
# the user should NOT `pipx`'s default install location as well
if [ -d "$HOME/.local/pipx" ]; then
echo
echo "~/.local/pipx already existed!"
echo "It is recommended to delete this location in favor of $XDG_DATA_HOME/pipx"
echo
fi
echo
echo "Probably it's a good idea to restart the shell"
echo "Make sure to start bash or zsh as a login shell the next time"
echo

24
.mackup.cfg Normal file
View file

@ -0,0 +1,24 @@
[storage]
engine = file_system
path = nextcloud/getraenkemarkt
directory = mackup
[applications_to_ignore]
# Do not sync configuration files that are kept in `git`
# See: https://gitlab.webartifex.biz/alexander/dotfiles
bash
bat
git
flameshot
mackup
p10k
pgsql
poetry
ssh
vim
wget
zsh
# Somehow, libreoffice cannot start with some other machine's configuration
libreoffice

7
.mackup/README.md Normal file
View file

@ -0,0 +1,7 @@
# Custom Configuration for `mackup`
This folder contains various **config** files
to include all kinds of files in the [`mackup backup`](https://github.com/lra/mackup).
Their format is described [here](https://github.com/lra/mackup/tree/master/doc#add-support-for-an-application-or-almost-any-file-or-directory).
`mackup` is used to synchronize (dot) files the general public should *not* see.

13
.mackup/histories.cfg Normal file
View file

@ -0,0 +1,13 @@
[application]
name = various history files
[configuration_files]
.bash_history
.lesshst
.python_history
.tig_history
.zsh_history
[xdg_configuration_files]
# `~/.config/psql` is set in `~/.psqlrc` for all history files
psql

View file

@ -1,5 +1,5 @@
[application] [application]
name = Gnome Files a.k.a. Nautilus name = GNOME Files a.k.a. Nautilus
[xdg_configuration_files] [xdg_configuration_files]
gtk-3.0/bookmarks gtk-3.0/bookmarks

View file

@ -0,0 +1,7 @@
[application]
name = non-public SSH (config) files
[configuration_files]
.ssh/config
.ssh/known_hosts
.ssh/known_hosts.old

View file

@ -1,7 +1,7 @@
# Generated by Powerlevel10k configuration wizard on 2022-08-08 at 23:58 CEST. # Generated by Powerlevel10k configuration wizard on 2022-07-11 at 02:12 CEST.
# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 28996. # Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 28996.
# Wizard options: nerdfont-complete + powerline, small icons, ascii, lean, 1 line, # Wizard options: awesome-fontconfig, large icons, ascii, lean, 1 line, compact,
# compact, concise, transient_prompt, instant_prompt=verbose. # concise, transient_prompt, instant_prompt=verbose.
# Type `p10k configure` to generate another config. # Type `p10k configure` to generate another config.
# #
# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate # Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate

100
.profile
View file

@ -1,55 +1,8 @@
# Executed by a login shell (e.g., bash, sh, or zsh) during start-up # Executed by a login shell (e.g., bash or sh) during start
# Prepend a folder to $PATH if it is not already there
# Shell-independent stuff _prepend_to_path () {
# Configure the standard XDG base directories
# Further Info: https://wiki.archlinux.org/title/XDG_Base_Directory
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share" # also set temporarily in $XDG_DATA_HOME/dotfiles/setup.sh
export XDG_STATE_HOME="$HOME/.local/state" # also set temporarily in $XDG_DATA_HOME/dotfiles/setup.sh
# Make up a XDG directory for binaries (that does not exist in the standard)
export XDG_BIN_HOME="$HOME/.local/bin" # also set temporarily in $XDG_DATA_HOME/dotfiles/setup.sh
# Move common tools' config and cache files into XDG directories
export BAT_CONFIG_PATH="$XDG_CONFIG_PATH/bat/config"
export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export LESSHISTFILE="$XDG_STATE_HOME/less/history"
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass"
export PIPX_HOME="$XDG_DATA_HOME/pipx"
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
export PSQLRC="$XDG_CONFIG_HOME/psql/psqlrc"
export SSB_HOME="$XDG_DATA_HOME"/zoom
export VIMINIT="source $XDG_CONFIG_HOME/vim/vimrc"
# Generic shell configs
export EDITOR=vim
export PAGER='less --chop-long-lines --ignore-case --LONG-PROMPT --no-init --status-column --quit-if-one-screen'
export TERM=xterm-256color
export TZ='Europe/Berlin'
export VISUAL=$EDITOR
# Convenience variables for easier access of some locations
export REPOS="$HOME/Repositories"
# Python-specific configs
export PIPX_BIN_DIR=$XDG_BIN_HOME
export PYENV_ROOT="$HOME/.pyenv"
# No need for *.pyc files (and __pycache__ folders) to be within project folders
# Note: `export PYTHONDONTWRITEBYTECODE=1` would disable them entirely
export PYTHONPYCACHEPREFIX=/tmp/pycache
# Put local binaries on the $PATH
prepend-to-path () { # if not already there
if [ -d "$1" ] ; then if [ -d "$1" ] ; then
case :$PATH: in case :$PATH: in
*:$1:*) ;; *:$1:*) ;;
@ -58,30 +11,45 @@ prepend-to-path () { # if not already there
fi fi
} }
prepend-to-path "$HOME/bin" # Put some private bin directories on the $PATH
prepend-to-path "$HOME/.local/bin" _prepend_to_path "$HOME/bin"
prepend-to-path "$PYENV_ROOT/bin" _prepend_to_path "$HOME/.local/bin"
# Generic environment variables
export EDITOR=vim
export HISTFILESIZE=999999
export PAGER='less --chop-long-lines --ignore-case --LONG-PROMPT --no-init --status-column --quit-if-one-screen'
export TERM=xterm-256color
export TZ='Europe/Berlin'
export VISUAL=$EDITOR
# Machine-specific directories
export REPOS="$HOME/repos"
# Configurations for various utilities
export BAT_CONFIG_PATH="$HOME/.config/bat/config"
export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/.lesshst"
export PYENV_ROOT="$HOME/.pyenv"
_prepend_to_path "$PYENV_ROOT/bin"
# No need for *.pyc files on a dev machine
export PYTHONDONTWRITEBYTECODE=1
export PSQLRC="$HOME/.psqlrc"
# Shell-specific stuff # Shell-specific stuff
# zsh-specific stuff is automatically sourced from `~/.zshenv`, `~/.zprofile`, `~/.zlogin`, and `~/.zshrc`
# zsh-specific stuff is automatically sourced from # Source `~/.bashrc` if we are running inside a BASH shell
# $XDG_CONFIG_HOME/zsh/.zshenv, $XDG_CONFIG_HOME/zsh/.zprofile,
# $XDG_CONFIG_HOME/zsh/.zlogin, and $XDG_CONFIG_HOME/.zshrc
# Source ~/.bashrc if we are running inside a bash shell
# because it is NOT automatically sourced by bash
if [ -n "$BASH_VERSION" ]; then if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then if [ -f "$HOME/.bashrc" ]; then
# `~/.bashrc` is NOT automatically sourced by bash
source "$HOME/.bashrc" source "$HOME/.bashrc"
fi fi
fi fi
# Source ~/.profile_local, which holds machine-specific ENV variables
if [ -f "$HOME/.profile_local" ]; then
source "$HOME/.profile_local"
fi

View file

@ -1,4 +1,4 @@
-- psql executes the commands in this ~/.psqlrc creating output -- `psql` executes the commands in this `~/.psqlrc` creating output
-- (this flag hides that and is unset again at the bottom) -- (this flag hides that and is unset again at the bottom)
\set QUIET 1 \set QUIET 1
@ -20,10 +20,9 @@
-- Use the best text editor in the world -- Use the best text editor in the world
\set EDITOR vi \set EDITOR vi
-- Use separate history files per database and -- Use separate history files per database
-- keep them in one folder (for easier sync with mackup) -- and keep them in one folder for easier sync with `mackup`
-- under $XDG_STATE_HOME/psql \set HISTFILE ~/.config/psql/.psql_history- :DBNAME
\set HISTFILE ~/.local/state/psql/history- :DBNAME
-- Don't store the same SQL statement repeatedly -- Don't store the same SQL statement repeatedly
\set HISTCONTROL ignoredups \set HISTCONTROL ignoredups

View file

@ -1 +0,0 @@
SELECTED_EDITOR="/usr/bin/vim"

View file

@ -1,8 +1,6 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN0GVKtgpgzpdf7E6e2vCytDSa2zPSgZ+8fAKCOotugH alexander@webartifex.biz (getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMe2fzyH4b4AwQBRgZ60enFagogaEG2dkO4NIOKllss alexander@webartifex.biz (gateway)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMRDaWrT2hH7BOV4Zv1ctVGqwfeqkssnHklRXBmng6Wr alexander@webartifex.biz (laptop1.getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMRDaWrT2hH7BOV4Zv1ctVGqwfeqkssnHklRXBmng6Wr alexander@webartifex.biz (laptop1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhhfx063dGoaE62cbdyGL3kp1AIovWFojQGNdqUpxr8 alexander@webartifex.biz (laptop2.getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhhfx063dGoaE62cbdyGL3kp1AIovWFojQGNdqUpxr8 alexander@webartifex.biz (laptop2)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WZPkmknmo3R+DLjWrebt+X8UrHgoWwjHckbhxHVKC alexander@webartifex.biz (phone1.getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WZPkmknmo3R+DLjWrebt+X8UrHgoWwjHckbhxHVKC alexander@webartifex.biz (phone1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILNrAp79oekaV1SivIj9mVYAzaSD9FSTjEcmnOnon9eI alexander@webartifex.biz (phone2.getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbVaLHl4T+TjphPGSutYKH00Z3cNG+EmlhUfh+N/m6E alexander@webartifex.biz (tablet1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbVaLHl4T+TjphPGSutYKH00Z3cNG+EmlhUfh+N/m6E alexander@webartifex.biz (tablet1.getraenkemarkt.io) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGGNCrFt/gUbBHVqhthBuRmdDH6yS30+GGcCnARSzg+q alexander@webartifex.biz (workstation1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGGNCrFt/gUbBHVqhthBuRmdDH6yS30+GGcCnARSzg+q alexander@webartifex.biz (workstation1.getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKfaK5LUp7ghZLfl7urwQx+l+m/Vm7iksz8deGx4L5sD alexander@webartifex.biz (workstation2.getraenkemarkt.io)

View file

@ -5,9 +5,8 @@
" Use VIM improved mode " Use VIM improved mode
set nocompatible set nocompatible
" Set environment variables for convenient usage " Set environment variables for convenient usage
let $RC="$XDG_CONFIG_HOME/vim/vimrc" let $RC="$HOME/.vim/vimrc"
let $RTP=split(&runtimepath, ',')[0] let $RTP=split(&runtimepath, ',')[0]
" Disable VIM's startup message " Disable VIM's startup message
@ -40,13 +39,13 @@ set hidden
set path=.,** set path=.,**
" Store all vim-related working files in the ~/.local/state/vim folder " Store all vim-related working files in ~/.vim
set viminfo+=n$XDG_STATE_HOME/vim/viminfo set viminfo+=n~/.vim/viminfo
" Use dedicated folders to store temporary backup, swap, and undo files " Use dedicated folders to store temporary backup, swap, and undo files
" (the // means that VIM adapts names automatically to avoid duplicates) " (the // means that VIM adapts names automatically to avoid duplicates)
set backupdir=$XDG_STATE_HOME/vim/backup// set backupdir=~/.vim/backup//
set directory=$XDG_STATE_HOME/vim/swap// set directory=~/.vim/swap//
set undodir=$XDG_STATE_HOME/vim/undo// set undodir=~/.vim/undo//
" To disable any of the temporary files, uncomment one of the following " To disable any of the temporary files, uncomment one of the following
" set nobackup " set nobackup
@ -55,9 +54,6 @@ set undodir=$XDG_STATE_HOME/vim/undo//
" set noundofile " set noundofile
set runtimepath+=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$VIM,$VIMRUNTIME
" Show the filename in the terminal window's title bar " Show the filename in the terminal window's title bar
set title set title
@ -134,11 +130,6 @@ nmap Q <Nop>
cnoremap w!! w !sudo tee % >/dev/null cnoremap w!! w !sudo tee % >/dev/null
" Fix mouse issues with Alacritty terminal
" Source: https://wiki.archlinux.org/title/Alacritty#Mouse_not_working_properly_in_Vim
set ttymouse=sgr
" Enable the mouse for selections, including a toggle for this mode " Enable the mouse for selections, including a toggle for this mode
set mouse=a set mouse=a
let g:mouse_enabled=1 let g:mouse_enabled=1

5
.zprofile Normal file
View file

@ -0,0 +1,5 @@
# Executed by zsh when a login shell starts
# Mimic bash's default behavior (as an analogy) and source `~/.profile`
# (`~/.zlogin` is skipped as it comes after `~/.zshrc`)
source "$HOME/.profile"

20
.zshenv Normal file
View file

@ -0,0 +1,20 @@
# This file is sourced by zsh before `~/.zprofile` and `~/.zshrc`
# (it's kind of a zsh-only `~/.profile` file)
# TODO: As of now, this coloring does not work when zsh-syntax-highlighting is loaded simultaniously
# Source: https://github.com/zsh-users/zsh-history-substring-search/issues/131
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=#ffffff,bg=#38761d,bold"
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=#ffffff,bg=#990000,bold"
export YSU_MESSAGE_POSITION="after"
export YSU_MODE="BESTMATCH"
export ZSH="$HOME/.oh-my-zsh"
export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#666666,bg=bold"
export ZSH_AUTOSUGGEST_STRATEGY=(history completion)
export ZSH_COMPDUMP="${XDG_CACHE_HOME:-$HOME/.cache}/.zcompdump-$HOST-$ZSH_VERSION"
export ZPLUG_HOME="$HOME/.zplug"

195
.zshrc Normal file
View file

@ -0,0 +1,195 @@
# Executed by zsg when a non-login shell starts
# Ensure zsh is running interactively
[[ $- != *i* ]] && return
# Check if a command can be found on the $PATH
command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# ==================
# Base Configuration
# ==================
# Enable Powerlevel10k instant prompt
if [ -r "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh" ]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Enable colors and change prompt
autoload -Uz colors
colors
# Enable VI mode
bindkey -v
# If an entered command does not exist per se
# but is the name of a folder instead, go there.
setopt AUTO_CD
# Treat "#", "~", and "^" as part of patterns for filename generation
setopt EXTENDEDGLOB
# Warn if there are no matches
setopt NOMATCH
# Silence the shell
setopt NO_BEEP
# Report status of background jobs immediately
setopt NOTIFY
# Remove all "built-in" aliases
unalias -a
# =======
# History
# =======
# Cannot be set in `~/.profile` due to conflict with `bash` (same env variable)
export HISTFILE="$HOME/.zsh_history"
# =========================
# Shell Utilities & Aliases
# =========================
source "$HOME/.config/shell/utils.sh"
source "$HOME/.config/shell/aliases.sh"
# Defined here as it cannot be in `aliases.sh` due to a dependency with `~/.bashrc`
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# ===============
# zplug & Plugins
# ===============
source "$ZSH/oh-my-zsh.sh"
source "$HOME/.zplug/init.zsh" # config in `~/.zshenv`
# Load all zsh plugins with `zplug`
# Must use double quotes in this section
# Source: https://github.com/zplug/zplug#example
# Make zplug manage itself like a plugin
# Source: https://github.com/zplug/zplug#let-zplug-manage-zplug
zplug "zplug/zplug", hook-build:"zplug --self-manage"
zplug "MichaelAquilina/zsh-you-should-use" # config in `~/.zshenv`
zplug "zsh-users/zsh-autosuggestions" # config in `~/.zshenv`
zplug "zsh-users/zsh-history-substring-search" # config in `~/.zshenv`; there are key bindings below
zplug "zsh-users/zsh-syntax-highlighting"
zplug "plugins/command-not-found", from:oh-my-zsh
zplug "plugins/dotenv", from:oh-my-zsh
zplug "plugins/dirhistory", from:oh-my-zsh
zplug "plugins/git-escape-magic", from:oh-my-zsh
zplug "plugins/invoke", from:oh-my-zsh # completions for `invoke`
zplug "plugins/jsontools", from:oh-my-zsh
zplug "plugins/pip", from:oh-my-zsh # completions for `pip`
zplug "plugins/poetry", from:oh-my-zsh # completions for `poetry`
zplug "plugins/z", from:oh-my-zsh
zplug "romkatv/powerlevel10k", as:theme, depth:1
zplug load
# ===============
# Zsh Completions
# ===============
# Initialize zsh's completions
# NOTE: This is already done with `~/.oh-my-zsh.sh` above
# autoload -Uz compinit
# compinit -u -d "$ZSH_COMPDUMP"
# Enable match highlighting and scrolling through long lists,
# and provide a different style of menu completion
zmodload zsh/complist
# Include hidden files in tab completion
_comp_options+=(GLOB_DOTS)
# Enable arrow-key driven interface
zstyle ':completion:*' menu select
# Make compinit find new executables right away
zstyle ':completion:*' rehash true
# Enable grouping and group headers
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
# Enable completions for various tools
# invoke -> see plugins above
# command_exists invoke && eval "$(invoke --print-completion-script=zsh)"
command_exists nox && eval "$(register-python-argcomplete nox)"
# pip -> see plugins above
# command_exists pip && eval "$(pip completion --zsh)"
command_exists pipx && eval "$(register-python-argcomplete pipx)"
# poetry -> see plugins above
# ============
# Key Bindings
# ============
# zsh-autosuggestions plugin
bindkey "^ " autosuggest-accept
# Enable Ctrl-R
bindkey "^R" history-incremental-search-backward
# Use VI keys to navigate the completions in the menu
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
# history-substring-search plugin
# Source: https://github.com/zsh-users/zsh-history-substring-search#usage
# Normal mode
bindkey "$terminfo[kcuu1]" history-substring-search-up
bindkey "$terminfo[kcud1]" history-substring-search-down
# VI mode
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# =====
# Other
# =====
# Enable Powerlevel10k "full" prompt
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

View file

@ -8,43 +8,42 @@ This repository contains useful (config) files that I use on my machines.
On a freshly set up machine, run: On a freshly set up machine, run:
```bash ```bash
curl https://code.webartifex.biz/alexander/dotfiles/-/raw/main/.local/share/dotfiles/setup.sh \ curl https://gitlab.webartifex.biz/alexander/dotfiles/-/raw/main/.config/shell/init_dotfiles.sh \
> ./setup.sh && source ./setup.sh && rm ./setup.sh > /tmp/init_dotfiles.sh \
&& source /tmp/init_dotfiles.sh \
&& rm /tmp/init_dotfiles.sh
``` ```
This gives you a local copy of the latest version of this repository This gives you a local copy of the latest version of this repository
(located in `$XDG_DATA_HOME/dotfiles`) (located in `~/.dotfiles`)
and initializes all the dotfiles provided here on the system. and initializes all the dotfiles provided here on your system.
Further, `zsh` is set up Furthermore, `zsh` is set up with [`oh-my-zsh`](https://ohmyz.sh/) and `zplug`.
with [`oh-my-zsh`](https://ohmyz.sh/) and [`zplug`](https://github.com/zplug/zplug)
if it is installed.
**Note**: Log out and in again so that `bash` and `zsh` run as *login* shells. **Note**: Log out and in again so that `bash` and `zsh` run as *login* shells.
Otherwise, `~/.profile` is probably *not* sourced. Otherwise, `~/.profile` is probably *not* sourced.
**Important**: Don't forget to back up your current dotfiles! Don't worry: Your current dotfiles are backed up in the `~/.dotfiles.bak` folder!
### Python Development Environments ### Python Development Environments
The develop environments for Python are managed via [`pyenv`](https://github.com/pyenv/pyenv). The develop environments for Python are managed by [`pyenv`](https://github.com/pyenv/pyenv).
To set them up, run: To set them up, run:
```bash ```bash
create-or-update-python-envs install-pyenv && create-or-update-python-envs
``` ```
Several Python versions are installed. Several Python binaries are installed.
Additionally, two `virtualenv`s, called "interactive" and "utils", are also created: Additionally, two `virtualenv`s, "interactive" and "utils", are also created:
- "interactive" is the default environment, and - "interactive" is the default environment with *no* libraries installed, and
- "utils" hosts globally available utilities - "utils" hosts globally available utilities.
(e.g., [youtube-dl](https://github.com/ytdl-org/youtube-dl/)).
Use `pyenv local ...` to specify a particular Python binary for a project. Use `pyenv local ...` to specify a particular Python binary for a project.
### Private Dotfiles ### Non-public Dotfiles
After setting up the Python environments (i.e., the "utils"), After setting up the Python environments (i.e., the "utils"),
running `mackup restore` symlinks further dotfiles into `~/`. running `mackup restore` symlinks further dotfiles into `~/`.