Compare commits

..

108 commits

Author SHA1 Message Date
1fc874a34c
Add prune aliases 2025-01-04 13:27:46 +01:00
cb0017e68a
Fix _update_repositories
The function failed if a folder at the top level was not a git repository
2024-12-29 10:47:55 +01:00
b71714856f
Add alias git checkout-all and git coa ...
... to fetch all branches from a git origin
2024-12-12 15:54:49 +01:00
4a82476f77
Adjust alacritty's config file to new version 2024-11-05 18:59:57 +01:00
99028e9278
Fix nautilus settings 2024-10-06 22:34:15 +02:00
e7be9b29d1
Set git's default branch 2024-07-18 00:21:10 +02:00
1f86901f00
Do not fail in python2.7 2024-07-04 11:19:15 +02:00
d9372bd5b5
Check if zplug is available first 2024-07-03 08:47:02 +02:00
16cde0d3d6
Check if omz is available first 2024-07-03 08:28:27 +02:00
9ae6cebc17
Do not clear the screen upon logout 2024-07-02 16:20:07 +02:00
a3c8f3da1c
Move __pycache__ folders to /tmp 2024-06-21 01:21:30 +02:00
bf05a40200
Run xcape only within X11 2024-06-07 12:46:02 +02:00
996081a247
Fix old names 2024-06-07 12:22:21 +02:00
24fed46e0a
Re-Organize Gnome's screen 2024-06-07 12:01:10 +02:00
275957d2fd
Fix wrong location 2024-06-07 11:54:56 +02:00
335b1f2cb8
Align xkb options 2024-06-07 11:39:33 +02:00
31a993b62a
Clear screen only after confirmation 2024-06-06 19:10:46 +02:00
8ebea88538
Fix logic error 2024-06-06 19:02:07 +02:00
6a5e4624f1
Update public keys 2024-06-05 15:37:32 +02:00
0d16e539e8
Include new config parameters 2024-06-05 15:35:37 +02:00
7d4309762e
Add rexi, a CLI regex tester 2024-03-26 03:26:26 +01:00
94b017befb
Use Gnome's night light schedule 2024-03-19 20:18:19 +01:00
b06660ea8e
Integrate OBS & friends into the app folders 2024-03-19 09:47:19 +01:00
e4c66e03fe
Enable Gnome's Cafeine extension 2024-03-19 09:38:53 +01:00
c507180fb7
Add a bit of separation 2024-03-19 09:29:19 +01:00
b8fb952c2b
Enable Gnome's Just Perfection extension 2024-03-19 09:09:50 +01:00
e00f76a1b1
Re-Organize the apps drawer 2024-03-14 18:47:28 +01:00
e687278397
Hide R's user folder 2024-03-14 16:03:46 +01:00
174dfa35c0
Move automated scripts folder into the "Setup" folder 2024-03-14 15:50:56 +01:00
1cb37bd89a
Add Alphabetical App Grid extension 2024-03-14 08:25:52 +01:00
3154f8173f
Use non-Flatpak repo for Google Chrome 2024-02-27 23:59:12 +01:00
818b48bbfe
Add 'Allow Locked Remote Desktop' extension 2024-02-18 14:42:15 +01:00
074cf4d12e
Sync Remmina's config 2024-02-16 15:05:26 +01:00
5e2209ed8b
Sync Remmina's remote clients 2024-02-16 01:05:19 +01:00
b64b7ac6cb
Rename the $XDG_DOCUMENTS_DIR folder 2024-02-15 23:19:09 +01:00
67c6eba5bd
Rename the $REPOS folder 2024-02-15 23:11:26 +01:00
f5edfd09cd
Use more traditional user folder names 2024-01-17 23:11:30 +01:00
93677129bd
Fix to really use right alt key 2024-01-16 22:29:42 +01:00
e75062dcf1
Verify pass' data folder exists 2024-01-13 13:26:53 +01:00
c4e16151b4
Migrate alacritty's config file 2024-01-11 03:53:16 +01:00
bb200dd055
Add new Nextcloud settings 2023-12-06 00:25:04 +01:00
ef9e8e5859
Fix to use right alt key 2023-12-06 00:23:38 +01:00
4fcf35e8f5
Add alias to edit the $HISTFILE 2023-11-30 13:38:34 +01:00
1b25f8efc9
Make Gnome's color scheme light by default 2023-11-30 11:46:42 +01:00
1c2057ef76
Reorganize Gnome's Shell Extensions ...
... to mimic my desktop's style before Fedora 39,
while still keeping incompatible extensions disabled
2023-11-30 02:27:07 +01:00
ca260c157c
Configure the Gnome forge extension
The "forge" extension replaces the "pop-shell" one,
which is not yet ready for Gnome 45
2023-11-09 02:48:57 +01:00
48146a055d
Configure the Gnome system-monitor extension
The "system-monitor" extension replaces the "simple-system-monitor" one,
which is not yet ready for Gnome 45
2023-11-09 00:22:59 +01:00
a28e2f41d0
Disable the Gnome justperfection extension
Reason: it does not work with Gnome 45 as of this commit
2023-11-08 19:58:34 +01:00
b8af087495
Disable the Gnome openweather extension
Reason: it does not work with Gnome 45 as of this commit
2023-11-08 18:41:29 +01:00
3bd25ebc84
Temporarily disable signing ...
... if the proper GPG key is not available, e.g., on a server.
Then, it does not make sense to push the updates to the forked repo.
2023-09-13 15:46:01 +02:00
7f559fac96
Run dconf only if it exists 2023-09-13 14:19:22 +02:00
fc3db12be7
Update the ~/repos only 2023-09-13 14:11:56 +02:00
5edfc00f08
Integrate machine-specific ENV variables
~/.profile_local can now be used to define machine-specific ENV
variables and other shell initialization logic.
2023-09-13 11:52:33 +02:00
6e0c93760a
Install mackup only on clients
Non-clients do not have access to my internal cloud folders
=> check if one of them exists or not to determine client vs. server
2023-09-13 11:40:42 +02:00
62dd123226
Move code snippet to ~/data/getraenkemarkt/shell ...
... as the `sudo tee` may cause some weird troubles on some servers.

