Refactor back to a more modular configuration
This commit is contained in:
parent
19ea08a716
commit
2bedd41d83
178 changed files with 2245 additions and 1847 deletions
41
modules/home-manager/cli/bluetuith.nix
Normal file
41
modules/home-manager/cli/bluetuith.nix
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.bluetuith;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.bluetuith.enable = mkEnableOption "Enable bluetuith";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
bluetuith
|
||||
];
|
||||
|
||||
xdg.configFile."bluetuith/bluetuith.conf" = {
|
||||
text = ''
|
||||
{
|
||||
adapter: ""
|
||||
adapter-states: ""
|
||||
connect-bdaddr: ""
|
||||
gsm-apn: ""
|
||||
gsm-number: ""
|
||||
|
||||
keybindings: {
|
||||
NavigateDown: j
|
||||
NavigateUp: k
|
||||
}
|
||||
|
||||
receive-dir: ""
|
||||
theme: {}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
16
modules/home-manager/cli/default.nix
Normal file
16
modules/home-manager/cli/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
imports = [
|
||||
./bluetuith.nix
|
||||
./direnv.nix
|
||||
./fzf.nix
|
||||
./git.nix
|
||||
./node.nix
|
||||
./notes.nix
|
||||
./ranger.nix
|
||||
./scripts
|
||||
./starship.nix
|
||||
./tmux.nix
|
||||
./tmux-sessionizer.nix
|
||||
./zsh
|
||||
];
|
||||
}
|
21
modules/home-manager/cli/direnv.nix
Normal file
21
modules/home-manager/cli/direnv.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.direnv;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.direnv.enable = mkEnableOption "Enable direnv";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
|
||||
nix-direnv.enable = true;
|
||||
|
||||
silent = true;
|
||||
};
|
||||
};
|
||||
}
|
21
modules/home-manager/cli/fzf.nix
Normal file
21
modules/home-manager/cli/fzf.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.fzf;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.fzf.enable = mkEnableOption "Enable fzf";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
FZF_DEFAULT_OPTS = "--reverse";
|
||||
};
|
||||
};
|
||||
}
|
178
modules/home-manager/cli/git.nix
Normal file
178
modules/home-manager/cli/git.nix
Normal file
|
@ -0,0 +1,178 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.git;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.git = {
|
||||
enable = mkEnableOption "Enable git";
|
||||
|
||||
user = mkOption {
|
||||
type = types.submodule {
|
||||
options = {
|
||||
emailAddress = mkOption {
|
||||
description = "User email address.";
|
||||
type = types.str;
|
||||
apply =
|
||||
x:
|
||||
assert builtins.match "^[^@]+@[^@]+\\.[^@]+$" x != null;
|
||||
x;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.file."${config.xdg.configHome}/git/message".text = ''
|
||||
|
||||
|
||||
# Description
|
||||
#
|
||||
# - Why is this change necessary?
|
||||
# - How does it address the issue?
|
||||
# - What side effects does this change have?
|
||||
#
|
||||
# For breaking changes, uncomment the following line and describe the change:
|
||||
#
|
||||
# BREAKING CHANGE:
|
||||
#
|
||||
#
|
||||
# Add any issue IDs or commit SHAs that this commit references:
|
||||
#
|
||||
# Refs:
|
||||
|
||||
'';
|
||||
|
||||
programs = {
|
||||
git = {
|
||||
enable = true;
|
||||
userName = "Oliver Davies";
|
||||
userEmail = cfg.user.emailAddress;
|
||||
|
||||
aliases = {
|
||||
aa = "add --all";
|
||||
assume = "update-index --assume-unchanged";
|
||||
assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-";
|
||||
b = "branch";
|
||||
blame = "blame -w -C -C -C";
|
||||
browse = "!gh repo view --web";
|
||||
ca = "commit --amend --verbose";
|
||||
car = "commit --amend --no-edit";
|
||||
cl = "!hub clone";
|
||||
co = "checkout";
|
||||
compare = "!hub compare";
|
||||
current-branch = "rev-parse --abbrev-ref HEAD";
|
||||
dc = "diff --color --word-diff --cached";
|
||||
df = "diff --color --word-diff";
|
||||
dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -";
|
||||
fixup = "commit --fixup";
|
||||
issues = "!gh issue list --web";
|
||||
mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -";
|
||||
no-ff = "merge --no-ff";
|
||||
pl = "pull";
|
||||
prune = "remote prune origin";
|
||||
ps = "push";
|
||||
pulls = "!gh pr list --web";
|
||||
rbc = "rebase --continue";
|
||||
rdup = "!git dup && git rebase develop";
|
||||
remotes = "remote -v";
|
||||
repush = "!git pull --rebase && git push";
|
||||
ri = "rebase --interactive";
|
||||
rid = "!git rebase -i $(git merge-base develop HEAD)";
|
||||
rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)";
|
||||
rip = "!git rebase -i $(git merge-base production HEAD)";
|
||||
ris = "!git rebase -i $(git merge-base staging HEAD)";
|
||||
riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})";
|
||||
rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%";
|
||||
sl = "log --oneline --decorate -20";
|
||||
sla = "log --oneline --decorate --graph --all -20";
|
||||
slap = "log --oneline --decorate --graph --all";
|
||||
slp = "log --oneline --decorate";
|
||||
stash = "stash --included-untracked";
|
||||
unassume = "update-index --no-assume-unchanged";
|
||||
uncommit = "reset --soft HEAD^";
|
||||
unstage = "reset";
|
||||
update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat";
|
||||
upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}";
|
||||
ureset = "!git reset --hard $(git upstream)";
|
||||
worktrees = "worktree list";
|
||||
};
|
||||
|
||||
ignores = [
|
||||
"/.ddev/providers/"
|
||||
"/.direnv/"
|
||||
"/.ignored/"
|
||||
"/.issue-id"
|
||||
"/.phpactor.json"
|
||||
"/notes"
|
||||
"/todo"
|
||||
];
|
||||
|
||||
extraConfig = {
|
||||
branch = {
|
||||
autosetupmerge = true;
|
||||
autosetuprebase = "always";
|
||||
sort = "-committerdate";
|
||||
};
|
||||
|
||||
checkout.defaultRemote = "origin";
|
||||
color.ui = true;
|
||||
column.ui = "auto";
|
||||
commit.template = "${config.xdg.configHome}/git/message";
|
||||
|
||||
core = {
|
||||
editor = "nvim";
|
||||
excludesFile = "~/.config/git/ignore";
|
||||
};
|
||||
|
||||
diff.tool = "vimdiff";
|
||||
fetch.prune = true;
|
||||
gpg.format = "ssh";
|
||||
grep.lineNumber = true;
|
||||
help.autocorrect = "1";
|
||||
init.defaultBranch = "main";
|
||||
|
||||
maintenance = {
|
||||
auto = false;
|
||||
strategy = "incremental";
|
||||
};
|
||||
|
||||
merge.ff = "only";
|
||||
|
||||
push = {
|
||||
autoSetupRemote = true;
|
||||
default = "upstream";
|
||||
};
|
||||
|
||||
pull = {
|
||||
ff = "only";
|
||||
rebase = true;
|
||||
};
|
||||
|
||||
rebase = {
|
||||
autosquash = true;
|
||||
autostash = true;
|
||||
};
|
||||
|
||||
user.signingkey = "~/.ssh/id_rsa.pub";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [ nixpkgs-2411.git-instafix ];
|
||||
|
||||
sessionVariables = {
|
||||
GIT_INSTAFIX_UPSTREAM = "origin/main";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
25
modules/home-manager/cli/node.nix
Normal file
25
modules/home-manager/cli/node.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.node;
|
||||
|
||||
inherit (config.xdg) configHome dataHome stateHome;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.node.enable = mkEnableOption "Enable node";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
xdg.configFile."${config.home.sessionVariables.NPM_CONFIG_USERCONFIG}".text = ''
|
||||
cache=${configHome}/npm
|
||||
init-module=${configHome}/npm/config/npm-init.js
|
||||
logs-dir=${stateHome}/npm/logs
|
||||
prefix=${dataHome}/npm
|
||||
'';
|
||||
|
||||
home.sessionVariables = {
|
||||
NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc";
|
||||
};
|
||||
};
|
||||
}
|
30
modules/home-manager/cli/notes.nix
Normal file
30
modules/home-manager/cli/notes.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.notes;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.notes.enable = mkEnableOption "Enable notes";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs.enable = true;
|
||||
};
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [ notes ];
|
||||
|
||||
sessionVariables = {
|
||||
NOTES_DIRECTORY = "${config.xdg.userDirs.documents}/wiki/notes";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
14
modules/home-manager/cli/ranger.nix
Normal file
14
modules/home-manager/cli/ranger.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.ranger;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.ranger.enable = mkEnableOption "Enable ranger";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.ranger.enable = true;
|
||||
};
|
||||
}
|
10
modules/home-manager/cli/scripts/default.nix
Normal file
10
modules/home-manager/cli/scripts/default.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
home = {
|
||||
sessionPath = [ "$HOME/.local/bin" ];
|
||||
|
||||
file.".local/bin" = {
|
||||
source = ./scripts;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
21
modules/home-manager/cli/scripts/scripts/create-script
Executable file
21
modules/home-manager/cli/scripts/scripts/create-script
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$1" == "" ]]; then
|
||||
echo "Usage: ${0##*/} <script-name>"; exit 2
|
||||
fi
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
cat > "${1}" << EOF
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
echo "${1}"
|
||||
EOF
|
||||
|
||||
chmod +x "${1}"
|
20
modules/home-manager/cli/scripts/scripts/git-abort
Executable file
20
modules/home-manager/cli/scripts/scripts/git-abort
Executable file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Abort a rebase, merge, `am`, a cherry-pick or a revert, depending on the situation.
|
||||
|
||||
if [[ -e .git/CHERRY_PICK_HEAD ]] ; then
|
||||
exec git cherry-pick --abort "$@"
|
||||
elif [[ -e .git/REVERT_HEAD ]] ; then
|
||||
exec git revert --abort "$@"
|
||||
elif [[ -e .git/rebase-apply/applying ]] ; then
|
||||
exec git am --abort "$@"
|
||||
elif [[ -e .git/rebase-apply ]] ; then
|
||||
exec git rebase --abort "$@"
|
||||
elif [[ -e .git/rebase-merge ]] ; then
|
||||
exec git rebase --abort "$@"
|
||||
elif [[ -e .git/MERGE_MODE ]] ; then
|
||||
exec git merge --abort "$@"
|
||||
else
|
||||
echo git-abort: unknown state
|
||||
exit 1
|
||||
fi
|
34
modules/home-manager/cli/scripts/scripts/git-bare-clone
Executable file
34
modules/home-manager/cli/scripts/scripts/git-bare-clone
Executable file
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Creates a new bare clone of a repository with the bare files within a `.bare`
|
||||
# directory. It also sets the origin URL so push and pull work as expected.
|
||||
|
||||
if [[ "$1" == "" ]]; then
|
||||
echo "Usage: ${0##*/} <repository> [<directory>]"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
repository_url="${1}"
|
||||
directory="${2:-}"
|
||||
location=".bare"
|
||||
|
||||
# If no destination directory is specified, get it from the repository URL - the same as "git clone".
|
||||
if [ -z "${directory}" ]; then
|
||||
directory="$(basename -s .git "${repository_url}")"
|
||||
fi
|
||||
|
||||
# Create the parent directory if needed.
|
||||
mkdir -pv "${directory}"
|
||||
cd "${directory}"
|
||||
|
||||
git clone --bare "${repository_url}" "${location}"
|
||||
|
||||
# Adjust origin fetch locations.
|
||||
cd "${location}"
|
||||
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
||||
|
||||
# Set .git file contents.
|
||||
cd ..
|
||||
echo "gitdir: ./${location}" > .git
|
16
modules/home-manager/cli/scripts/scripts/git-continue
Executable file
16
modules/home-manager/cli/scripts/scripts/git-continue
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Continue a rebase or cherry-pick in the event of conflicts.
|
||||
|
||||
if [[ -e .git/CHERRY_PICK_HEAD ]] ; then
|
||||
exec git cherry-pick --continue "$@"
|
||||
elif [[ -e .git/rebase-apply/applying ]] ; then
|
||||
exec git rebase --continue "$@"
|
||||
elif [[ -e .git/rebase-apply ]] ; then
|
||||
exec git rebase --continue "$@"
|
||||
elif [[ -e .git/rebase-merge ]] ; then
|
||||
exec git rebase --continue "$@"
|
||||
else
|
||||
echo git-abort: unknown state
|
||||
exit 1
|
||||
fi
|
8
modules/home-manager/cli/scripts/scripts/git-sync
Executable file
8
modules/home-manager/cli/scripts/scripts/git-sync
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
git fetch --all
|
||||
git stash
|
||||
git pull --rebase
|
||||
git stash pop
|
21
modules/home-manager/cli/scripts/scripts/git-up
Executable file
21
modules/home-manager/cli/scripts/scripts/git-up
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Usage: git up {branch} {remote}
|
||||
|
||||
set -e
|
||||
|
||||
if [[ $# < 1 ]]; then
|
||||
echo "You must specify a branch name to update"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BRANCH=$1
|
||||
REMOTE=${2:-origin}
|
||||
|
||||
git checkout ${BRANCH} && \
|
||||
git fetch ${REMOTE} && \
|
||||
echo && \
|
||||
git sl ${BRANCH}..${REMOTE}/${BRANCH} && \
|
||||
echo && \
|
||||
git pull --quiet && \
|
||||
git checkout -
|
17
modules/home-manager/cli/scripts/scripts/import-gzip-database
Executable file
17
modules/home-manager/cli/scripts/scripts/import-gzip-database
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$1" == "" ]]; then
|
||||
echo "Usage: ${0##*/} <filename>"; exit 2
|
||||
fi
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
filename="${1}"
|
||||
shift 1
|
||||
|
||||
pv "${filename}" \
|
||||
| zcat \
|
||||
| docker compose exec -T "${SERVICE_NAME:-database}" mysql \
|
||||
-p"${DB_PASSWORD:-app}" \
|
||||
-u"${DB_USER:-app}" \
|
||||
"${DB_NAME:-app}"
|
10
modules/home-manager/cli/scripts/scripts/main-or-master-branch
Executable file
10
modules/home-manager/cli/scripts/scripts/main-or-master-branch
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/zsh
|
||||
|
||||
# Check if we should use the `main` or `master` branch for this repo.
|
||||
# Prefer `main` to `master`.
|
||||
|
||||
if git show-ref --quiet origin/main || git rev-parse main &>/dev/null; then
|
||||
echo main
|
||||
else
|
||||
echo master
|
||||
fi
|
36
modules/home-manager/cli/scripts/scripts/mounter
Executable file
36
modules/home-manager/cli/scripts/scripts/mounter
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
lsblk_output="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,mountpoints,fstype" | grep "part" | grep -Ev "/(boot|nix/store)")"
|
||||
partition_names="$(echo "$lsblk_output" | awk '{ printf "%s (%s)\n", $2, $4 }' )";
|
||||
|
||||
selected=$(echo "$partition_names" | dmenu -p "Select drive:" | awk '{ print $1 }')
|
||||
test -n "$selected"
|
||||
mount_device="$selected"
|
||||
|
||||
if sudo cryptsetup isLuks "$selected"; then
|
||||
luks_name="usb"
|
||||
|
||||
${TERMINAL:-st} -n floatterm -g 60x1 -e sudo cryptsetup open "$selected" "$luks_name"
|
||||
|
||||
mount_device="/dev/mapper/$luks_name"
|
||||
|
||||
test -b "/dev/mapper/$luks_name"
|
||||
fi
|
||||
|
||||
mount_point=$(echo -e "/mnt\n/media\n/run/media/$USER" | dmenu -p "Select mount point:")
|
||||
test -n "$mount_point"
|
||||
|
||||
sudo mkdir -p "$mount_point"
|
||||
|
||||
if sudo mount "$mount_device" "$mount_point"; then
|
||||
notify-send "Device mounted" "Mounted $selected at $mount_point."
|
||||
else
|
||||
notify-send "Mount failed" "Failed to mount $selected."
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
11
modules/home-manager/cli/scripts/scripts/move-firefox-screenshots
Executable file
11
modules/home-manager/cli/scripts/scripts/move-firefox-screenshots
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
original_directory="${HOME}/Downloads"
|
||||
new_directory="${HOME}/Pictures/Screenshots"
|
||||
|
||||
find "${original_directory}" -mindepth 1 -maxdepth 1 -type f -name "Screenshot *" \
|
||||
-exec mv {} "${new_directory}" \;
|
19
modules/home-manager/cli/scripts/scripts/new-drupal-module
Executable file
19
modules/home-manager/cli/scripts/scripts/new-drupal-module
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$1" == "" || "$2" == "" ]]; then
|
||||
echo "Usage: ${0##*/} <machine-name> <module-name>"; exit 2
|
||||
fi
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
machine_name=$1
|
||||
module_name=$2
|
||||
|
||||
git clone https://github.com/opdavies/drupal-module-template \
|
||||
--depth=1 \
|
||||
"${machine_name}"
|
||||
|
||||
pushd "${machine_name}"
|
||||
just rename "${module_name}"
|
||||
rm -fr .git .github justfile phpcs.xml.dist
|
||||
popd
|
3
modules/home-manager/cli/scripts/scripts/setbg
Executable file
3
modules/home-manager/cli/scripts/scripts/setbg
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
xwallpaper --zoom ~/${XDG_REPOS_DIR}/nixos-config/wallpaper/wallpaper.jpg
|
9
modules/home-manager/cli/scripts/scripts/start-traefik
Executable file
9
modules/home-manager/cli/scripts/scripts/start-traefik
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
cd "${XDG_REPOS_DIR}/traefik-development"
|
||||
|
||||
docker compose up --detach
|
||||
docker container ps
|
19
modules/home-manager/cli/scripts/scripts/stop-all-docker-containers
Executable file
19
modules/home-manager/cli/scripts/scripts/stop-all-docker-containers
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Stops all running Docker containers except for the global Traefik proxy.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Show the running containers.
|
||||
docker container ps
|
||||
|
||||
echo ""
|
||||
|
||||
# Stop the running containers and show any that are still running.
|
||||
docker container ls |
|
||||
tail -n +2 |
|
||||
grep -v traefik-development-reverse-proxy-1 |
|
||||
awk '{print $1}' |
|
||||
xargs docker container stop
|
||||
echo ""
|
||||
docker container ps
|
7
modules/home-manager/cli/scripts/scripts/stop-traefik
Executable file
7
modules/home-manager/cli/scripts/scripts/stop-traefik
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
docker container stop traefik-development-reverse-proxy-1
|
||||
docker container ps
|
13
modules/home-manager/cli/scripts/scripts/tag-release
Executable file
13
modules/home-manager/cli/scripts/scripts/tag-release
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
commit_sha="${1:-HEAD}"
|
||||
tag="$(date '+%Y-%m-%d-%H.%M.%S')"
|
||||
|
||||
echo "Tagging commit $(git rev-parse "${commit_sha}") as ${tag}."
|
||||
echo ""
|
||||
|
||||
# Tag the appropriate commit and push to the remote.
|
||||
git tag "${tag}" "${commit_sha}"
|
||||
git push origin "refs/tags/${tag}" --no-verify
|
26
modules/home-manager/cli/scripts/scripts/unmounter
Executable file
26
modules/home-manager/cli/scripts/scripts/unmounter
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
lsblk_output="$(lsblk -nrpo "name,type,size,mountpoint")"
|
||||
mounted_drives="$(echo "$lsblk_output" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')"
|
||||
|
||||
all_unmountable="$(echo "$mounted_drives" | sed "/^$/d;s/ *$//")"
|
||||
test -n "$all_unmountable"
|
||||
|
||||
selected="$(echo "$all_unmountable" | dmenu -i -p "Unmount which drive?")"
|
||||
selected="${selected%% *}"
|
||||
test -n "$selected"
|
||||
|
||||
sudo -A umount -l "/${selected#*/}"
|
||||
notify-send "Device unmounted" "$selected has been unmounted."
|
||||
|
||||
# Close the selected drive if decrypted.
|
||||
cryptid="$(echo "$lsblk_output" | grep "/${selected#*/}$")"
|
||||
cryptid="${cryptid%% *}"
|
||||
test -b /dev/mapper/"${cryptid##*/}"
|
||||
sudo -A cryptsetup close "$cryptid"
|
||||
|
||||
notify-send "Device dencryption closed" "Drive is now securely locked again."
|
25
modules/home-manager/cli/scripts/scripts/update-all-git-repos
Executable file
25
modules/home-manager/cli/scripts/scripts/update-all-git-repos
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Update all top-level Git repository clones within my Code directories to their
|
||||
# latest version.
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
dirs=$(find "$XDG_REPOS_DIR" -mindepth 1 -maxdepth 2 -type d -name .git -not -path '*/*.old/*')
|
||||
|
||||
for dir in $dirs; do
|
||||
repo_path="${dir%/.git}"
|
||||
|
||||
cd "${repo_path}"
|
||||
|
||||
# If the repo is a bare clone, the commands need to be run within the
|
||||
# worktree directory.
|
||||
[[ -f .bare/worktrees/main/gitdir && -d main && -f main/.git ]] && cd main
|
||||
|
||||
echo "Updating $(pwd)"
|
||||
|
||||
# Update the repository.
|
||||
git fetch --all --jobs=4 --progress --prune || true
|
||||
git pull --rebase || true
|
||||
done
|
187
modules/home-manager/cli/starship.nix
Normal file
187
modules/home-manager/cli/starship.nix
Normal file
|
@ -0,0 +1,187 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.starship;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.starship.enable = mkEnableOption "Enable starship";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.starship =
|
||||
let
|
||||
inherit (builtins) concatStringsSep;
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
|
||||
settings = {
|
||||
add_newline = false;
|
||||
|
||||
# https://starship.rs/config/#prompt
|
||||
format = concatStringsSep "" [
|
||||
"\n"
|
||||
"$username"
|
||||
"$hostname"
|
||||
"$directory"
|
||||
"$vcsh"
|
||||
"$git_branch"
|
||||
"$git_status"
|
||||
"$git_metrics"
|
||||
"$docker_context"
|
||||
"$nodejs"
|
||||
"$php"
|
||||
"$terraform"
|
||||
"$nix_shell"
|
||||
"$direnv"
|
||||
"\${custom.mob}"
|
||||
"$memory_usage"
|
||||
"$cmd_duration"
|
||||
"$lua"
|
||||
"$status"
|
||||
"$character"
|
||||
];
|
||||
|
||||
cmd_duration.disabled = true;
|
||||
direnv.disabled = false;
|
||||
directory.format = "[$path]($style) ";
|
||||
git_status.disabled = true;
|
||||
nix_shell.disabled = true;
|
||||
nodejs.disabled = true;
|
||||
php.disabled = true;
|
||||
username.disabled = true;
|
||||
|
||||
custom = {
|
||||
mob = {
|
||||
command = "echo $MOB_TIMER_ROOM";
|
||||
format = "[($output)]($style) ";
|
||||
when = "[[ -v MOB_TIMER_ROOM ]]";
|
||||
};
|
||||
};
|
||||
|
||||
# https://starship.rs/presets/plain-text
|
||||
aws.symbol = "aws ";
|
||||
azure.symbol = "az ";
|
||||
bun.symbol = "bun ";
|
||||
c.symbol = "C ";
|
||||
character = {
|
||||
success_symbol = "[>](bold green)";
|
||||
error_symbol = "[x](bold red)";
|
||||
vimcmd_symbol = "[<](bold green)";
|
||||
};
|
||||
cobol.symbol = "cobol ";
|
||||
conda.symbol = "conda ";
|
||||
crystal.symbol = "cr ";
|
||||
cmake.symbol = "cmake ";
|
||||
daml.symbol = "daml ";
|
||||
dart.symbol = "dart ";
|
||||
deno.symbol = "deno ";
|
||||
dotnet.symbol = ".NET ";
|
||||
directory.read_only = " ro";
|
||||
docker_context.symbol = "docker ";
|
||||
elixir.symbol = "exs ";
|
||||
elm.symbol = "elm ";
|
||||
fennel.symbol = "fnl ";
|
||||
fossil_branch.symbol = "fossil ";
|
||||
gcloud.symbol = "gcp ";
|
||||
git_branch.symbol = "git ";
|
||||
git_commit.tag_symbol = " tag ";
|
||||
git_status = {
|
||||
ahead = ">";
|
||||
behind = "<";
|
||||
diverged = "<>";
|
||||
renamed = "r";
|
||||
deleted = "x";
|
||||
};
|
||||
gleam.symbol = "gleam ";
|
||||
golang.symbol = "go ";
|
||||
gradle.symbol = "gradle ";
|
||||
guix_shell.symbol = "guix ";
|
||||
hg_branch.symbol = "hg ";
|
||||
java.symbol = "java ";
|
||||
julia.symbol = "jl ";
|
||||
kotlin.symbol = "kt ";
|
||||
lua.symbol = "lua ";
|
||||
nodejs.symbol = "nodejs ";
|
||||
memory_usage.symbol = "memory ";
|
||||
meson.symbol = "meson ";
|
||||
nats.symbol = "nats ";
|
||||
nim.symbol = "nim ";
|
||||
nix_shell.symbol = "nix ";
|
||||
ocaml.symbol = "ml ";
|
||||
opa.symbol = "opa ";
|
||||
os.symbols = {
|
||||
AIX = "aix ";
|
||||
Alpaquita = "alq ";
|
||||
AlmaLinux = "alma ";
|
||||
Alpine = "alp ";
|
||||
Amazon = "amz ";
|
||||
Android = "andr ";
|
||||
Arch = "rch ";
|
||||
Artix = "atx ";
|
||||
CentOS = "cent ";
|
||||
Debian = "deb ";
|
||||
DragonFly = "dfbsd ";
|
||||
Emscripten = "emsc ";
|
||||
EndeavourOS = "ndev ";
|
||||
Fedora = "fed ";
|
||||
FreeBSD = "fbsd ";
|
||||
Garuda = "garu ";
|
||||
Gentoo = "gent ";
|
||||
HardenedBSD = "hbsd ";
|
||||
Illumos = "lum ";
|
||||
Kali = "kali ";
|
||||
Linux = "lnx ";
|
||||
Mabox = "mbox ";
|
||||
Macos = "mac ";
|
||||
Manjaro = "mjo ";
|
||||
Mariner = "mrn ";
|
||||
MidnightBSD = "mid ";
|
||||
Mint = "mint ";
|
||||
NetBSD = "nbsd ";
|
||||
NixOS = "nix ";
|
||||
OpenBSD = "obsd ";
|
||||
OpenCloudOS = "ocos ";
|
||||
openEuler = "oeul ";
|
||||
openSUSE = "osuse ";
|
||||
OracleLinux = "orac ";
|
||||
Pop = "pop ";
|
||||
Raspbian = "rasp ";
|
||||
Redhat = "rhl ";
|
||||
RedHatEnterprise = "rhel ";
|
||||
RockyLinux = "rky ";
|
||||
Redox = "redox ";
|
||||
Solus = "sol ";
|
||||
SUSE = "suse ";
|
||||
Ubuntu = "ubnt ";
|
||||
Ultramarine = "ultm ";
|
||||
Unknown = "unk ";
|
||||
Void = "void ";
|
||||
Windows = "win ";
|
||||
};
|
||||
package.symbol = "pkg ";
|
||||
perl.symbol = "pl ";
|
||||
php.symbol = "php ";
|
||||
pijul_channel.symbol = "pijul ";
|
||||
pulumi.symbol = "pulumi ";
|
||||
purescript.symbol = "purs ";
|
||||
python.symbol = "py ";
|
||||
quarto.symbol = "quarto ";
|
||||
raku.symbol = "raku ";
|
||||
ruby.symbol = "rb ";
|
||||
rust.symbol = "rs ";
|
||||
scala.symbol = "scala ";
|
||||
spack.symbol = "spack ";
|
||||
solidity.symbol = "solidity ";
|
||||
status.symbol = "[x](bold red) ";
|
||||
sudo.symbol = "sudo ";
|
||||
swift.symbol = "swift ";
|
||||
typst.symbol = "typst ";
|
||||
terraform.symbol = "terraform ";
|
||||
zig.symbol = "zig ";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
46
modules/home-manager/cli/tmux-sessionizer.nix
Normal file
46
modules/home-manager/cli/tmux-sessionizer.nix
Normal file
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.tmux-sessionizer;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.tmux-sessionizer.enable = mkEnableOption "Enable tmux-sessionizer";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
tmux-sessionizer
|
||||
];
|
||||
|
||||
xdg.configFile."tmux-sessionizer/default".source = "${
|
||||
pkgs.writeShellApplication {
|
||||
name = ".tmux-sessionizer";
|
||||
|
||||
runtimeInputs = with pkgs; [
|
||||
tmux
|
||||
];
|
||||
|
||||
text = ''
|
||||
set +o errexit
|
||||
set +o nounset
|
||||
|
||||
if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" ]]; then
|
||||
clear
|
||||
|
||||
return
|
||||
fi
|
||||
|
||||
tmux new-window -d -n scratch
|
||||
nvim .
|
||||
clear
|
||||
'';
|
||||
}
|
||||
}/bin/.tmux-sessionizer";
|
||||
};
|
||||
}
|
97
modules/home-manager/cli/tmux.nix
Normal file
97
modules/home-manager/cli/tmux.nix
Normal file
|
@ -0,0 +1,97 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.tmux;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.tmux.enable = mkEnableOption "Enable tmux";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
|
||||
terminal = "tmux-256color";
|
||||
|
||||
extraConfig = ''
|
||||
set-option -g status-keys "vi"
|
||||
set-option -sa terminal-features "''${TERM}:RGB"
|
||||
|
||||
bind -n S-Left resize-pane -L 2
|
||||
bind -n S-Right resize-pane -R 2
|
||||
bind -n S-Down resize-pane -D 1
|
||||
bind -n S-Up resize-pane -U 1
|
||||
|
||||
bind -n C-Left resize-pane -L 10
|
||||
bind -n C-Right resize-pane -R 10
|
||||
bind -n C-Down resize-pane -D 5
|
||||
bind -n C-Up resize-pane -U 5
|
||||
|
||||
# Status line customisation
|
||||
set-option -g status-left ""
|
||||
set-option -g status-right " #{session_name}"
|
||||
set-option -g status-right-length 100
|
||||
set-option -g status-style "fg=#7C7D83 bg=default"
|
||||
set-option -g window-status-activity-style none
|
||||
set-option -g window-status-current-style "fg=#E9E9EA"
|
||||
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
|
||||
set -g base-index 1
|
||||
set -g pane-base-index 1
|
||||
set -g renumber-windows on
|
||||
|
||||
# Break a pane into a new window.
|
||||
bind-key b break-pane -d
|
||||
bind-key J command-prompt -p "join pane from: " "join-pane -h -s '%%'"
|
||||
|
||||
bind-key C-j choose-tree
|
||||
|
||||
set-window-option -g mode-keys vi
|
||||
bind -T copy-mode-vi v send-keys -X begin-selection
|
||||
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
|
||||
|
||||
bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
||||
|
||||
bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session'
|
||||
|
||||
# Allow clearing screen with ctrl-l by using <prefix> C-l
|
||||
bind C-l send-keys "C-l"
|
||||
bind C-k send-keys "C-k"
|
||||
|
||||
# Enable mouse support.
|
||||
setw -g mouse on
|
||||
|
||||
# Remove delay when switching Vim modes.
|
||||
set -sg escape-time 0
|
||||
|
||||
set-option -g pane-active-border-style "fg=#1f2335"
|
||||
set-option -g pane-border-style "fg=#1f2335"
|
||||
|
||||
# Vim-like pane navigation.
|
||||
bind ^ last-window
|
||||
bind h select-pane -L
|
||||
bind j select-pane -D
|
||||
bind k select-pane -U
|
||||
bind l select-pane -R
|
||||
|
||||
bind-key -r f run-shell "tmux new-window tmux-sessionizer"
|
||||
|
||||
bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt"
|
||||
bind-key -r N new-window "notes"
|
||||
bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'"
|
||||
'';
|
||||
|
||||
plugins = with pkgs.tmuxPlugins; [
|
||||
vim-tmux-navigator
|
||||
yank
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
140
modules/home-manager/cli/zsh/abbreviations.nix
Normal file
140
modules/home-manager/cli/zsh/abbreviations.nix
Normal file
|
@ -0,0 +1,140 @@
|
|||
{
|
||||
cl = "clear";
|
||||
cs = "create-script";
|
||||
daily = "run create-daily next";
|
||||
rst = "rst2pdf";
|
||||
st = "source .tmux";
|
||||
sz = "source ~/.config/zsh/.zshrc";
|
||||
ti = "timer";
|
||||
uagr = "update-all-git-repos";
|
||||
v = "nvim";
|
||||
yt = "yt-dlp";
|
||||
|
||||
evl = "export-video-list";
|
||||
vv = "cat ~/Documents/videos.json";
|
||||
|
||||
g = "git";
|
||||
ga = "git add";
|
||||
gan = "git add -N";
|
||||
gap = "git add -p";
|
||||
gb = "git branch";
|
||||
gbl = "git blame";
|
||||
gc = "git commit";
|
||||
gca = "git commit --amend";
|
||||
gcan = "git commit --amend --no-edit";
|
||||
gcl = "git clone";
|
||||
gcm = "git commit -m";
|
||||
gco = "git checkout";
|
||||
gcob = "git checkout -b";
|
||||
gd = "git diff";
|
||||
gds = "git diff --staged";
|
||||
gf = "git fetch";
|
||||
gfa = "git fetch --all";
|
||||
gl = "git log";
|
||||
glo = "git log --oneline";
|
||||
gls = "git log --stat";
|
||||
gm = "git merge";
|
||||
gmf = "git merge --ff";
|
||||
gmnf = "git merge --no-ff";
|
||||
gp = "git push";
|
||||
gpa = "git push acquia";
|
||||
gpam = "git push acquia main";
|
||||
gpap = "git push acquia HEAD:production";
|
||||
gpl = "git pull";
|
||||
gplr = "git pull --rebase";
|
||||
gpo = "git push origin";
|
||||
gpom = "git push origin main";
|
||||
gr = "git rebase";
|
||||
gra = "git rebase --abort";
|
||||
grc = "git rebase --continue";
|
||||
gri = "git rebase -i";
|
||||
gs = "git status";
|
||||
gsh = "git show";
|
||||
gst = "git stash";
|
||||
gstp = "git stash pop";
|
||||
gt = "git tag";
|
||||
|
||||
# tmux
|
||||
ta = "tmux attach";
|
||||
tl = "tmux list-sessions";
|
||||
tk = "tmux kill-session";
|
||||
|
||||
# Docker and Docker Compose.
|
||||
dk = "docker";
|
||||
dkp = "docker ps";
|
||||
dkpa = "docker ps -a";
|
||||
dkpaq = "docker ps -a -q";
|
||||
dkb = "docker build -t";
|
||||
dks = "docker start";
|
||||
dkt = "docker stop";
|
||||
dkrm = "docker rm";
|
||||
dkri = "docker rmi";
|
||||
dke = "docker exec -ti";
|
||||
dkl = "docker logs -f";
|
||||
dki = "docker images";
|
||||
dkpu = "docker pull";
|
||||
dkph = "docker push";
|
||||
dkbnc = "docker build --no-cache -t";
|
||||
dkr = "docker run --rm";
|
||||
dkrti = "docker run --rm -ti";
|
||||
dkc = "docker compose";
|
||||
dkcb = "docker compose build";
|
||||
dkcu = "docker compose up";
|
||||
dkclean = "docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi";
|
||||
|
||||
# Nix and direnv.
|
||||
dea = "direnv allow";
|
||||
dee = "direnv edit";
|
||||
nxf = "nix flake";
|
||||
nxfc = "nix flake check";
|
||||
nxfs = "nix flake show";
|
||||
nxfu = "nix flake update";
|
||||
nxr = "nix run nixpkgs#%";
|
||||
nxs = "nix shell nixpkgs#%";
|
||||
|
||||
# run scripts.
|
||||
r = "run";
|
||||
rc = "run composer";
|
||||
rcda = "run composer dump-autoload";
|
||||
rci = "run composer install";
|
||||
rcr = "run composer require";
|
||||
rcu = "run composer update";
|
||||
rd = "run drush";
|
||||
rdce = "run drush config:export -y";
|
||||
rdci = "run drush config:import -y";
|
||||
rdcr = "run drush cache:rebuild";
|
||||
rdscr = "run drush php:script";
|
||||
rduli = "run drush uli";
|
||||
rdup = "run drush updatedb -y";
|
||||
rpub = "run publish";
|
||||
rt = "run test";
|
||||
|
||||
nah = "git reset --hard; git clean -fd";
|
||||
wip = "git commit -m wip";
|
||||
|
||||
dv = "devenv";
|
||||
dvi = "devenv info";
|
||||
dvp = "devenv processes";
|
||||
dvs = "devenv shell";
|
||||
dvt = "devenv tasks";
|
||||
dvu = "devenv up";
|
||||
|
||||
c = "composer";
|
||||
ci = "composer install";
|
||||
cr = "composer require";
|
||||
crd = "composer require drupal/%";
|
||||
cu = "composer update";
|
||||
cul = "composer update --lock";
|
||||
cw = "composer why";
|
||||
cwn = "composer why-not";
|
||||
|
||||
d = "drush";
|
||||
dce = "drush config:export -y";
|
||||
dci = "drush config:import -y";
|
||||
dcr = "drush cache:rebuild";
|
||||
den = "drush pm:enable -y";
|
||||
deu = "drush pm:uninstall";
|
||||
dscr = "drush php:script";
|
||||
duli = "drush uli";
|
||||
dup = "drush updatedb -y";
|
||||
}
|
14
modules/home-manager/cli/zsh/aliases.nix
Normal file
14
modules/home-manager/cli/zsh/aliases.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
"$" = "";
|
||||
"-" = "cd -";
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
"...." = "cd ../../..";
|
||||
"....." = "cd ../../../..";
|
||||
run = "./run";
|
||||
tag = "tag-release";
|
||||
vss = "LC_ALL=C sort --unique ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.adddotfiles/nvim/spell/en.utf-8.add --output ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.add";
|
||||
wt = "git worktree";
|
||||
}
|
115
modules/home-manager/cli/zsh/default.nix
Normal file
115
modules/home-manager/cli/zsh/default.nix
Normal file
|
@ -0,0 +1,115 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.homeManagerModules.cli.zsh;
|
||||
in
|
||||
{
|
||||
options.homeManagerModules.cli.zsh.enable = mkEnableOption "Enable zsh";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
zsh-abbr = {
|
||||
enable = true;
|
||||
|
||||
abbreviations = import ./abbreviations.nix;
|
||||
globalAbbreviations = import ./global-abbreviations.nix;
|
||||
};
|
||||
|
||||
dotDir = ".config/zsh";
|
||||
|
||||
shellAliases = (import ./aliases.nix { inherit config; });
|
||||
|
||||
localVariables = {
|
||||
ABBR_SET_EXPANSION_CURSOR = 1;
|
||||
};
|
||||
|
||||
profileExtra = ''
|
||||
if [[ -z "$DISPLAY" ]] && [[ "$(tty)" == "/dev/tty1" ]]; then
|
||||
exec startx &>/dev/null
|
||||
fi
|
||||
'';
|
||||
|
||||
initExtra = ''
|
||||
background() {
|
||||
for ((i=2;i<=$#;i++)); do
|
||||
''${@[1]} ''${@[$i]} &> /dev/null &
|
||||
done
|
||||
}
|
||||
|
||||
# suffix
|
||||
alias -s gz="tar -tf"
|
||||
alias -s {html,HTML}="background zsh"
|
||||
alias -s {jpg,JPG,png,PNG}="background okular"
|
||||
alias -s {pdf,PDF}="background okular"
|
||||
alias -s {zip,ZIP}="unzip -l"
|
||||
|
||||
git() {
|
||||
case "$1" in
|
||||
clone)
|
||||
shift
|
||||
|
||||
local repo_url="$1"
|
||||
local repo_path="''${2:-}"
|
||||
|
||||
if [ -n "$TARGET_DIR" ]; then
|
||||
command git clone "$repo_url" "$repo_path"
|
||||
else
|
||||
command git clone "$repo_url"
|
||||
repo_path=$(basename "$repo_url" .git)
|
||||
fi
|
||||
|
||||
${pkgs.tmux-sessionizer}/bin/tmux-sessionizer "$repo_path"
|
||||
;;
|
||||
|
||||
root)
|
||||
shift
|
||||
|
||||
local ROOT="$(${pkgs.git}/bin/git rev-parse --show-toplevel 2> /dev/null || echo -n .)"
|
||||
|
||||
if [[ $# == 0 ]]; then
|
||||
cd "''${ROOT}"
|
||||
else
|
||||
(cd "''${ROOT}" && eval "''${@}")
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
${pkgs.git}/bin/git "''${@}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
mbsync() {
|
||||
${pkgs.isync}/bin/mbsync --config "${config.xdg.configHome}/isync/mbsyncrc" "''${@}"
|
||||
}
|
||||
|
||||
ttyper() {
|
||||
command ${pkgs.ttyper}/bin/ttyper --language english1000 --words 50 "''${@}"
|
||||
}
|
||||
|
||||
yt-dlp() {
|
||||
command yt-dlp --paths ~/Videos "$@"
|
||||
}
|
||||
|
||||
bindkey -s ^f "tmux-sessionizer\n"
|
||||
bindkey -s ^v "nvim\n"
|
||||
|
||||
setopt auto_cd
|
||||
setopt auto_pushd
|
||||
setopt pushd_ignore_dups
|
||||
setopt pushdminus
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
14
modules/home-manager/cli/zsh/global-abbreviations.nix
Normal file
14
modules/home-manager/cli/zsh/global-abbreviations.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
A1 = "| awk '{print $1}'";
|
||||
C = "| xclip -sel clip";
|
||||
Fj = "| jq .";
|
||||
Fy = "| yq .";
|
||||
G = "| grep";
|
||||
GH = "| grep HTTP";
|
||||
Gi = "| grep -i";
|
||||
H2 = "| head -n 20";
|
||||
H = "| head";
|
||||
L = "| less";
|
||||
V = "| nvim -";
|
||||
X = "| xargs -I1";
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue