HELL COMMIT
Just get it all updated. make shelly a thing
This commit is contained in:
commit
9eb9dd90f7
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
overrides.d/bemenu
|
||||
overrides.d/Path/*.sh
|
||||
overrides.d/XDG/*.sh
|
||||
overrides.d/program_config/*.sh
|
||||
overrides.d/programs/*.sh
|
||||
overrides.d/Other/*.sh
|
||||
33
Bemenu_defaults.sh
Normal file
33
Bemenu_defaults.sh
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
###########################
|
||||
# BEMENU
|
||||
###########################
|
||||
# - bemenu is a replacement for dmenu.
|
||||
# - It does things in a similar manner however, it works on wayland
|
||||
# - It also allows you to set default settings with environment variables.
|
||||
# - I have deconstructed the variable into multiple variables that can be easier edited.
|
||||
|
||||
BEMENU_FONT='--fn "monospace Light 10"'
|
||||
BEMENU_LINE_HEIGHT='--line-height 26'
|
||||
BEMENU_NORMAL_BACKGROUND='--nb #282828'
|
||||
BEMENU_NORMAL_FOREGROUND='--nf #ebdbb2'
|
||||
BEMENU_ALT_BACKGROUND='--ab #3c3836'
|
||||
BEMENU_ALT_FOREGROUND='--af #fbf1c7'
|
||||
BEMENU_TITLE_BACKGROUND='--tb #8ec07c'
|
||||
BEMENU_TITLE_FOREGROUND='--tf #1d2021'
|
||||
BEMENU_FILTER_BACKGROUND='--fb #1d2021'
|
||||
BEMENU_FILTER_FOREGROUND='--ff #689d6a'
|
||||
BEMENU_SCROLL_BACKGROUND='--scb #1d2021'
|
||||
BEMENU_SCROLL_FOREGROUND='--scf #689d6a'
|
||||
BEMENU_HIGHLIGHT_BACKGROUND='--hb #b26282'
|
||||
BEMENU_HIGHLIGHT_FOREGROUND='--hf #ebdbb2'
|
||||
BEMENU_SELECTED_BACKGROUND='--sb #b8bb26'
|
||||
BEMENU_SELECTED_FOREGROUND='--sf #282828'
|
||||
BEMENU_BORDER_COLOR='--bdr #b16286'
|
||||
|
||||
## Construct the variable from the parts
|
||||
BEMENU_OPTS="${BEMENU_FONT} ${BEMENU_LINE_HEIGHT} ${BEMENU_NORMAL_FOREGROUND} ${BEMENU_NORMAL_BACKGROUND} ${BEMENU_ALT_FOREGROUND} ${BEMENU_ALT_BACKGROUND} ${BEMENU_TITLE_FOREGROUND} ${BEMENU_TITLE_BACKGROUND} ${BEMENU_FILTER_BACKGROUND} ${BEMENU_FILTER_FOREGROUND} ${BEMENU_SCROLL_FOREGROUND} ${BEMENU_SCROLL_BACKGROUND} ${BEMENU_HIGHLIGHT_BACKGROUND} ${BEMENU_HIGHLIGHT_FOREGROUND} ${BEMENU_SELECTED_BACKGROUND} ${BEMENU_SELECTED_FOREGROUND} ${BEMENU_BORDER_COLOR}"
|
||||
|
||||
# Unset the parts to ensure that they aren't pulled into the users environment
|
||||
unset BEMENU_FONT BEMENU_LINE_HEIGHT BEMENU_NORMAL_BACKGROUND BEMENU_NORMAL_FOREGROUND BEMENU_ALT_BACKGROUND BEMENU_ALT_FOREGROUND BEMENU_TITLE_BACKGROUND BEMENU_TITLE_FOREGROUND BEMENU_FILTER_BACKGROUND BEMENU_FILTER_FOREGROUND BEMENU_SCROLL_BACKGROUND BEMENU_SCROLL_FOREGROUND BEMENU_HIGHLIGHT_BACKGROUND BEMENU_HIGHLIGHT_FOREGROUND BEMENU_SELECTED_BACKGROUND BEMENU_SELECTED_FOREGROUND BEMENU_BORDER_COLOR
|
||||
export BEMENU_OPTS
|
||||
57
Path.sh
Normal file
57
Path.sh
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#!/bin/sh
|
||||
# This file is gonna be hell, we need to make sure that we don't duplicate
|
||||
# items on path.
|
||||
# This includes resolving symlinks at the /bin level for merged-usr systems.
|
||||
|
||||
## PATH UPDATE FUNCTION
|
||||
|
||||
updatepath() {
|
||||
front=$1
|
||||
new="$(realpath "$2" 2>/dev/null)"
|
||||
|
||||
if [ ! -d "$new" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
case ":${PATH:=$new}:" in
|
||||
*:"$new":*) ;;
|
||||
*)
|
||||
if [ "$front" -eq 1 ]; then
|
||||
PATH="$new:$PATH"
|
||||
else
|
||||
PATH="$PATH:$new"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
## Use the function to make changes to path.
|
||||
|
||||
## ensure the base path is there
|
||||
updatepath 0 '/bin'
|
||||
updatepath 0 '/sbin'
|
||||
updatepath 0 '/usr/bin'
|
||||
updatepath 0 '/usr/sbin'
|
||||
updatepath 0 '/usr/local/bin'
|
||||
updatepath 0 '/usr/local/sbin'
|
||||
updatepath 0 '/snap/bin' # Because sometimes people use snap
|
||||
|
||||
## THIS MUST BE SOURCED AFTER XDG_SHENANIGANS FOR THIS TO WORK
|
||||
updatepath 0 "$GOPATH/bin"
|
||||
updatepath 0 "$GEM_HOME/bin"
|
||||
updatepath 1 "$HOME/perl5/bin"
|
||||
updatepath 0 "$DOTNET_ROOT/bin"
|
||||
updatepath 0 "$DOTNET_ROOT/tools"
|
||||
updatepath 0 "$CARGO_HOME/bin"
|
||||
updatepath 1 "${XDG_DATA_HOME}/neovim/bin"
|
||||
updatepath 0 "$HOME/.dotnet/tools"
|
||||
|
||||
## NOW WE ADD ~/.local/bin
|
||||
## THIS IS SPECIAL SINCE IT ALLOWS FOR YOU ADD ALL SUB-DIRECTORIES TOO
|
||||
## ALSO DIRECTLY MODIFIES PATH
|
||||
if [ -d "${HOME}/.local/bin" ]; then
|
||||
Local=$(find -L "$HOME"/.local/bin -type d -not -path '*/.git*' -printf "%p:")
|
||||
PATH="${Local}${PATH}"
|
||||
fi
|
||||
|
||||
export PATH
|
||||
47
Readme.md
Normal file
47
Readme.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
# Shelly
|
||||
|
||||
A helpful tool to make managing shell environments a little easier.
|
||||
With some magic defaults and an simple mechanism for overriding them.
|
||||
|
||||
## Usage
|
||||
To just use it you set the environment variable `$SHELLY` to the directory
|
||||
that shelly is and source it. It is important to realise that shelly is
|
||||
resposible for configuring `$XDG_CONFIG_HOME` so I would recommend you only
|
||||
use `${HOME}` to reference your home directory and enter the rest of the
|
||||
path verbatim.
|
||||
|
||||
### Example
|
||||
```bash
|
||||
export SHELLY="${HOME}/.config/shelly"
|
||||
source "${SHELLY}/shelly.sh"
|
||||
```
|
||||
|
||||
## Configuration
|
||||
The git repo for shelly is configured to ignore most of what is in
|
||||
overrides.d, keeping just the directory structure.
|
||||
|
||||
Files will be loaded in the following manner:
|
||||
|
||||
First it loads the default program choices, You can inspect this file to
|
||||
see what choices I make.
|
||||
To override them you can add files to `overrides.d/programs` All files
|
||||
must have the extension `.sh` to be detected.
|
||||
|
||||
After this the XDG shenanigans are performed, again inspect the file to
|
||||
see what it does.
|
||||
Overrides go in `overrides.d/XDG`
|
||||
|
||||
Next is program_config, same rules.
|
||||
|
||||
Then Bemenu, again same rules.
|
||||
|
||||
Next is Path. Path is a little more fun, to make path somewhat
|
||||
idempotent a function called `updatepath` is defined.
|
||||
In your override files you should use this function to add to your
|
||||
path.
|
||||
The function is called like this `updatepath <TOP> <PATHENTRY>` where `TOP` should be
|
||||
either 1 or 0, 1 meaning add the new `PATHENTRY` at the front of the
|
||||
path. Otherwise it adds it to the bottom.
|
||||
The function _only_ adds a new entry to `PATH` if it isn't already
|
||||
there, this ensures that session in sessions don't get more path
|
||||
entries than they need.
|
||||
86
XDG_shenanigans.sh
Normal file
86
XDG_shenanigans.sh
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
#!/bin/sh
|
||||
###########################
|
||||
# XDG shenanigans
|
||||
###########################
|
||||
# - The XDG basedirs standard sets out where programs should put their
|
||||
# - files. Unfortunately there are programs that ignore this and just dump shit
|
||||
# - inside your home directory. This SUCKS so bad.
|
||||
# - Luckily you can actually configure a lot of those programs with Environment variables
|
||||
# - Here I do the best I can for what I have installed. (you may want to change things here)
|
||||
# - You can use the tool xdg-ninja https://github.com/b3nj5m1n/xdg-ninja to scan your home folder
|
||||
# - and find things to add here.
|
||||
|
||||
# XDG Folders.
|
||||
# - First we need to explicitly place where these folders are on our system
|
||||
# - They can go anywhere (in your home directory). but these are the standard paths.
|
||||
export XDG_CONFIG_HOME="$HOME"/.config
|
||||
export XDG_DATA_HOME="$HOME"/.local/share
|
||||
export XDG_CACHE_HOME="$HOME"/.cache
|
||||
export XDG_STATE_HOME="$HOME"/.local/state
|
||||
|
||||
# Applications
|
||||
# - This section is likely to be _VERY_ ugly looking.
|
||||
# - Generally the only comment will be saying what is being moved.
|
||||
# - I will also attempt to keep this in alphabetical order
|
||||
|
||||
# android-studio
|
||||
export ANDROID_HOME="$XDG_DATA_HOME"/android
|
||||
export ANDROID_USER_HOME="$ANDROID_HOME"
|
||||
export ANDROID_AVD_HOME="$ANDROID_HOME/avd"
|
||||
# Cabal
|
||||
export CABAL_CONFIG="$XDG_CONFIG_HOME"/cabal/config
|
||||
export CABAL_DIR="$XDG_DATA_HOME"/cabal
|
||||
# cargo
|
||||
export CARGO_HOME="$XDG_DATA_HOME"/cargo
|
||||
# Cuda cache
|
||||
export CUDA_CACHE_PATH="$XDG_CACHE_HOME"/nv
|
||||
# dotnet snap - this might be a me-only thing?
|
||||
## Provided by PORTAGE
|
||||
# export DOTNET_ROOT="$HOME/.local/opt/dotnet"
|
||||
# gem cache
|
||||
export GEM_SPEC_CACHE="${XDG_CACHE_HOME}"/gem
|
||||
# gem
|
||||
export GEM_HOME="${XDG_DATA_HOME}"/gem
|
||||
# GHCUP
|
||||
export GHCUP_USE_XDG_DIRS=1
|
||||
# GNUPG
|
||||
export GNUPGHOME="$XDG_DATA_HOME"/gnupg
|
||||
# go
|
||||
export GOPATH="$XDG_DATA_HOME"/go
|
||||
# Gradle
|
||||
export GRADLE_USER_HOME="$XDG_DATA_HOME"/gradle
|
||||
# GTK 2
|
||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
|
||||
# jupyter
|
||||
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter
|
||||
# kde
|
||||
export KDEHOME="$XDG_DATA_HOME"/kde
|
||||
# Kodi
|
||||
export KODI_DATA="$XDG_DATA_HOME"/kodi
|
||||
# Less History
|
||||
export LESSHISTFILE="$XDG_CACHE_HOME"/less/history
|
||||
# npm
|
||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
|
||||
# NuGet
|
||||
export NUGET_PACKAGES="$XDG_CACHE_HOME"/NuGetPackages
|
||||
# OPAM
|
||||
export OPAMROOT="$XDG_DATA_HOME/opam"
|
||||
# Parallel
|
||||
export PARALLEL_HOME="$XDG_CONFIG_HOME"/parallel
|
||||
# Pass
|
||||
export PASSWORD_STORE_DIR="$XDG_DATA_HOME"/pass
|
||||
# pylint
|
||||
export PYLINTHOME="${XDG_CACHE_HOME}"/pylint
|
||||
# Python history
|
||||
export PYTHONSTARTUP="${XDG_CONFIG_HOME}/python/pythonrc"
|
||||
# Rustup
|
||||
export RUSTUP_HOME="$XDG_DATA_HOME"/rustup
|
||||
# Stack
|
||||
export STACK_ROOT="$XDG_DATA_HOME"/stack
|
||||
# TERMINFO
|
||||
export TERMINFO="$XDG_DATA_HOME"/terminfo
|
||||
export TERMINFO_DIRS="$XDG_DATA_HOME"/terminfo:/usr/share/terminfo
|
||||
# wine
|
||||
export WINEPREFIX="$XDG_DATA_HOME"/wine
|
||||
# XCURSOR
|
||||
export XCURSOR_PATH=/usr/share/icons:${XDG_DATA_HOME}/icons
|
||||
0
overrides.d/.gitkeep
Normal file
0
overrides.d/.gitkeep
Normal file
0
overrides.d/Path/.gitkeep
Normal file
0
overrides.d/Path/.gitkeep
Normal file
0
overrides.d/XDG/.gitkeep
Normal file
0
overrides.d/XDG/.gitkeep
Normal file
0
overrides.d/program_config/.gitkeep
Normal file
0
overrides.d/program_config/.gitkeep
Normal file
0
overrides.d/programs/.gitkeep
Normal file
0
overrides.d/programs/.gitkeep
Normal file
5
program_config.sh
Normal file
5
program_config.sh
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
# General one line exports for some program configurations
|
||||
|
||||
export QT_QPA_PLATFORMTHEME="qt5ct"
|
||||
export MOZ_ENABLE_WAYLAND=1 # force firefox to use wayland
|
||||
31
programs.sh
Normal file
31
programs.sh
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
## Choose Default Programs
|
||||
|
||||
## These variables are used by both my own scripts and other programs
|
||||
## when deciding what program to use for certain purposes.
|
||||
## I will endeavour to provide a description for each variable
|
||||
|
||||
|
||||
EDITOR='nvim'
|
||||
# - Traditionally EDITOR is used to choose a line based file editor
|
||||
# however, since line based editors are rather uncommon I instead
|
||||
# set it to be a screen based editor.
|
||||
|
||||
VISUAL=$EDITOR
|
||||
# - VISUAL is used for screen based file editors, so named because
|
||||
# you use them to work on a whole screen of text at a time.
|
||||
# Here I set it to the value of EDITOR
|
||||
|
||||
TERMINAL='foot'
|
||||
# - TERMINAL sets the graphical terminal emulator that you want to use.
|
||||
# for the moment I use foot but you might wish to use something else
|
||||
|
||||
BROWSER='msedge'
|
||||
# - BROWSER sets what is used to handle URLs in theory you could set
|
||||
# this to a script that loads different programs based on what the URL
|
||||
# is, but most people just set it to a web browser.
|
||||
|
||||
|
||||
|
||||
|
||||
export EDITOR VISUAL TERMINAL BROWSER
|
||||
52
shelly.sh
Normal file
52
shelly.sh
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This file is only designed to load the other parts of shell.d
|
||||
|
||||
if [ -z "${SHELLY}" ]; then
|
||||
echo "\$SHELLY is not set!" >&2
|
||||
return
|
||||
fi
|
||||
|
||||
. "${SHELLY}/programs.sh"
|
||||
if [ -d "${SHELLY}/overrides.d/programs" ]; then
|
||||
for file in "${SHELLY}"/overrides.d/programs/*.sh ; do
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$file" ] && . "$file"
|
||||
done
|
||||
fi
|
||||
|
||||
. "${SHELLY}/XDG_shenanigans.sh"
|
||||
if [ -d "${SHELLY}/overrides.d/XDG" ]; then
|
||||
for file in "${SHELLY}"/overrides.d/XDG/*.sh ; do
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$file" ] && . "$file"
|
||||
done
|
||||
fi
|
||||
|
||||
. "${SHELLY}/program_config.sh"
|
||||
if [ -d "${SHELLY}/overrides.d/program_config" ]; then
|
||||
for file in "${SHELLY}"/overrides.d/program_config/*.sh ; do
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$file" ] && . "$file"
|
||||
done
|
||||
fi
|
||||
|
||||
. "${SHELLY}/Bemenu_defaults.sh"
|
||||
if [ -f "${SHELLY}/overrides.d/bemenu" ]; then
|
||||
. "${SHELLY}/overrides.d/bemenu"
|
||||
fi
|
||||
|
||||
. "${SHELLY}/Path.sh"
|
||||
if [ -d "${SHELLY}/overrides.d/Path" ]; then
|
||||
for file in "${SHELLY}"/overrides.d/Path/*.sh ; do
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$file" ] && . "$file"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -d "${SHELLY}/overrides.d/Other" ]; then
|
||||
for file in "${SHELLY}"/overrides.d/Other/*.sh ; do
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$file" ] && . "$file"
|
||||
done
|
||||
fi
|
||||
Loading…
Reference in New Issue
Block a user