E.g., "sudo: mon_handle_sigchld: waitpid: No child processes"
2023-09-13 11:31:34 +02:00
6cc383a471
Configure the night light schedule to the longer summer times 2023-05-30 18:37:42 +02:00
54c5447bec
Add the Night Theme Switcher shell extension 2023-05-30 18:37:36 +02:00
e6d1ad261c
Add public SSH keys for new clients 2023-05-30 12:26:41 +02:00
27ea3abf12
Add config folder for MediathekView
- move MediathekView's config folder into $XDG_CONFIG_HOME
- Note: these configuration files are only used if Gnome's launcher
        is adapted to use $XDG_CONFIG_HOME/mediathek-view explicitly!
- configure MediathekView to store the downloaded media files
  in ~/downloads/mediathek-view
2023-05-15 14:52:50 +02:00
32e28ec11b
Update Gnome's notifications settings 2023-05-14 01:46:50 +02:00
3d80e0bdcc
Re-organize Gnome's workspaces 2023-05-09 11:31:55 +02:00
cfff403773
Simplify the keyboard shortcuts for media handling 2023-05-08 13:53:45 +02:00
e98a39091e
Adjust keyboard shortcuts for the Elgato Key Lights
- add keyboard shortcuts to increase/decrease the color temperature
- simplify (i.e., unify) all the shortcuts to only come in one variant
2023-05-08 13:47:22 +02:00
1cbb8baa91
Make restore-gnome a public utility
Until now, `_restore_gnome` was only triggered during `update-machine`.
Yet, sometimes I use this function manually, for example, whenever
I play around with Gnome's settings and extensions.
2023-05-08 12:16:38 +02:00
a056361112
Add utility to fix some locations
- some locations are automatically created by some programs and need
  to be "fixed" from time to time
