WIP: Switch to NixOS #5
12 changed files with 344 additions and 291 deletions
92
users/functionalhacker/dconf.nix
Normal file
92
users/functionalhacker/dconf.nix
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
with lib.hm.gvariant;
|
||||||
|
|
||||||
|
{
|
||||||
|
dconf.settings = {
|
||||||
|
"io/github/celluloid-player/celluloid" = {
|
||||||
|
dark-theme-enable = false;
|
||||||
|
mpv-config-enable = true;
|
||||||
|
mpv-config-file = "file:///home/functionalhacker/.config/mpv/mpv.conf";
|
||||||
|
mpv-input-config-enable = true;
|
||||||
|
mpv-input-config-file = "file:///home/functionalhacker/.config/mpv/input.conf";
|
||||||
|
settings-migrated = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/Connections" = {
|
||||||
|
first-run = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/a11y/mouse" = {
|
||||||
|
dwell-click-enabled = false;
|
||||||
|
dwell-threshold = 10;
|
||||||
|
dwell-time = 1.2;
|
||||||
|
secondary-click-enabled = true;
|
||||||
|
secondary-click-time = 1.2;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/calendar" = {
|
||||||
|
show-weekdate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/input-sources" = {
|
||||||
|
show-all-sources = true;
|
||||||
|
sources = [ (mkTuple [ "xkb" "eu" ]) (mkTuple [ "xkb" "fi" ]) ];
|
||||||
|
xkb-options = [ "lv3:ralt_switch" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/peripherals/touchpad" = {
|
||||||
|
tap-to-click = true;
|
||||||
|
two-finger-scrolling-enabled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/privacy" = {
|
||||||
|
disable-microphone = false;
|
||||||
|
old-files-age = mkUint32 14;
|
||||||
|
recent-files-max-age = -1;
|
||||||
|
remove-old-temp-files = true;
|
||||||
|
remove-old-trash-files = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/wm/keybindings" = {
|
||||||
|
close = [ "<Super>w" ];
|
||||||
|
move-to-workspace-down = [ "<Shift><Super>j" ];
|
||||||
|
move-to-workspace-left = [ "<Shift><Super>h" ];
|
||||||
|
move-to-workspace-right = [ "<Shift><Super>l" ];
|
||||||
|
move-to-workspace-up = [ "<Shift><Super>k" ];
|
||||||
|
switch-to-workspace-down = [ "<Super>j" ];
|
||||||
|
switch-to-workspace-left = [ "<Super>h" ];
|
||||||
|
switch-to-workspace-right = [ "<Super>l" ];
|
||||||
|
switch-to-workspace-up = [ "<Super>k" ];
|
||||||
|
toggle-fullscreen = [ ];
|
||||||
|
toggle-maximized = [ "<Super>f" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/settings-daemon/plugins/media-keys" = {
|
||||||
|
custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" ];
|
||||||
|
screensaver = [ "<Super>BackSpace" ];
|
||||||
|
volume-step = 1;
|
||||||
|
www = [ "<Super>b" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
|
||||||
|
binding = "<Super>Return";
|
||||||
|
command = "kgx";
|
||||||
|
name = "Open terminal";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/file-roller/dialogs/new" = {
|
||||||
|
default-extension = ".tar.zst";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/system/location" = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/tweaks" = {
|
||||||
|
show-extensions-notice = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
15
users/functionalhacker/fzf.nix
Normal file
15
users/functionalhacker/fzf.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.fzf = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
defaultCommand = "fd -Hlt f";
|
||||||
|
defaultOptions = [ "-m --ansi --bind ctrl-a:toggle-all,ctrl-d:deselect-all,ctrl-t:toggle-all" ];
|
||||||
|
fileWidgetCommand = "fd -Hlt f --strip-cwd-prefix";
|
||||||
|
fileWidgetOptions = [ "--preview 'bat --color=always --style=numbers --line-range=:500 {}" ];
|
||||||
|
changeDirWidgetCommand = "fd -Hlt d";
|
||||||
|
changeDirWidgetOptions = [ "--preview 'eza -l {}'" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,9 +1,10 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
with lib.hm.gvariant;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ ./programs/firefox.nix ];
|
imports = [
|
||||||
|
./programs/default.nix
|
||||||
|
];
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
username = "functionalhacker";
|
username = "functionalhacker";
|
||||||
homeDirectory = "/home/functionalhacker";
|
homeDirectory = "/home/functionalhacker";
|
||||||
|
@ -24,292 +25,5 @@ with lib.hm.gvariant;
|
||||||
yarn
|
yarn
|
||||||
zip
|
zip
|
||||||
];
|
];
|
||||||
|
|
||||||
file = {
|
|
||||||
# Just symlink neovim configuration for now.
|
|
||||||
# Declarative configuration coming soon™
|
|
||||||
".config/nvim".source =
|
|
||||||
config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/git/dotfiles/home/.config/nvim";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings = {
|
|
||||||
"io/github/celluloid-player/celluloid" = {
|
|
||||||
dark-theme-enable = false;
|
|
||||||
mpv-config-enable = true;
|
|
||||||
mpv-config-file = "file:///home/functionalhacker/.config/mpv/mpv.conf";
|
|
||||||
mpv-input-config-enable = true;
|
|
||||||
mpv-input-config-file = "file:///home/functionalhacker/.config/mpv/input.conf";
|
|
||||||
settings-migrated = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/Connections" = {
|
|
||||||
first-run = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/a11y/mouse" = {
|
|
||||||
dwell-click-enabled = false;
|
|
||||||
dwell-threshold = 10;
|
|
||||||
dwell-time = 1.2;
|
|
||||||
secondary-click-enabled = true;
|
|
||||||
secondary-click-time = 1.2;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/calendar" = {
|
|
||||||
show-weekdate = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/input-sources" = {
|
|
||||||
show-all-sources = true;
|
|
||||||
sources = [ (mkTuple [ "xkb" "eu" ]) (mkTuple [ "xkb" "fi" ]) ];
|
|
||||||
xkb-options = [ "lv3:ralt_switch" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/peripherals/touchpad" = {
|
|
||||||
tap-to-click = true;
|
|
||||||
two-finger-scrolling-enabled = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/privacy" = {
|
|
||||||
disable-microphone = false;
|
|
||||||
old-files-age = mkUint32 14;
|
|
||||||
recent-files-max-age = -1;
|
|
||||||
remove-old-temp-files = true;
|
|
||||||
remove-old-trash-files = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/wm/keybindings" = {
|
|
||||||
close = [ "<Super>w" ];
|
|
||||||
move-to-workspace-down = [ "<Shift><Super>j" ];
|
|
||||||
move-to-workspace-left = [ "<Shift><Super>h" ];
|
|
||||||
move-to-workspace-right = [ "<Shift><Super>l" ];
|
|
||||||
move-to-workspace-up = [ "<Shift><Super>k" ];
|
|
||||||
switch-to-workspace-down = [ "<Super>j" ];
|
|
||||||
switch-to-workspace-left = [ "<Super>h" ];
|
|
||||||
switch-to-workspace-right = [ "<Super>l" ];
|
|
||||||
switch-to-workspace-up = [ "<Super>k" ];
|
|
||||||
toggle-fullscreen = [ ];
|
|
||||||
toggle-maximized = [ "<Super>f" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/settings-daemon/plugins/media-keys" = {
|
|
||||||
custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" ];
|
|
||||||
screensaver = [ "<Super>BackSpace" ];
|
|
||||||
volume-step = 1;
|
|
||||||
www = [ "<Super>b" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
|
|
||||||
binding = "<Super>Return";
|
|
||||||
command = "kgx";
|
|
||||||
name = "Open terminal";
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/file-roller/dialogs/new" = {
|
|
||||||
default-extension = ".tar.zst";
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/system/location" = {
|
|
||||||
enabled = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/tweaks" = {
|
|
||||||
show-extensions-notice = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
neovim = {
|
|
||||||
enable = true;
|
|
||||||
defaultEditor = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
zsh = {
|
|
||||||
enable = true;
|
|
||||||
syntaxHighlighting.enable = true;
|
|
||||||
enableCompletion = false;
|
|
||||||
zplug = {
|
|
||||||
enable = true;
|
|
||||||
plugins = [
|
|
||||||
{ name = "mafredri/zsh-async"; }
|
|
||||||
{
|
|
||||||
name = "sindresorhus/pure";
|
|
||||||
tags = [ "use:pure.zsh" "as:theme" ];
|
|
||||||
}
|
|
||||||
{ name = "Aloxaf/fzf-tab"; }
|
|
||||||
{ name = "wfxr/forgit"; }
|
|
||||||
{ name = "zsh-users/zsh-completions"; }
|
|
||||||
{ name = "RobSis/zsh-completion-generator"; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
initExtra = ''
|
|
||||||
# key timeout
|
|
||||||
export KEYTIMEOUT=1
|
|
||||||
|
|
||||||
# prompt customization
|
|
||||||
export PURE_PROMPT_SYMBOL="λ"
|
|
||||||
export PURE_PROMPT_VICMD_SYMBOL="y"
|
|
||||||
|
|
||||||
# fzf settings
|
|
||||||
_fzf_compgen_path() {
|
|
||||||
resultcmd="$FZF_DEFAULT_COMMAND . $1"
|
|
||||||
eval "''${resultcmd}
|
|
||||||
}
|
|
||||||
_fzf_compgen_dir() {
|
|
||||||
resultcmd="$FZF_ALT_C_COMMAND . $1"
|
|
||||||
eval "''${resultcmd}
|
|
||||||
}
|
|
||||||
# nvim ftw!
|
|
||||||
export PAGER="$EDITOR -R +\"lua require 'pager'\""
|
|
||||||
export GIT_PAGER="$EDITOR -c 'set ft=git' -R +\"lua require 'pager'\""
|
|
||||||
export MANPAGER="$EDITOR +\"lua require 'pager'\" +Man!"
|
|
||||||
export SYSTEMD_EDITOR=$EDITOR
|
|
||||||
export SYSTEMD_PAGER=less
|
|
||||||
|
|
||||||
|
|
||||||
if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
|
|
||||||
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# use <ESC> e to open command in editor
|
|
||||||
autoload edit-command-line; zle -N edit-command-line
|
|
||||||
bindkey -M vicmd e edit-command-line
|
|
||||||
|
|
||||||
# bind delete in normal mode
|
|
||||||
bindkey -M vicmd '^[[3~' delete-char
|
|
||||||
|
|
||||||
# Rebind fzf to ctrl+f
|
|
||||||
bindkey '^F' fzf-file-widget
|
|
||||||
bindkey '^T' transpose-chars
|
|
||||||
|
|
||||||
# Remove grc alias from forgit since it
|
|
||||||
# collides with the grc colorizer
|
|
||||||
unalias grc;
|
|
||||||
|
|
||||||
# Launch or attach zellij to existing session if logging in over ssh
|
|
||||||
if [[ -z "$ZELLIJ" && -n "$SSH_CONNECTION" ]]; then
|
|
||||||
exec zellij attach -c SSH
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
shellAliases = {
|
|
||||||
# Navigation
|
|
||||||
".." = "cd ..";
|
|
||||||
ls = "eza --icons --git";
|
|
||||||
|
|
||||||
# Editor
|
|
||||||
vi = "nvim";
|
|
||||||
vim = "nvim";
|
|
||||||
dv = "nvim +DiffviewOpen";
|
|
||||||
|
|
||||||
# systemd
|
|
||||||
sc = "systemctl";
|
|
||||||
scu = "systemctl --user";
|
|
||||||
jc = "journalctl";
|
|
||||||
jcu = "journalctl --user";
|
|
||||||
|
|
||||||
# Move to trash instead of remove
|
|
||||||
rm = "trash";
|
|
||||||
|
|
||||||
# git shorthands
|
|
||||||
gc = "git commit";
|
|
||||||
gac = "ga && gc";
|
|
||||||
gs = "git status";
|
|
||||||
gpull = "git pull";
|
|
||||||
gpush = "git push";
|
|
||||||
|
|
||||||
o = "xdg-open";
|
|
||||||
};
|
|
||||||
|
|
||||||
history = {
|
|
||||||
share = true;
|
|
||||||
extended = true;
|
|
||||||
ignoreAllDups = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
historySubstringSearch.enable = true;
|
|
||||||
|
|
||||||
dirHashes = {
|
|
||||||
git = "$HOME/git";
|
|
||||||
dotfiles = "$HOME/git/dotfiles";
|
|
||||||
dl = "$HOME/Downloads";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
fzf = {
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
defaultCommand = "fd -Hlt f";
|
|
||||||
defaultOptions = [ "-m --ansi --bind ctrl-a:toggle-all,ctrl-d:deselect-all,ctrl-t:toggle-all" ];
|
|
||||||
fileWidgetCommand = "fd -Hlt f --strip-cwd-prefix";
|
|
||||||
fileWidgetOptions = [ "--preview 'bat --color=always --style=numbers --line-range=:500 {}" ];
|
|
||||||
changeDirWidgetCommand = "fd -Hlt d";
|
|
||||||
changeDirWidgetOptions = [ "--preview 'eza -l {}'" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
git = {
|
|
||||||
enable = true;
|
|
||||||
userName = "Marko Korhonen";
|
|
||||||
userEmail = "marko@korhonen.cc";
|
|
||||||
|
|
||||||
extraConfig = {
|
|
||||||
user.signingkey = "F2B9F713E7ED627336DD85E444FA3F28CD931BB0";
|
|
||||||
commit = {
|
|
||||||
gpgsign = true;
|
|
||||||
signoff = true;
|
|
||||||
};
|
|
||||||
tag = {
|
|
||||||
gpgsign = true;
|
|
||||||
signoff = true;
|
|
||||||
};
|
|
||||||
merge = {
|
|
||||||
prompt = false;
|
|
||||||
conflictstyle = "diff3";
|
|
||||||
tool = "nvim";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
zellij = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
theme = "kanagawa";
|
|
||||||
session_serialization = false;
|
|
||||||
keybinds = {
|
|
||||||
unbind = "Ctrl g";
|
|
||||||
shared_except = {
|
|
||||||
_args = [ "locked" ];
|
|
||||||
"bind \"Ctrl l\"" = {
|
|
||||||
SwitchToMode = "Locked";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
locked = {
|
|
||||||
"bind \"Ctrl l\"" = {
|
|
||||||
SwitchToMode = "Normal";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
password-store = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
|
|
||||||
};
|
|
||||||
|
|
||||||
browserpass = {
|
|
||||||
enable = true;
|
|
||||||
browsers = [ "firefox" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
eza = {
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
extraOptions = [ "--git" "--icons" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
ripgrep.enable = true;
|
|
||||||
bat.enable = true;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
5
users/functionalhacker/programs/bat.nix
Normal file
5
users/functionalhacker/programs/bat.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.bat.enable = true;
|
||||||
|
}
|
16
users/functionalhacker/programs/default.nix
Normal file
16
users/functionalhacker/programs/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./programs/bat.nix
|
||||||
|
./programs/default.nix
|
||||||
|
./programs/eza.nix
|
||||||
|
./programs/firefox.nix
|
||||||
|
./programs/git.nix
|
||||||
|
./programs/neovim.nix
|
||||||
|
./programs/pass.nix
|
||||||
|
./programs/ripgrep.nix
|
||||||
|
./programs/zellij.nix
|
||||||
|
./programs/zsh.nix
|
||||||
|
];
|
||||||
|
}
|
10
users/functionalhacker/programs/eza.nix
Normal file
10
users/functionalhacker/programs/eza.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.eza = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
extraOptions = [ "--git" "--icons" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
26
users/functionalhacker/programs/git.nix
Normal file
26
users/functionalhacker/programs/git.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "Marko Korhonen";
|
||||||
|
userEmail = "marko@korhonen.cc";
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
user.signingkey = "F2B9F713E7ED627336DD85E444FA3F28CD931BB0";
|
||||||
|
commit = {
|
||||||
|
gpgsign = true;
|
||||||
|
signoff = true;
|
||||||
|
};
|
||||||
|
tag = {
|
||||||
|
gpgsign = true;
|
||||||
|
signoff = true;
|
||||||
|
};
|
||||||
|
merge = {
|
||||||
|
prompt = false;
|
||||||
|
conflictstyle = "diff3";
|
||||||
|
tool = "nvim";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
15
users/functionalhacker/programs/neovim.nix
Normal file
15
users/functionalhacker/programs/neovim.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Just symlink neovim configuration for now.
|
||||||
|
# Declarative configuration coming soon™
|
||||||
|
home.file = {
|
||||||
|
".config/nvim".source =
|
||||||
|
config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/git/dotfiles/home/.config/nvim";
|
||||||
|
};
|
||||||
|
}
|
15
users/functionalhacker/programs/pass.nix
Normal file
15
users/functionalhacker/programs/pass.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
password-store = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
|
||||||
|
};
|
||||||
|
|
||||||
|
browserpass = {
|
||||||
|
enable = true;
|
||||||
|
browsers = [ "firefox" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
5
users/functionalhacker/programs/ripgrep.nix
Normal file
5
users/functionalhacker/programs/ripgrep.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.ripgrep.enable = true;
|
||||||
|
}
|
25
users/functionalhacker/programs/zellij.nix
Normal file
25
users/functionalhacker/programs/zellij.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zellij = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
theme = "kanagawa";
|
||||||
|
session_serialization = false;
|
||||||
|
keybinds = {
|
||||||
|
unbind = "Ctrl g";
|
||||||
|
shared_except = {
|
||||||
|
_args = [ "locked" ];
|
||||||
|
"bind \"Ctrl l\"" = {
|
||||||
|
SwitchToMode = "Locked";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
locked = {
|
||||||
|
"bind \"Ctrl l\"" = {
|
||||||
|
SwitchToMode = "Normal";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
115
users/functionalhacker/programs/zsh.nix
Normal file
115
users/functionalhacker/programs/zsh.nix
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
zsh = {
|
||||||
|
enable = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
enableCompletion = false;
|
||||||
|
zplug = {
|
||||||
|
enable = true;
|
||||||
|
plugins = [
|
||||||
|
{ name = "mafredri/zsh-async"; }
|
||||||
|
{
|
||||||
|
name = "sindresorhus/pure";
|
||||||
|
tags = [ "use:pure.zsh" "as:theme" ];
|
||||||
|
}
|
||||||
|
{ name = "Aloxaf/fzf-tab"; }
|
||||||
|
{ name = "wfxr/forgit"; }
|
||||||
|
{ name = "zsh-users/zsh-completions"; }
|
||||||
|
{ name = "RobSis/zsh-completion-generator"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
initExtra = ''
|
||||||
|
# key timeout
|
||||||
|
export KEYTIMEOUT=1
|
||||||
|
|
||||||
|
# prompt customization
|
||||||
|
export PURE_PROMPT_SYMBOL="λ"
|
||||||
|
export PURE_PROMPT_VICMD_SYMBOL="y"
|
||||||
|
|
||||||
|
# fzf settings
|
||||||
|
_fzf_compgen_path() {
|
||||||
|
resultcmd="$FZF_DEFAULT_COMMAND . $1"
|
||||||
|
eval "''${resultcmd}
|
||||||
|
}
|
||||||
|
_fzf_compgen_dir() {
|
||||||
|
resultcmd="$FZF_ALT_C_COMMAND . $1"
|
||||||
|
eval "''${resultcmd}
|
||||||
|
}
|
||||||
|
# nvim ftw!
|
||||||
|
export PAGER="$EDITOR -R +\"lua require 'pager'\""
|
||||||
|
export GIT_PAGER="$EDITOR -c 'set ft=git' -R +\"lua require 'pager'\""
|
||||||
|
export MANPAGER="$EDITOR +\"lua require 'pager'\" +Man!"
|
||||||
|
export SYSTEMD_EDITOR=$EDITOR
|
||||||
|
export SYSTEMD_PAGER=less
|
||||||
|
|
||||||
|
|
||||||
|
if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
|
||||||
|
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# use <ESC> e to open command in editor
|
||||||
|
autoload edit-command-line; zle -N edit-command-line
|
||||||
|
bindkey -M vicmd e edit-command-line
|
||||||
|
|
||||||
|
# bind delete in normal mode
|
||||||
|
bindkey -M vicmd '^[[3~' delete-char
|
||||||
|
|
||||||
|
# Rebind fzf to ctrl+f
|
||||||
|
bindkey '^F' fzf-file-widget
|
||||||
|
bindkey '^T' transpose-chars
|
||||||
|
|
||||||
|
# Remove grc alias from forgit since it
|
||||||
|
# collides with the grc colorizer
|
||||||
|
unalias grc;
|
||||||
|
|
||||||
|
# Launch or attach zellij to existing session if logging in over ssh
|
||||||
|
if [[ -z "$ZELLIJ" && -n "$SSH_CONNECTION" ]]; then
|
||||||
|
exec zellij attach -c SSH
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
shellAliases = {
|
||||||
|
# Navigation
|
||||||
|
".." = "cd ..";
|
||||||
|
|
||||||
|
# Editor
|
||||||
|
vi = "nvim";
|
||||||
|
vim = "nvim";
|
||||||
|
dv = "nvim +DiffviewOpen";
|
||||||
|
|
||||||
|
# systemd
|
||||||
|
sc = "systemctl";
|
||||||
|
scu = "systemctl --user";
|
||||||
|
jc = "journalctl";
|
||||||
|
jcu = "journalctl --user";
|
||||||
|
|
||||||
|
# Move to trash instead of remove
|
||||||
|
rm = "trash";
|
||||||
|
|
||||||
|
# git shorthands
|
||||||
|
gc = "git commit";
|
||||||
|
gac = "ga && gc";
|
||||||
|
gs = "git status";
|
||||||
|
gpull = "git pull";
|
||||||
|
gpush = "git push";
|
||||||
|
|
||||||
|
o = "xdg-open";
|
||||||
|
};
|
||||||
|
|
||||||
|
history = {
|
||||||
|
share = true;
|
||||||
|
extended = true;
|
||||||
|
ignoreAllDups = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
historySubstringSearch.enable = true;
|
||||||
|
|
||||||
|
dirHashes = {
|
||||||
|
git = "$HOME/git";
|
||||||
|
dotfiles = "$HOME/git/dotfiles";
|
||||||
|
dl = "$HOME/Downloads";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue