🚀 add custom shell option

nixos
Moritz Böhme 2022-03-22 19:33:01 +01:00
parent f2f069a51f
commit 9c7be9b751
No known key found for this signature in database
GPG Key ID: 213820E2795F5CF5
6 changed files with 172 additions and 157 deletions

View File

@ -1,16 +1,47 @@
{ config, lib, pkgs, ... }:
{
imports = [
./adb.nix
./bin
./direnv.nix
./fish.nix
./git.nix
./nix.nix
./ssh.nix
# ./zsh.nix
];
imports =
[ ./adb.nix ./bin ./direnv.nix ./git.nix ./nix.nix ./ssh.nix ./shell ];
modules.cli.shell = let
# HACK to fix 24bit color support with kitty
editor = "TERM=kitty-direct emacsclient -t -a 'emacs -t'";
in {
name = "fish";
abbreviations = {
us = "systemctl --user";
rs = "doas systemctl";
ga = "git add";
gb = "git branch";
gc = "git commit";
gco = "git checkout";
gd = "git diff";
gds = "git diff --staged";
gp = "git push";
gs = "git status";
};
aliases = {
du = "dust";
ls = "exa -lh --icons --git";
cat = "bat";
feh = "feh --auto-zoom --scale-down";
grep = "rg";
rm = "rm -i";
mv = "mv -i";
# HACK to fix kitty not being recongized
ssh = "TERM=xterm-color command ssh";
nix-switch = "doas nixos-rebuild switch --flake ~/.dotfiles";
nix-boot = "doas nixos-rebuild boot --flake ~/.dotfiles";
nix-lock =
"doas nixos-rebuild dry-activate --flake ~/.dotfiles --recreate-lock-file";
emacs = editor;
};
variables = { EDITOR = editor; };
};
home-manager.users.moritz = {
home.packages = with pkgs; [
# archives

View File

@ -1,90 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
users.users.moritz.shell = pkgs.fish;
# needed for nix completions
programs.fish.enable = true;
home-manager.users.moritz = {
programs = {
fish = let
# HACK to fix 24bit color support with kitty
editor = "TERM=kitty-direct emacsclient -t -a 'emacs -t'";
in {
enable = true;
shellAbbrs = {
us = "systemctl --user";
rs = "doas systemctl";
ga = "git add";
gb = "git branch";
gc = "git commit";
gco = "git checkout";
gd = "git diff";
gds = "git diff --staged";
gp = "git push";
gs = "git status";
};
shellAliases = {
du = "dust";
ls = "exa -lh --icons --git";
cat = "bat";
feh = "feh --auto-zoom --scale-down";
grep = "rg";
rm = "rm -i";
mv = "mv -i";
# HACK to fix kitty not being recongized
ssh = "TERM=xterm-color command ssh";
nix-switch = "doas nixos-rebuild switch --flake ~/.dotfiles";
nix-boot = "doas nixos-rebuild boot --flake ~/.dotfiles";
nix-lock =
"doas nixos-rebuild dry-activate --flake ~/.dotfiles --recreate-lock-file";
emacs = editor;
};
shellInit = ''
fzf_configure_bindings --git_log=\cg
# Vi Mode
fish_vi_key_bindings
# Emulates vim's cursor shape behavior
# Set the normal and visual mode cursors to a block
set fish_cursor_default block
# Set the insert mode cursor to a line
set fish_cursor_insert line
# Set the replace mode cursor to an underscore
set fish_cursor_replace_one underscore
# The following variable can be used to configure cursor shape in
# visual mode, but due to fish_cursor_default, is redundant here
set fish_cursor_visual block
# Variables
set -x EDITOR ${editor}
'';
functions = {
gi = ''
set url https://www.gitignore.io/api
if test (count $argv) -ne 1
set list (curl -sL $url/list | string split ",")
set choice (string split " " $list | fzf -m --preview "curl -sL $url/{}" | string join ",")
else
set choice $argv[1]
end
curl -sL $url/$choice > .gitignore
'';
fish_greeting = "";
cheat = "cht.sh $argv | bat -p";
};
plugins = [{
name = "dracula";
src = inputs.dracula-fish;
}];
};
fzf.enableFishIntegration = true;
starship.enableFishIntegration = true;
};
home.packages = with pkgs.fishPlugins; [ fzf-fish pisces ];
};
}

View File

@ -0,0 +1,28 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.module.cli.shell;
in {
options.modules.cli.shell = {
name = mkOption {
default = "fish";
type = types.enum [ "fish" "zsh" ];
example = "zsh";
};
abbreviations = mkOption {
default = { };
type = with types; attrsOf str;
example = { gs = "git status"; };
};
aliases = mkOption {
default = { };
type = with types; attrsOf (nullOr (either str path));
};
variables = mkOption {
default = { };
type = with types; attrsOf str;
};
};
imports = [ ./fish.nix ./zsh.nix ];
}

View File

@ -0,0 +1,68 @@
{ config, lib, pkgs, inputs, ... }:
let
cfg = config.modules.cli.shell;
exportedVariables = let
exportVariables =
lib.mapAttrsToList (n: v: ''set -x ${n} "${v}"'') cfg.variables;
in lib.concatStringsSep "\n" exportVariables;
in {
config = lib.mkIf (cfg.name == "fish") {
# set as default shell
users.users.moritz.shell = pkgs.fish;
# needed for nix completions
programs.fish.enable = true;
home-manager.users.moritz = {
programs = {
fish = {
enable = true;
shellAbbrs = cfg.abbreviations;
shellAliases = cfg.aliases;
shellInit = ''
fzf_configure_bindings --git_log=\cg
# Vi Mode
fish_vi_key_bindings
# Emulates vim's cursor shape behavior
# Set the normal and visual mode cursors to a block
set fish_cursor_default block
# Set the insert mode cursor to a line
set fish_cursor_insert line
# Set the replace mode cursor to an underscore
set fish_cursor_replace_one underscore
# The following variable can be used to configure cursor shape in
# visual mode, but due to fish_cursor_default, is redundant here
set fish_cursor_visual block
# Variables
${exportedVariables}
'';
functions = {
gi = ''
set url https://www.gitignore.io/api
if test (count $argv) -ne 1
set list (curl -sL $url/list | string split ",")
set choice (string split " " $list | fzf -m --preview "curl -sL $url/{}" | string join ",")
else
set choice $argv[1]
end
curl -sL $url/$choice > .gitignore
'';
fish_greeting = "";
cheat = "cht.sh $argv | bat -p";
};
plugins = [{
name = "dracula";
src = inputs.dracula-fish;
}];
};
fzf.enableFishIntegration = true;
starship.enableFishIntegration = true;
};
home.packages = with pkgs.fishPlugins; [ fzf-fish pisces ];
};
};
}

35
modules/cli/shell/zsh.nix Normal file
View File

@ -0,0 +1,35 @@
{ config, lib, pkgs, inputs, ... }:
let cfg = config.modules.cli.shell;
in {
config = lib.mkIf (cfg.name == "zsh") {
environment.pathsToLink = [ "/share/zsh" ];
users.users.moritz.shell = pkgs.zsh;
home-manager.users.moritz = {
home.packages = with pkgs; [ du-dust ];
programs = {
zsh = {
enable = true;
dotDir = ".config/zsh";
history.expireDuplicatesFirst = true;
localVariables = cfg.variables;
shellAliases = lib.trivial.mergeAttrs cfg.aliases cfg.abbreviations;
enableSyntaxHighlighting = true;
enableAutosuggestions = true;
enableCompletion = true;
initExtra = ''
function nix-which() {
readlink -f $(which $1)
}
'';
plugins = [{
name = "forgit";
src = inputs.forgit-git;
}];
};
fzf.enableZshIntegration = true;
starship.enableZshIntegration = true;
};
};
};
}

View File

@ -1,57 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
environment.pathsToLink = [ "/share/zsh" ];
users.users.moritz.shell = pkgs.zsh;
home-manager.users.moritz = {
home.packages = with pkgs; [ du-dust ];
programs = {
zsh = {
enable = true;
dotDir = ".config/zsh";
history.expireDuplicatesFirst = true;
localVariables = { EDITOR = "emacsclient -nw"; };
shellAliases = {
du = "dust";
ls = "exa -lh --icons --git";
cat = "bat";
feh = "feh --auto-zoom --scale-down";
grep = "rg";
us = "systemctl --user";
rs = "doas systemctl";
ga = "git add";
gb = "git branch";
gc = "git commit";
gco = "git checkout";
gd = "git diff";
gds = "git diff --staged";
gp = "git push";
gs = "git status";
ssh = "TERM=xterm-color ssh";
nix-switch = "doas nixos-rebuild switch --flake ~/.dotfiles";
nix-boot = "doas nixos-rebuild boot --flake ~/.dotfiles";
nix-lock =
"doas nixos-rebuild dry-activate --flake ~/.dotfiles --recreate-lock-file";
};
enableSyntaxHighlighting = true;
enableAutosuggestions = true;
enableCompletion = true;
initExtra = ''
function nix-which() {
readlink -f $(which $1)
}
'';
plugins = [{
name = "forgit";
src = inputs.forgit-git;
}];
};
fzfe.enableZshIntegration = true;
starship.enableZshIntegration = true;
};
};
}