- Example: Gnome Seahorse (i.e., the passwords and keyrings application)
  uses ~/.pki by default but switches to $XDG_DATA_HOME/pki if it exists
  => we move the location to make everything $XDG compliant
2023-05-08 12:16:37 +02:00
5d5dd9d0bc
Steamline the keyboard shortcuts
- beautify the file:
  + group and re-order the keys in a logical way
  + put some spaces between the sections
- adjust the keyboard shortcuts a bit
2023-05-05 01:56:12 +02:00
9a0514251a
Put more spaces between sections 2023-05-05 01:44:18 +02:00
ac4bad32f5
Adjust the way private scripts are run
- the exact scripts that are run by `run-private-scripts`
  is not disclosed here
- the private scripts were adjusted so that they can be run
  as often as desired and always result in the same idempotent
  result
- consequently, the private scripts are now always triggered
  by `update-machine` as well
2023-05-04 22:14:35 +02:00
f3f2417442
Update control scripts for Elgato keylights
- in my main office, I have two Elgato keylights placed on my desk
  and the Python scripts in this commit allow me to control the lights
  with Gnome keyboard shortcuts
- add an installation scripts that sets up a Python venv to run
  the above scripts
2023-05-04 02:17:32 +02:00
dedd6fdd64
Disable the keyboard shortcut for Pop Shell's launcher 2023-05-04 01:38:16 +02:00
617e493187
Add keyboard shortcut for Spotify 2023-05-04 01:37:25 +02:00
3c17c92665
Hide ~/Screenshots
Gnome's default screenshot apps unfortunately hardcodes the location
for the screenshots with ~/Screenshots => on my machines, I symlink
this location to the actual screenshots folder in my cloud and, thus,
I do not want to see ~/Screenshots all the time
2023-05-02 12:37:04 +02:00
1691ddf1fa
Update Gnome Shell Extensions' settings
After switching to the latest Fedora 38 with Gnome 44, some new
shell extensions are added and old ones removed
2023-05-02 12:37:01 +02:00
c4b6ed747f
Add utilities to check if X11 or Wayland is running 2023-05-01 02:22:44 +02:00
3f0f0815e1
Make VIM the default editor 2023-05-01 02:22:43 +02:00
1cccb7df0e
Move mackup's config to $XDG_CONFIG_HOME/mackup
- move all of mackup's config files into $XDG_CONFIG_HOME/mackup:
  + ~/.mackup.cfg => configs for mackup itself
  + ~/.mackup/*.cfg => custom sync rules applied by mackup
- add automatic installation of `pipx` and `mackup` during the
  setup of the dotfiles
  + `pipx`'s config is moved into $XDG_CONFIG_HOME
  + `mackup`s config locations are adapted via a "little hack"
2023-05-01 02:22:43 +02:00
f76b32b790
Move $XDG_CONFIG_HOME/shell/init_dotfiles to $XDG_DATA_HOME/dotfiles/setup.sh 2023-05-01 02:22:43 +02:00
71baf34d58
Move ~/.dotfiles to $XDG_DATA_HOME/dotfiles 2023-05-01 02:22:42 +02:00
13b8724696
Move everything possible into XDG directories
With the help of xdg-ninja (https://github.com/b3nj5m1n/xdg-ninja)
we move all kinds of config/cache files into the XDG directories
2023-05-01 02:22:39 +02:00
7ceed45a28
Ignore LibreOffice's lock files 2023-03-07 00:59:11 +01:00
560627cee2
Remove unused flat packages 2023-02-19 13:01:01 +01:00
fc19761aac
User <Super>1-10 to switch workspaces ...
... instead of launching "favorite" apps
2023-01-30 04:26:23 +01:00
d1b4d6c8dc
Prevent zsh from destroying mackup's symlink 2023-01-24 14:43:43 +01:00
f08c01d886
Incorporate changes from Pop OS 22.04 install 2023-01-24 01:21:32 +01:00
ba28762983
Add alias for dex-autostart 2022-08-20 00:15:08 +02:00
fa88332c58
Fix bad syntax 2022-08-20 00:14:22 +02:00
cd7180e6c0
Add a wallpaper 2022-08-18 23:26:48 +02:00
137ebf29a9
Configure alacritty
- add config file ~/.config/alacritty/alacritty.yml
  (not synced by mackup)
- make Gnome's <Super>t shortcut start a new alacritty instance
- fix minor mouse issue interacting with vim
2022-08-14 17:38:43 +02:00
a8f8caccc0
Re-organize the shells' initialization logic
- unify ~/.config/shell/aliases.sh and ~/.config/shell/utils.sh
  into a common ~/.config/shell/init.sh
- split the contents of ~/.config/shell/aliases.sh
  into the folder ~/.config/shell/aliases.d
- split the contents of ~/.config/shell/utils.sh
  into the folder ~/.config/shell/utils.d
2022-08-14 17:38:43 +02:00
8aad11aed1
Configure bat, the nicer cat 2022-08-14 17:38:43 +02:00
337bebbb0c
Add keyboard shortcuts for Elgato key lights
- create Gnome keyboard shortcuts to manage the Elgato key lights:
  + toggle
  + increase and decrease brightness
- we use Python scripts in ~/.config/gnome-settings/elgato
  based on the "leglight" PIP package
  (Source: https://gitlab.com/obviate.io/pyleglight)
2022-08-14 17:38:42 +02:00
9bc310ff9f
Configure Gnome
- add ~/.config/gnome-settings/*.ini
  => static files with a commented export of Gnome settings
- re-load these configs with `update-machine`
2022-08-14 17:38:40 +02:00
b3322f6a44
Configure mackup
- ignore apps whose config files are in the dotfiles repo already
  (see: https://gitlab.webartifex.biz/alexander/dotfiles)
- ignore ~/.password-store as it contains symlinks
- sync various (config) files that are not be public:
  + Cisco's AnyConnect
  + history files for bash, less, python, psql, tig, and zsh
  + Gnome Nautilus' bookmarks
  + SSH config
2022-08-11 22:25:23 +02:00
06f19f78dc
Configure neofetch 2022-08-11 22:25:23 +02:00
5fbdcad471
Hide temp files typical for Linux from git 2022-08-11 22:25:23 +02:00
e5be9b6647
Hide generic temp files from git 2022-08-11 22:25:23 +02:00
1b7365a7eb
Hide LibreOffice's lock files from git 2022-08-11 22:25:23 +02:00
0319e614b8
Configure Python develop tool chain
- use pyenv to manage the develop environments
  + install several Python versions (3.7 - 3.10 and 2.7)
  + each version receives its own copies of black, pipenv, and poetry
- add two more virtual environments based off the latest version:
  + "interactive" => default environment optimized for interactive
                     usage with with black, bpython, and ipython
                     (also receives accidental `pip install`s)
  + "utils" => hosts various globally available tools/apps
               (e.g., mackup and youtube-dl)
- add installation and update scripts for the entire tool chain
- set up completions for bash and zsh
- set up convenient aliases
- configure bpython
- configure poetry
2022-08-11 22:25:20 +02:00
1646011389
Add public SSH keys 2022-08-11 22:24:36 +02:00
270453dbe0
Configure psql 2022-08-11 22:24:36 +02:00
4bad81c4dd
Configure vim 2022-08-11 22:24:35 +02:00
6b022d29e3
Configure Nextcloud
- some keys in ~/.config/Nextcloud/nextcloud.cfg are set by
  the machine automatically when in use
- integrate Nextcloud in XDG user directories
- make Nextcloud run on login in Gnome
- add `run-private-scripts` utility to run shell scripts
  stored in the Nextcloud
2022-08-11 22:23:46 +02:00
3786f0d099
Configure flameshot 2022-08-11 21:48:37 +02:00
a3ed4fbca6
Add installation script
- ~/.config/shell/init_dofiles.sh "installs" the provided dotfiles
  when sourced in an interactive shell
- see the README.md for instructions
2022-08-11 21:48:34 +02:00
c5ce823188
Configure git 2022-08-11 21:22:52 +02:00
8dbb94f75a
Configure zsh 2022-08-11 21:22:50 +02:00
47c92124e5
Configure bash 2022-08-11 21:21:47 +02:00
6494664a60
Hide LICENSE.txt and README.md in Gnome Nautilus 2022-08-09 14:13:46 +02:00
93 changed files with 4008 additions and 1189 deletions

View file

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

View file

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

View file

@ -1,8 +1,10 @@
# Executed by bash when a login shell starts
# Mimic bash's default behavior and source `~/.bash_login` next
# Mimic bash's default behavior explicitly
if [ -f "$HOME/.bash_login" ]; then
source "$HOME/.bash_login"
else
elif [ -f "$HOME/.profile" ]; then
source "$HOME/.profile"
else
source "$HOME/.bashrc"
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
@ -6,23 +6,18 @@
# Check if a command can be found on the $PATH
command_exists() {
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# ==================
# Base Configuration
# ==================
# Disable Ctrl-S and Ctrl-Q
# Enable XON/XOFF software flow control
stty -ixon
# Report status of background jobs immediately
set -o notify
# Show # of running jobs when exiting a shell
# Show number of running jobs when exiting a shell
shopt -s checkjobs
# Just type the directory to cd into it
@ -43,10 +38,16 @@ shopt -s checkwinsize
# =======
# History
# =======
# Set these environment variables here (and not in ~/.profile)
# due to conflict/overlap with zsh
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
shopt -s cmdhist
@ -57,25 +58,31 @@ shopt -s histreedit
# Store multi-line commands in history without semicolons
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
# (this mimics zsh's default behavior)
export HISTCONTROL=ignoreboth
# Initialize various utilities and aliases
source "$HOME/.config/shell/init.sh"
# =========================
# Shell Utilities & Aliases
# =========================
source "$HOME/.config/shell/utils.sh"
source "$HOME/.config/shell/aliases.sh"
# 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)"
# 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
_alias_completion() {
local namespace="alias_completion"
@ -136,68 +143,26 @@ _alias_completion() {
source "$tmp_file" && \rm -f "$tmp_file"
}; _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
_debian_chroot=$(cat /etc/debian_chroot)
fi
# Mimic PowerLevel10k's git prompt (only rough approximation)
_prompt_git() {
_prompt_git() { # Show a git repo's state
local out ref uncommited unstaged untracked ahead behind
# 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" == "" ] && return
# Check if the current HEAD is detached or reachable by a ref
echo -en "\033[0;37m "
printf "\033[0;37m "
if [ "$ref" == "HEAD" ]; then
ref=$(git rev-parse --short HEAD)
echo -en "@"
printf "@"
fi
echo -en "\033[0;32m$ref\033[0m"
printf "\033[0;32m$ref\033[0m"
# Indicate if local is ahead and/or behind upstream
ahead=0
behind=0
@ -214,35 +179,33 @@ _prompt_git() {
done
if [ $ahead -gt 0 ] && [ $behind -gt 0 ]; then
echo -en "\033[0;32m <>\033[0m"
printf "\033[0;32m <>\033[0m"
elif [ $ahead -gt 0 ]; then
echo -en "\033[0;32m >\033[0m"
printf "\033[0;32m >\033[0m"
elif [ $behind -gt 0 ]; then
echo -en "\033[0;32m <\033[0m"
printf "\033[0;32m <\033[0m"
fi
)
# Indicate stashed files with a *
[ "$(git stash list 2> /dev/null)" != "" ] && echo -en "\033[0;32m *\033[0m"
[ "$(git stash list 2> /dev/null)" != "" ] && printf "\033[0;32m *\033[0m"
# Indicate uncommited/staged with a +
git diff-index --cached --exit-code --quiet HEAD -- 2> /dev/null
[ $? -gt 0 ] && echo -en "\033[0;33m +\033[0m"
[ $? -gt 0 ] && printf "\033[0;33m +\033[0m"
# Indicate unstaged with a !
git diff-files --exit-code --quiet 2> /dev/null
[ $? -gt 0 ] && echo -en "\033[0;33m !\033[0m"
[ $? -gt 0 ] && printf "\033[0;33m !\033[0m"
# Indicate untracked files with a ?
if [ "$(git ls-files --exclude-standard --others 2> /dev/null)" != "" ]; then
echo -en "\033[0;34m ?\033[0m"
printf "\033[0;34m ?\033[0m"
fi
}
# Mimic zsh's "%" symbol indicating background jobs
_prompt_jobs() {
_prompt_jobs() { # Indicate running background jobs with a"%"
local running
(( $(jobs -rp | wc -l) )) && echo -e "\033[0;32m %\033[0m"
(( $(jobs -rp | wc -l) )) && printf "\033[0;32m %\033[0m"
}
# Mimic zsh's pyenv/venv integration
_prompt_pyenv() {
_prompt_pyenv() { # Mimic zsh's pyenv/venv integration
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"
elif [ -n "$PYENV_VERSION" ]; then

View file

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

View file

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

View file

@ -0,0 +1,56 @@
[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,5 +2,6 @@
--style="numbers,changes,header"
--map-syntax ".flake8:ini"
--map-syntax "poetry.lock:toml"
--map-syntax ".bash_history:Bourne Again Shell (bash)"
--map-syntax ".flake8:INI"
--map-syntax "poetry.lock:TOML"

7
.config/bpython/config Normal file
View file

@ -0,0 +1,7 @@
[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
filenamePattern=%F_%H-%M-%S
saveAsFileExtension=png
savePath=/home/alexander/nextcloud/uploads/screenshots
savePath=/home/alexander/data/uploads/screenshots
showHelp=false
startupLaunch=false
uiColor=#ff3a00

View file

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

View file

@ -1,6 +1,6 @@
[alias]
# Important: The accompanying ~/.bashrc file loads all git aliases with
# less than 7 characters into the global bash "namespace" with a "g" prefix
# Important: ~/.config/shell/aliases.sh loads all git aliases with
# less than 7 characters into the shell's "namespace" with a "g" prefix
# Example: git add <=> git a <=> ga
a = add
ap = add --patch
@ -14,7 +14,9 @@ cf = cat-file
ci = commit
cim = commit --message
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
coa = checkout-all
cob = checkout -b
cod = checkout develop
com = checkout master
@ -80,7 +82,7 @@ ds = diff --color-words=. --ws-error-highlight=all --staged
# Clean the project folder with intuitive commands
# Always keep the .python-version file, which is also often in ~.gitignore
clean-all = !git reset --hard && git clean-ignored && git clean-untracked
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-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-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
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"
@ -106,6 +108,8 @@ grept = grep --break --context 1 --full-name --heading --ignore-case --line-
# Push current branch to origin
push-to-origin = "!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]
requireforce = true
@ -120,7 +124,7 @@ HEAD = cyan dim bold reverse
branch = green bold
remoteBranch = red bold
stash = magenta dim bold reverse
tag = magenta bold
tag = magenta bold
[color "diff"]
context = white
@ -175,6 +179,9 @@ submodule = log
[help]
autocorrect = 50
[init]
defaultBranch = main
[merge]
conflictstyle = diff3
ff = only

View file

@ -1,4 +1,49 @@
# Vim
# 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
#
*~
.*.swp
.env
# 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
# 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
tags
# Persistent undo
[._]*.un~

View file

@ -0,0 +1,7 @@
# 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

@ -0,0 +1,53 @@
[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

@ -0,0 +1,144 @@
# 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

@ -0,0 +1,5 @@
# 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

@ -0,0 +1,12 @@
#!/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

@ -0,0 +1,12 @@
#!/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

@ -0,0 +1,12 @@
#!/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

@ -0,0 +1,12 @@
#!/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

@ -0,0 +1,21 @@
#!/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

@ -0,0 +1,318 @@
# 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

@ -0,0 +1,199 @@
[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

@ -0,0 +1,298 @@
[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

@ -0,0 +1,31 @@
[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

@ -0,0 +1,263 @@
[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

16
.config/mackup/README.md Normal file
View file

@ -0,0 +1,16 @@
# 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.

5
.config/mackup/gnupg.cfg Normal file
View file

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

View file

@ -0,0 +1,14 @@
[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

35
.config/mackup/mackup.cfg Normal file
View file

@ -0,0 +1,35 @@
[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,5 +1,5 @@
[application]
name = GNOME Files a.k.a. Nautilus
name = Gnome Files a.k.a. Nautilus
[xdg_configuration_files]
gtk-3.0/bookmarks

View file

@ -0,0 +1,8 @@
[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

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

View file

@ -0,0 +1,12 @@
# 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

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

View file

@ -0,0 +1,153 @@
<?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

@ -0,0 +1,859 @@
# 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

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

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)
\set QUIET 1
@ -20,9 +20,10 @@
-- Use the best text editor in the world
\set EDITOR vi
-- Use separate history files per database
-- and keep them in one folder for easier sync with `mackup`
\set HISTFILE ~/.config/psql/.psql_history- :DBNAME
-- Use separate history files per database and
-- keep them in one folder (for easier sync with mackup)
-- under $XDG_STATE_HOME/psql
\set HISTFILE ~/.local/state/psql/history- :DBNAME
-- Don't store the same SQL statement repeatedly
\set HISTCONTROL ignoredups

38
.config/python/pythonrc Normal file
View file

@ -0,0 +1,38 @@
# 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,3 +1,11 @@
# Shell-related Configs
# Shell-related Configuration
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

@ -0,0 +1,7 @@
# 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

@ -0,0 +1,59 @@
# 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

@ -0,0 +1,77 @@
# 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

@ -0,0 +1,24 @@
# 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

@ -0,0 +1,25 @@
# 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

View file

@ -1,152 +0,0 @@
# 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'

49
.config/shell/init.sh Normal file
View file

@ -0,0 +1,49 @@
# 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

View file

@ -1,60 +0,0 @@
# 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,7 +1 @@
# 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

@ -0,0 +1,7 @@
# 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

@ -0,0 +1,66 @@
# 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

@ -0,0 +1,80 @@
# 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

@ -0,0 +1,101 @@
# 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

@ -0,0 +1,230 @@
# 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

@ -0,0 +1,26 @@
# 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
}

View file

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

View file

@ -5,8 +5,9 @@
" Use VIM improved mode
set nocompatible
" Set environment variables for convenient usage
let $RC="$HOME/.vim/vimrc"
let $RC="$XDG_CONFIG_HOME/vim/vimrc"
let $RTP=split(&runtimepath, ',')[0]
" Disable VIM's startup message
@ -39,13 +40,13 @@ set hidden
set path=.,**
" Store all vim-related working files in ~/.vim
set viminfo+=n~/.vim/viminfo
" Store all vim-related working files in the ~/.local/state/vim folder
set viminfo+=n$XDG_STATE_HOME/vim/viminfo
" Use dedicated folders to store temporary backup, swap, and undo files
" (the // means that VIM adapts names automatically to avoid duplicates)
set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//
set backupdir=$XDG_STATE_HOME/vim/backup//
set directory=$XDG_STATE_HOME/vim/swap//
set undodir=$XDG_STATE_HOME/vim/undo//
" To disable any of the temporary files, uncomment one of the following
" set nobackup
@ -54,6 +55,9 @@ set undodir=~/.vim/undo//
" 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
set title
@ -130,6 +134,11 @@ nmap Q <Nop>
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
set mouse=a
let g:mouse_enabled=1

View file

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

5
.config/zsh/.zprofile Normal file
View file

@ -0,0 +1,5 @@
# 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"

40
.config/zsh/.zshenv Normal file
View file

@ -0,0 +1,40 @@
# 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"

190
.config/zsh/.zshrc Normal file
View file

@ -0,0 +1,190 @@
# 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,2 +1,4 @@
LICENSE.txt
R
README.md
Screenshots

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 MiB

112
.local/share/dotfiles/setup.sh Executable file
View file

@ -0,0 +1,112 @@
# 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

View file

View file

View file

View file

View file

View file

View file

View file

View file

View file

@ -1,24 +0,0 @@
[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

View file

@ -1,7 +0,0 @@
# 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.

View file

@ -1,13 +0,0 @@
[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,7 +0,0 @@
[application]
name = non-public SSH (config) files
[configuration_files]
.ssh/config
.ssh/known_hosts
.ssh/known_hosts.old

100
.profile
View file

@ -1,8 +1,55 @@
# Executed by a login shell (e.g., bash or sh) during start
# Executed by a login shell (e.g., bash, sh, or zsh) during start-up
# Prepend a folder to $PATH if it is not already there
_prepend_to_path () {
# Shell-independent stuff
# 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
case :$PATH: in
*:$1:*) ;;
@ -11,45 +58,30 @@ _prepend_to_path () {
fi
}
# Put some private bin directories on the $PATH
_prepend_to_path "$HOME/bin"
_prepend_to_path "$HOME/.local/bin"
prepend-to-path "$HOME/bin"
prepend-to-path "$HOME/.local/bin"
prepend-to-path "$PYENV_ROOT/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
# zsh-specific stuff is automatically sourced from `~/.zshenv`, `~/.zprofile`, `~/.zlogin`, and `~/.zshrc`
# Source `~/.bashrc` if we are running inside a BASH shell
# zsh-specific stuff is automatically sourced from
# $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 [ -f "$HOME/.bashrc" ]; then
# `~/.bashrc` is NOT automatically sourced by bash
source "$HOME/.bashrc"
fi
fi
# Source ~/.profile_local, which holds machine-specific ENV variables
if [ -f "$HOME/.profile_local" ]; then
source "$HOME/.profile_local"
fi

1
.selected_editor Normal file
View file

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

View file

@ -1,6 +1,8 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMe2fzyH4b4AwQBRgZ60enFagogaEG2dkO4NIOKllss alexander@webartifex.biz (gateway)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMRDaWrT2hH7BOV4Zv1ctVGqwfeqkssnHklRXBmng6Wr alexander@webartifex.biz (laptop1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhhfx063dGoaE62cbdyGL3kp1AIovWFojQGNdqUpxr8 alexander@webartifex.biz (laptop2)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WZPkmknmo3R+DLjWrebt+X8UrHgoWwjHckbhxHVKC alexander@webartifex.biz (phone1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbVaLHl4T+TjphPGSutYKH00Z3cNG+EmlhUfh+N/m6E alexander@webartifex.biz (tablet1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGGNCrFt/gUbBHVqhthBuRmdDH6yS30+GGcCnARSzg+q alexander@webartifex.biz (workstation1)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN0GVKtgpgzpdf7E6e2vCytDSa2zPSgZ+8fAKCOotugH alexander@webartifex.biz (getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMRDaWrT2hH7BOV4Zv1ctVGqwfeqkssnHklRXBmng6Wr alexander@webartifex.biz (laptop1.getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhhfx063dGoaE62cbdyGL3kp1AIovWFojQGNdqUpxr8 alexander@webartifex.biz (laptop2.getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WZPkmknmo3R+DLjWrebt+X8UrHgoWwjHckbhxHVKC alexander@webartifex.biz (phone1.getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILNrAp79oekaV1SivIj9mVYAzaSD9FSTjEcmnOnon9eI alexander@webartifex.biz (phone2.getraenkemarkt.io)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbVaLHl4T+TjphPGSutYKH00Z3cNG+EmlhUfh+N/m6E alexander@webartifex.biz (tablet1.getraenkemarkt.io)
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

@ -1,5 +0,0 @@
# 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
View file

@ -1,20 +0,0 @@
# 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
View file

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