checkpoint: rendering the bash_profile file (not symlinked yet)
This commit is contained in:
parent
cef88ba317
commit
9c88e62a6b
4 changed files with 209 additions and 12 deletions
52
bash/profile.gotmpl
Normal file
52
bash/profile.gotmpl
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# If not running interactively, don't do anything
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
|
# Environment section
|
||||||
|
|
||||||
|
## Session Paths - These will be added to PATH
|
||||||
|
{{- range $sessionPath := .BashProfile.SessionPaths -}}
|
||||||
|
{{- $fullPath := printf "%s/%s" (env "HOME") $sessionPath.Path -}}
|
||||||
|
{{ print "" }}
|
||||||
|
{{ print "" }}
|
||||||
|
### Add {{ $sessionPath.Description }} to PATH
|
||||||
|
if ! [[ "${PATH}" =~ {{ $fullPath }} ]]; then
|
||||||
|
export PATH={{ $fullPath}}:${PATH}
|
||||||
|
fi
|
||||||
|
{{- end -}}
|
||||||
|
{{ print "" }}
|
||||||
|
{{ print "" }}
|
||||||
|
## XDG Directories
|
||||||
|
{{ print "" }}
|
||||||
|
{{- range $key, $value := .BashProfile.XdgDirectories -}}
|
||||||
|
{{ print "" }}
|
||||||
|
export {{ $key }}="{{ $value }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{ print "" }}
|
||||||
|
{{ print "" }}
|
||||||
|
## Extra Environment variables
|
||||||
|
{{ print "" }}
|
||||||
|
{{- range $key, $value := .BashProfile.EnvironmentVariables -}}
|
||||||
|
{{ print "" }}
|
||||||
|
export {{ $key }}="{{ $value }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{ print "" }}
|
||||||
|
{{ print "" }}
|
||||||
|
# Aliases
|
||||||
|
{{ print "" }}
|
||||||
|
{{- range $key, $value := .BashProfile.Aliases -}}
|
||||||
|
{{ print "" }}
|
||||||
|
alias {{ $key }}="{{ $value }}"
|
||||||
|
{{- end -}}
|
||||||
|
{{ print "" }}
|
||||||
|
{{ print "" }}
|
||||||
|
# Prompt
|
||||||
|
|
||||||
|
# External Sources
|
||||||
|
|
||||||
|
# Commands
|
||||||
|
{{ print "" }}
|
||||||
|
{{- range $command := .BashProfile.Commands -}}
|
||||||
|
{{ print "" }}
|
||||||
|
## {{ $command.Description }}
|
||||||
|
{{ $command.Command }}
|
||||||
|
{{- end -}}
|
|
@ -1,9 +1,110 @@
|
||||||
{
|
{
|
||||||
|
"applicationConfigurations": [
|
||||||
|
"alacritty",
|
||||||
|
"amfora",
|
||||||
|
"git",
|
||||||
|
"lf",
|
||||||
|
"logrotate",
|
||||||
|
"tmux",
|
||||||
|
"user-dirs.dirs",
|
||||||
|
"user-dirs.locale",
|
||||||
|
"zk"
|
||||||
|
],
|
||||||
|
"bashProfile": {
|
||||||
|
"manage": true,
|
||||||
|
"sessionPaths": [
|
||||||
|
{
|
||||||
|
"path": ".local/goblin",
|
||||||
|
"description": "the directory of go binaries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "Applications",
|
||||||
|
"description": "the AppImage directory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".local/scripts",
|
||||||
|
"description": "the directory of custom scripts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"xdgDirectories": {
|
||||||
|
"XDG_CACHE_HOME": "${HOME}/.local/cache",
|
||||||
|
"XDG_CONFIG_HOME": "${HOME}/.local/config",
|
||||||
|
"XDG_DATA_HOME": "${HOME}/.local/share",
|
||||||
|
"XDG_STATE_HOME": "${HOME}/.local/state"
|
||||||
|
},
|
||||||
|
"environmentVariables": {
|
||||||
|
"LOG_HOME": "${XDG_STATE_HOME}/logs",
|
||||||
|
"DOCKER_CONFIG": "${XDG_CONFIG_HOME}/docker",
|
||||||
|
"GPG_TTY": "$(tty)",
|
||||||
|
"GNUPGHOME": "${XDG_DATA_HOME}/gnupg",
|
||||||
|
"GOPATH": "${XDG_DATA_HOME}/go",
|
||||||
|
"GOROOT": "${HOME}/.local/software/go",
|
||||||
|
"GOBIN": "${HOME}/.local/goblin",
|
||||||
|
"GOOS": "linux",
|
||||||
|
"GOARCH": "amd64",
|
||||||
|
"CGO_ENABLED": "0",
|
||||||
|
"MAGEFILE_CACHE": "${XDG_CACHE_HOME}/magefile",
|
||||||
|
"MAGEFILE_ENABLE_COLOR": "true",
|
||||||
|
"HISTFILE": "${XDG_STATE_HOME}/bash/history",
|
||||||
|
"HISTCONTROL": "ignoreboth",
|
||||||
|
"HISTFILESIZE": "10000",
|
||||||
|
"HISTSIZE": "1000",
|
||||||
|
"HISTTIMEFORMAT": "%d/%m/%y %T: ",
|
||||||
|
"KUBECONFIG": "${XDG_CONFIG_HOME}/kube/config",
|
||||||
|
"LESSHISTFILE": "${XDG_STATE_HOME}/less/history",
|
||||||
|
"MINIKUBE_HOME": "${XDG_DATA_HOME}/minikube",
|
||||||
|
"BROWSER": "firefox",
|
||||||
|
"EDITOR": "nvim",
|
||||||
|
"TERMINAL": "st",
|
||||||
|
"LANG": "en_GB.UTF-8",
|
||||||
|
"MANPAGER": "nvim +Man!",
|
||||||
|
"PULUMI_SKIP_UPDATE_CHECK": "true",
|
||||||
|
"PULUMI_HOME": "${XDG_DATA_HOME}/pulumi",
|
||||||
|
"RAD_HOME": "${XDG_DATA_HOME}/radicle",
|
||||||
|
"TERMINFO": "${XDG_DATA_HOME}/terminfo",
|
||||||
|
"TERMINFO_DIRS": "${TERMINFO}:/usr/share/terminfo",
|
||||||
|
"VAGRANT_HOME": "${XDG_DATA_HOME}/vagrant"
|
||||||
|
},
|
||||||
|
"aliases": {
|
||||||
|
"ls": "ls --color=auto",
|
||||||
|
"ll": "ls -laF",
|
||||||
|
"la": "ls -A",
|
||||||
|
"l": "ls -CF",
|
||||||
|
"rm": "rm -i",
|
||||||
|
"mv": "mv -i",
|
||||||
|
"cp": "cp -i",
|
||||||
|
"grep": "grep --color=auto",
|
||||||
|
"fgrep": "fgrep --color=auto",
|
||||||
|
"egrep": "egrep --color=auto",
|
||||||
|
"systemctl": "sudo systemctl",
|
||||||
|
"journalctl": "sudo journalctl",
|
||||||
|
"pwgen": "pwgen -s -c -n",
|
||||||
|
"dc": "docker-compose",
|
||||||
|
"vim": "nvim",
|
||||||
|
"view": "nvim -R",
|
||||||
|
"vimdiff": "nvim -d",
|
||||||
|
"freeflow": "enbas --config-dir ${XDG_CONFIG_HOME}/enbas/free-flow",
|
||||||
|
"g": "git",
|
||||||
|
"k": "kubectl",
|
||||||
|
"pass": "PASSWORD_STORE_DIR=${XDG_DATA_HOME}/pass pass"
|
||||||
|
},
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"command": "shopt -s histappend",
|
||||||
|
"description": "Append to the history file, don't overwrite it."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "set -o vi",
|
||||||
|
"description": "Activate vi mode."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"directories": {
|
"directories": {
|
||||||
"useDefaultDirectories": true,
|
"useDefaultDirectories": true,
|
||||||
"includeXDGDirectories": true,
|
"includeXDGDirectories": true,
|
||||||
"additionalDirectories": [
|
"additionalDirectories": [
|
||||||
".local/goblin",
|
".local/goblin",
|
||||||
|
".local/share/go",
|
||||||
".local/software",
|
".local/software",
|
||||||
"Certificates",
|
"Certificates",
|
||||||
"Docker",
|
"Docker",
|
||||||
|
@ -16,17 +117,6 @@
|
||||||
"Projects"
|
"Projects"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"applicationConfigurations": [
|
|
||||||
"alacritty",
|
|
||||||
"amfora",
|
|
||||||
"git",
|
|
||||||
"lf",
|
|
||||||
"logrotate",
|
|
||||||
"tmux",
|
|
||||||
"user-dirs.dirs",
|
|
||||||
"user-dirs.locale",
|
|
||||||
"zk"
|
|
||||||
],
|
|
||||||
"git": {
|
"git": {
|
||||||
"gpgSign": true,
|
"gpgSign": true,
|
||||||
"user": {
|
"user": {
|
||||||
|
|
35
magefiles/bash_profile.go
Normal file
35
magefiles/bash_profile.go
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
//go:build mage
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"text/template"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BashProfile manages the user's Bash Profile using their configuration and the Bash Profile template.
|
||||||
|
func BashProfile() error {
|
||||||
|
const (
|
||||||
|
bashProfileTemplateFile string = "bash/profile.gotmpl"
|
||||||
|
managedBashProfile string = "managed/bash_profile"
|
||||||
|
)
|
||||||
|
|
||||||
|
config, err := newConfig()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to load the configuration: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !config.BashProfile.Manage {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
funcMap := template.FuncMap{
|
||||||
|
"env": env,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := renderTemplate(config, bashProfileTemplateFile, managedBashProfile, funcMap); err != nil {
|
||||||
|
return fmt.Errorf("unable to generate the Bash Profile: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -11,8 +11,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
Directories configDirectories `json:"directories"`
|
|
||||||
ApplicationConfigurations []string `json:"applicationConfigurations"`
|
ApplicationConfigurations []string `json:"applicationConfigurations"`
|
||||||
|
BashProfile configBashProfile `json:"bashProfile"`
|
||||||
|
Directories configDirectories `json:"directories"`
|
||||||
Git configGit `json:"git"`
|
Git configGit `json:"git"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +34,25 @@ type configGitUser struct {
|
||||||
SigningKey string `json:"signingKey"`
|
SigningKey string `json:"signingKey"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type configBashProfile struct {
|
||||||
|
Manage bool `json:"manage"`
|
||||||
|
SessionPaths []configBashProfileSessionPath `json:"sessionPaths"`
|
||||||
|
XdgDirectories map[string]string `json:"xdgDirectories"`
|
||||||
|
EnvironmentVariables map[string]string `json:"environmentVariables"`
|
||||||
|
Aliases map[string]string `json:"aliases"`
|
||||||
|
Commands []configBashProfileCommand `json:"commands"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type configBashProfileSessionPath struct {
|
||||||
|
Path string `json:"path"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type configBashProfileCommand struct {
|
||||||
|
Command string `json:"command"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
}
|
||||||
|
|
||||||
func newConfig() (config, error) {
|
func newConfig() (config, error) {
|
||||||
cfg := defaultConfig()
|
cfg := defaultConfig()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue