mirror of
https://codeberg.org/leana8959/.files.git
synced 2025-12-06 14:49:14 +00:00
nix!: refactored homeModules
This commit is contained in:
parent
1c48edddf4
commit
e9f8ccd2b3
50 changed files with 14 additions and 41 deletions
80
nix/homeModules/common/fish/aliasesAbbrs.nix
Normal file
80
nix/homeModules/common/fish/aliasesAbbrs.nix
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
pkgs,
|
||||
hostname,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
programs.fish = {
|
||||
shellAbbrs = lib.mkMerge [
|
||||
{
|
||||
## Docker
|
||||
dc = "docker compose";
|
||||
|
||||
## Git
|
||||
gaa = "git add (git rev-parse --show-toplevel)";
|
||||
"ga." = "git add .";
|
||||
gp = "git pull";
|
||||
gP = "git push";
|
||||
clone = "clone_to_repos";
|
||||
|
||||
## Editor
|
||||
ts = "tmux_sessionizer";
|
||||
v = "nvim";
|
||||
|
||||
":q" = "exit";
|
||||
|
||||
nhist = "sudo nix profile history --profile /nix/var/nix/profiles/system";
|
||||
hhist = "nix profile history --profile ~/.local/state/nix/profiles/home-manager";
|
||||
|
||||
nwipe = "sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than 7d";
|
||||
hwipe = "nix profile wipe-history --profile ~/.local/state/nix/profiles/home-manager --older-than 7d";
|
||||
}
|
||||
|
||||
# TODO: move this out
|
||||
(lib.mkIf pkgs.stdenv.isLinux {
|
||||
ss = "sudo systemctl";
|
||||
se = "SUDO_EDITOR=(which nvim) sudoedit";
|
||||
ns = "sudo nixos-rebuild switch -L --flake ~/.dotfiles#${hostname}";
|
||||
hs = "home-manager switch -L --flake ~/.dotfiles#${hostname}";
|
||||
})
|
||||
|
||||
(lib.mkIf pkgs.stdenv.isDarwin {
|
||||
ns = "darwin-rebuild switch -L --flake ~/.dotfiles#${hostname} --option sandbox false";
|
||||
ndd = "nix develop -L --option sandbox false -c true"; # run the develop once without sandbox when needed
|
||||
})
|
||||
];
|
||||
|
||||
shellAliases = lib.mkMerge [
|
||||
{
|
||||
rm = "rm -I"; # idiot protection
|
||||
tree = "tree -Cph";
|
||||
restow = "cd ~/.dotfiles/ && stow -D . && stow -S . && prevd";
|
||||
nix-shell = "nix-shell --run fish";
|
||||
",," = "nix shell -c";
|
||||
}
|
||||
|
||||
(lib.mkIf pkgs.stdenv.isLinux {
|
||||
# idiot protection
|
||||
chmod = "chmod --preserve-root";
|
||||
chown = "chown --preserve-root";
|
||||
})
|
||||
|
||||
(lib.mkIf pkgs.stdenv.isDarwin (
|
||||
let
|
||||
cmds = builtins.concatStringsSep ";";
|
||||
in
|
||||
{
|
||||
reset_launchpad = cmds [
|
||||
"defaults write com.apple.dock ResetLaunchPad -bool true"
|
||||
"killall Dock"
|
||||
];
|
||||
add_spacer_tile = cmds [
|
||||
"defaults write com.apple.dock persistent-apps -array-add '{tile-type=\"small-spacer-tile\";}"
|
||||
"killall Dock"
|
||||
];
|
||||
}
|
||||
))
|
||||
];
|
||||
};
|
||||
}
|
||||
11
nix/homeModules/common/fish/conf.d/bind.fish
Normal file
11
nix/homeModules/common/fish/conf.d/bind.fish
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
for mode in default insert
|
||||
bind --mode $mode \cg tmux_home
|
||||
bind --mode $mode \cf tmux_sessionizer
|
||||
end
|
||||
|
||||
# vi cursor style
|
||||
fish_vi_key_bindings
|
||||
set fish_cursor_default block
|
||||
set fish_cursor_insert line
|
||||
set fish_cursor_replace_one underscore
|
||||
set fish_cursor_visual block
|
||||
100
nix/homeModules/common/fish/conf.d/colorscheme.fish
Normal file
100
nix/homeModules/common/fish/conf.d/colorscheme.fish
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
# Learn more: https://fishshell.com/docs/current/interactive.html
|
||||
|
||||
begin
|
||||
# scope this in a bolck to not leak variables everywhere
|
||||
|
||||
set -l black 000000
|
||||
set -l grey a0a1a7
|
||||
set -l cyan 0184bc
|
||||
set -l blue 4078f2
|
||||
set -l purple a626a4
|
||||
set -l green 50a14f
|
||||
set -l orange e45649
|
||||
set -l red ca1243
|
||||
set -l brown 986801
|
||||
set -l gold c18401
|
||||
set -l accent 645199
|
||||
set -l visual d0d0d0
|
||||
|
||||
###########
|
||||
# General #
|
||||
###########
|
||||
# default color
|
||||
set fish_color_normal $black
|
||||
# commands like echo
|
||||
set fish_color_command $blue
|
||||
# keywords like if - this falls back on the command color if unset
|
||||
set fish_color_keyword $purple
|
||||
# quoted text like "abc"
|
||||
set fish_color_quote $green
|
||||
# IO redirections like >/dev/null
|
||||
set fish_color_redirection $gold
|
||||
# process separators like ; and &
|
||||
set fish_color_end $black --bold
|
||||
# syntax errors
|
||||
set fish_color_error $black
|
||||
# ordinary command parameters
|
||||
set fish_color_param $red
|
||||
# parameters that are filenames (if the file exists)
|
||||
set fish_color_valid_path --italics
|
||||
# options starting with “-”, up to the first “--” parameter
|
||||
set fish_color_option $cyan
|
||||
# comments like ‘# important’
|
||||
set fish_color_comment $grey
|
||||
# selected text in vi visual mode
|
||||
set fish_color_selection --background=$visual
|
||||
# parameter expansion operators like * and ~
|
||||
set fish_color_operator $orange
|
||||
# character escapes like \n and \x70
|
||||
set fish_color_escape $purple
|
||||
# autosuggestions (the proposed rest of a command)
|
||||
set fish_color_autosuggestion $grey
|
||||
# The current working directory in the default prompt
|
||||
set fish_color_cwd $black
|
||||
# The current working directory in the default prompt for the root user
|
||||
set fish_color_cwd_root $red
|
||||
# The username in the default prompt
|
||||
set fish_color_user $grey
|
||||
# The hostname in the default prompt
|
||||
set fish_color_host $black
|
||||
# the hostname in the default prompt for remote sessions (like ssh)
|
||||
set fish_color_host_remote $red
|
||||
# the last command’s nonzero exit code in the default prompt
|
||||
set fish_color_status $red
|
||||
# the ‘^C’ indicator on a canceled command
|
||||
set fish_color_cancel $accent --reverse
|
||||
# history search matches and selected pager items (background only)
|
||||
set fish_color_search_match --background $visual
|
||||
|
||||
#########
|
||||
# Pager #
|
||||
#########
|
||||
# the progress bar at the bottom left corner
|
||||
set fish_pager_color_progress --reverse $cyan
|
||||
# the background color of a line
|
||||
set fish_pager_color_background $black
|
||||
# the prefix string, i.e. the string that is to be completed
|
||||
set fish_pager_color_prefix $black
|
||||
# the completion itself, i.e. the proposed rest of the string
|
||||
set fish_pager_color_completion $grey
|
||||
# the completion description
|
||||
set fish_pager_color_description $grey
|
||||
# background of the selected completion
|
||||
set fish_pager_color_selected_background $black
|
||||
# prefix of the selected completion
|
||||
set fish_pager_color_selected_prefix
|
||||
# suffix of the selected completion
|
||||
set fish_pager_color_selected_completion $red
|
||||
# description of the selected completion
|
||||
set fish_pager_color_selected_description $gold
|
||||
|
||||
# ## Alternating colors
|
||||
# # background of every second unselected completion
|
||||
# set fish_pager_color_secondary_background --background=$tinted_bg
|
||||
# # prefix of every second unselected completion
|
||||
# set fish_pager_color_secondary_prefix
|
||||
# # suffix of every second unselected completion
|
||||
# set fish_pager_color_secondary_completion
|
||||
# # description of every second unselected completion
|
||||
# set fish_pager_color_secondary_description
|
||||
end
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# fzf preview theme (use delta instead of bat)
|
||||
set -x fzf_preview_file_cmd 'delta'
|
||||
# fd uses LS_COLORS
|
||||
set -x LS_COLORS (vivid -m 24-bit generate one-light)
|
||||
# fzf-fish search hidden files
|
||||
set -x fzf_fd_opts --hidden --exclude=.git
|
||||
14
nix/homeModules/common/fish/conf.d/locale.fish
Normal file
14
nix/homeModules/common/fish/conf.d/locale.fish
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# zh_TW
|
||||
# set -x LANG zh_TW.UTF-8
|
||||
# set -x LANGUAGE zh_TW
|
||||
# set -x LC_ALL zh_TW.UTF-8
|
||||
|
||||
# fr_FR
|
||||
# set -x LANG fr_FR.UTF-8
|
||||
# set -x LANGUAGE fr_FR
|
||||
# set -x LC_ALL fr_FR.UTF-8
|
||||
|
||||
# en_US
|
||||
set -x LANG en_US.UTF-8
|
||||
set -x LANGUAGE en_US
|
||||
set -x LC_ALL en_US.UTF-8
|
||||
4
nix/homeModules/common/fish/conf.d/shellInit.fish
Normal file
4
nix/homeModules/common/fish/conf.d/shellInit.fish
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# repo paths
|
||||
set REPOS_PATH ~/repos
|
||||
set UNIV_REPOS_PATH ~/univ-repos
|
||||
set PLAYGROUND_PATH ~/playground
|
||||
105
nix/homeModules/common/fish/default.nix
Normal file
105
nix/homeModules/common/fish/default.nix
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [ ./aliasesAbbrs.nix ];
|
||||
|
||||
options.programs.fish.sourcePaths = lib.mkOption {
|
||||
type = with lib.types; nonEmptyListOf str;
|
||||
description = ''
|
||||
Paths to be sourced idempotently at the start of a login-shell.
|
||||
'';
|
||||
};
|
||||
|
||||
config.xdg.configFile."fish/functions".source = lib.mkIf config.programs.fish.enable ./functions;
|
||||
config.programs.fish =
|
||||
let
|
||||
readConfig = n: builtins.readFile ./conf.d/${n}.fish;
|
||||
readConfigs = ns: builtins.concatStringsSep "\n" (map readConfig ns);
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
|
||||
# We need to handle path idempotently, because fish in home-manager is
|
||||
# unable to depend on nixos/nix-darwin configurations to figure out the profile.d/nix.sh
|
||||
# to source.
|
||||
#
|
||||
# The hack is to make terminal emulators run fish as a login shell
|
||||
# whenever fish should handle the path.
|
||||
# tmux should NOT call fish as a login shell, because it would inherit the
|
||||
# environment variables from its parent shell, which is a login shell.
|
||||
loginShellInit = ''
|
||||
begin
|
||||
set ps ${builtins.concatStringsSep " " config.programs.fish.sourcePaths}
|
||||
|
||||
set -e fish_user_paths
|
||||
for p in $ps
|
||||
test -d $p && set --append fish_user_paths $p
|
||||
end
|
||||
end
|
||||
'';
|
||||
|
||||
sourcePaths =
|
||||
[
|
||||
# Make sure wrapper comes first
|
||||
# https://discourse.nixos.org/t/sudo-run-current-system-sw-bin-sudo-must-be-owned-by-uid-0-and-have-the-setuid-bit-set-and-cannot-chdir-var-cron-bailing-out-var-cron-permission-denied/20463/2
|
||||
"/run/wrappers/bin"
|
||||
|
||||
# Make sure nixcpp with the specified version in the flake come first
|
||||
"${config.nix.package}/bin"
|
||||
|
||||
"${config.home.homeDirectory}/.nix-profile/bin"
|
||||
"/nix/profile/bin"
|
||||
"${config.home.homeDirectory}/.local/state/nix/profile/bin"
|
||||
|
||||
"/etc/profiles/per-user/${config.home.username}/bin"
|
||||
|
||||
"/nix/var/nix/profiles/default/bin"
|
||||
"/run/current-system/sw/bin"
|
||||
]
|
||||
# Add brew, but as fallback
|
||||
++ (lib.lists.optional pkgs.stdenv.isDarwin "/opt/homebrew/bin");
|
||||
|
||||
shellInit = readConfig "shellInit";
|
||||
|
||||
interactiveShellInit = readConfigs [
|
||||
"interactiveShellInit"
|
||||
"bind"
|
||||
"colorscheme"
|
||||
"locale"
|
||||
];
|
||||
|
||||
plugins = [
|
||||
{
|
||||
name = "fzf-fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "PatrickF1";
|
||||
repo = "fzf.fish";
|
||||
rev = "v10.3";
|
||||
hash = "sha256-T8KYLA/r/gOKvAivKRoeqIwE2pINlxFQtZJHpOy9GMM=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "colored-man-pages";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "PatrickF1";
|
||||
repo = "colored_man_pages.fish";
|
||||
rev = "f885c2507128b70d6c41b043070a8f399988bc7a";
|
||||
sha256 = "sha256-ii9gdBPlC1/P1N9xJzqomrkyDqIdTg+iCg0mwNVq2EU=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "sponge";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "meaningful-ooo";
|
||||
repo = "sponge";
|
||||
sha256 = "sha256-MdcZUDRtNJdiyo2l9o5ma7nAX84xEJbGFhAVhK+Zm1w=";
|
||||
rev = "1.1.0";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
15
nix/homeModules/common/fish/functions/,.fish
Normal file
15
nix/homeModules/common/fish/functions/,.fish
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
function ,
|
||||
set ps
|
||||
set os
|
||||
for p in $argv
|
||||
if not string match -q -- "--*" $p
|
||||
set -a ps "nixpkgs#$p"
|
||||
else
|
||||
set -a os "$p"
|
||||
end
|
||||
end
|
||||
|
||||
set cmd "SHELL=(which fish) IN_NIX_SHELL=\"impure\" nix shell $os $ps"
|
||||
echo "Executing `$cmd`..."
|
||||
eval $cmd
|
||||
end
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
function __tmux_attach_or_switch \
|
||||
--description "Attach (not in tmux) or switch (in tmux) to a session"
|
||||
### Arguments:
|
||||
set session_name $argv[1]
|
||||
|
||||
if [ -z "$TMUX" ]
|
||||
tmux attach-session -t $session_name
|
||||
else
|
||||
tmux switch-client -t $session_name
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
function __tmux_maybe_create \
|
||||
--description "Create a tmux session with sensible defaults if it doesn't exist yet"
|
||||
### Arguments:
|
||||
set session_name $argv[1]
|
||||
set session_dir $argv[2]
|
||||
|
||||
if pgrep tmux 2>&1 >/dev/null; or ! tmux has -t=$session_name 2>/dev/null
|
||||
tmux \
|
||||
new-session -ds $session_name -c $session_dir \; \
|
||||
send-keys -t $session_name $EDITOR ENTER \; \
|
||||
new-window -t $session_name -c $session_dir \; \
|
||||
select-window -t $session_name:1
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
function __tmux_register_session \
|
||||
--description "Register the session, if it's not set yet"
|
||||
### Effects:
|
||||
set last /tmp/TMUX_LAST
|
||||
|
||||
set this (tmux display-message -p '#S')
|
||||
if [ ! -f "$last" ]; or [ (cat "$last") != "$this" ]
|
||||
echo "$this" >"$last"
|
||||
end
|
||||
|
||||
end
|
||||
13
nix/homeModules/common/fish/functions/clone_to_repos.fish
Normal file
13
nix/homeModules/common/fish/functions/clone_to_repos.fish
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
function clone_to_repos
|
||||
|
||||
if not count $argv >/dev/null
|
||||
echo "Git url needed"
|
||||
end
|
||||
|
||||
set name_repo (echo $argv | sed -E 's/.*[:\\/]([^\\/]+)\\/([^\\/]+?)(:?\\.git)$/\1 \2/')
|
||||
set name (echo $name_repo | cut -d ' ' -f1)
|
||||
set repo (echo $name_repo | cut -d ' ' -f2)
|
||||
mkdir -p $REPOS_PATH/$name
|
||||
git clone $argv $REPOS_PATH/$name/$repo
|
||||
|
||||
end
|
||||
12
nix/homeModules/common/fish/functions/fish_greeting.fish
Normal file
12
nix/homeModules/common/fish/functions/fish_greeting.fish
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
function fish_greeting
|
||||
|
||||
set_color --italics
|
||||
switch $FISH_GREETING
|
||||
case toh
|
||||
cat ~/.quotes/toh/* | shuf -n 1
|
||||
case fleabag
|
||||
cat ~/.quotes/fleabag/* | shuf -n 1
|
||||
case "*"
|
||||
end
|
||||
|
||||
end
|
||||
29
nix/homeModules/common/fish/functions/fzf_pass.fish
Normal file
29
nix/homeModules/common/fish/functions/fzf_pass.fish
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
function fzf_pass
|
||||
|
||||
set selected \
|
||||
(begin
|
||||
fd -tf . $PASSWORD_STORE_DIR | sed "s|^$PASSWORD_STORE_DIR/\(.*\)\.gpg\$|\1|"
|
||||
end | fzf)
|
||||
|
||||
if [ -z "$selected" ]
|
||||
echo Nothing selected
|
||||
echo exiting...
|
||||
end
|
||||
|
||||
set mode \
|
||||
(begin
|
||||
echo "password"
|
||||
echo "otp"
|
||||
echo "all"
|
||||
end | fzf)
|
||||
|
||||
switch "$mode"
|
||||
case all
|
||||
pass "$selected" | nvim +"setlocal buftype=nofile bufhidden=hide noswapfile"
|
||||
case password
|
||||
pass "$selected" -c
|
||||
case otp
|
||||
pass otp "$selected" -c
|
||||
end
|
||||
|
||||
end
|
||||
5
nix/homeModules/common/fish/functions/snakecase.fish
Normal file
5
nix/homeModules/common/fish/functions/snakecase.fish
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
function snakecase
|
||||
|
||||
echo $argv | sed -E 's/[^A-Za-z0-9_\n]+/_/g' | sed -E 's/__+/_/g' | tr '[:upper:]' '[:lower:]'
|
||||
|
||||
end
|
||||
19
nix/homeModules/common/fish/functions/tmux_home.fish
Normal file
19
nix/homeModules/common/fish/functions/tmux_home.fish
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
function tmux_home \
|
||||
--description "Take me back to ~"
|
||||
|
||||
set session_name home
|
||||
|
||||
if pgrep tmux 2>&1 >/dev/null
|
||||
__tmux_register_session
|
||||
end
|
||||
|
||||
if pgrep tmux 2>&1 >/dev/null; or ! tmux has -t=$session_name 2>/dev/null
|
||||
tmux \
|
||||
new-session -ds home \; \
|
||||
new-window -t home \; \
|
||||
select-window -t "home":1
|
||||
end
|
||||
|
||||
__tmux_attach_or_switch $session_name
|
||||
|
||||
end
|
||||
16
nix/homeModules/common/fish/functions/tmux_last.fish
Normal file
16
nix/homeModules/common/fish/functions/tmux_last.fish
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
function tmux_last \
|
||||
--description "Toggle the last tmux session"
|
||||
|
||||
set tmux_last /tmp/TMUX_LAST
|
||||
if [ ! -f $tmux_last ]
|
||||
echo "Last session is not yet set"
|
||||
return 1
|
||||
end
|
||||
|
||||
set session_name (cat $tmux_last)
|
||||
|
||||
__tmux_register_session
|
||||
__tmux_maybe_create $session_name /tmp
|
||||
__tmux_attach_or_switch $session_name
|
||||
|
||||
end
|
||||
48
nix/homeModules/common/fish/functions/tmux_sessionizer.fish
Normal file
48
nix/homeModules/common/fish/functions/tmux_sessionizer.fish
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
function tmux_sessionizer \
|
||||
--description "Manage tmux sessions in specific folders with fzf"
|
||||
|
||||
set selected \
|
||||
(begin
|
||||
fd . $REPOS_PATH $UNIV_REPOS_PATH --exact-depth 2 --type d
|
||||
fd . $PLAYGROUND_PATH --exact-depth 1 --type d
|
||||
# Special mode to create a playground
|
||||
echo "play"
|
||||
echo "dotfiles"
|
||||
end 2> /dev/null | sed -e "s|^$HOME|~|" | fzf)
|
||||
|
||||
set selected (echo $selected | sed -e "s|^~|$HOME|")
|
||||
|
||||
if [ -z "$selected" ]
|
||||
commandline --function repaint
|
||||
return 0
|
||||
end
|
||||
|
||||
# derive session name based on selected path
|
||||
# dots are meaningful in tmux, remove them
|
||||
set session_name (echo $selected | tr . _)
|
||||
|
||||
# fixup special cases, override derived session_name if necessary
|
||||
# this should be id for non-special cases
|
||||
switch $selected
|
||||
case play
|
||||
read -P "Give it a name: " name
|
||||
if [ -z "$name" ]
|
||||
return 0
|
||||
end
|
||||
set name (snakecase "$name")
|
||||
|
||||
set selected ~/playground/$name
|
||||
set session_name (echo $selected | tr . _)
|
||||
mkdir -p $selected
|
||||
|
||||
case dotfiles
|
||||
set selected ~/.dotfiles
|
||||
set session_name dotfiles
|
||||
end
|
||||
|
||||
# effects
|
||||
__tmux_register_session $session_name
|
||||
__tmux_maybe_create $session_name $selected
|
||||
__tmux_attach_or_switch $session_name
|
||||
|
||||
end
|
||||
10
nix/homeModules/common/fish/functions/update_dotfiles.fish
Normal file
10
nix/homeModules/common/fish/functions/update_dotfiles.fish
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
function update_dotfiles
|
||||
|
||||
cd ~/.dotfiles/
|
||||
git reset --hard
|
||||
git pull --set-upstream origin main
|
||||
git submodule update --init
|
||||
prevd
|
||||
restow
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue