Add some nix home configuration

This commit is contained in:
David Morgan 2022-09-10 15:51:06 +01:00
parent afbfbc6670
commit a43429841a
10 changed files with 412 additions and 0 deletions

18
nixconf/clojure.nix Normal file
View File

@ -0,0 +1,18 @@
{ config, pkgs, lib, isDarwin, isLinux, ... }:
let
inherit (lib) optionals;
in
{
home.packages = with pkgs; [
babashka
clj-kondo
clojure
clojure-lsp
jet
maven
neil
]
++ optionals stdenv.isDarwin [ (leiningen.override { jdk = jdk8; }) ]
++ optionals stdenv.isLinux [ leiningen ];
}

64
nixconf/common.nix Normal file
View File

@ -0,0 +1,64 @@
{ config, pkgs, ... }:
{
imports = [
./zsh.nix
];
home.packages = with pkgs; [
bat
bottom
curl
difftastic
#docker
#docker-compose
duf
du-dust
elinks
exa
fd
fzf
git
gnupg
gopass
gopass-jsonapi
heroku
isync
jq
lscolors
lynx
mopidy
mopidy-ytmusic
mopidy-scrobbler
mpv
mu
neovim
nix-info
#pinentry
#procs
libqalculate
ripgrep
rlwrap
sd
tealdeer
ugrep
vim
w3m
#zenith
];
programs.gpg.enable = true;
programs.tmux = {
enable = true;
terminal = "screen-256color";
#tmuxp.enable = true;
extraConfig = ''
set-option -g status-bg '#666666'
set-option -g status-fg '#aaaaaa'
set-option -g status-left-length 50
set-option -g status-right " #(date ''\'+%a, %b %d - %I:%M''\') "
'';
};
}

1
nixconf/config.nix Normal file
View File

@ -0,0 +1 @@
{ allowUnfree = true; }

36
nixconf/darwin.nix Normal file
View File

@ -0,0 +1,36 @@
{ config, pkgs, ... }:
{
imports = [
./clojure.nix
];
home.packages = with pkgs; [
awscli2
coreutils
curl
diffutils
((emacsPackagesFor emacsMacport).emacsWithPackages(ps: [ ps.vterm ]))
findutils
gh
#gnused
#adoptopenjdk-hotspot-bin-8
#lima
mpv
mu
nix # on darwin we are not using nixos (duh)
openvpn
pinentry_mac
pgcli
pgformatter
postgresql
#python310Packages.sqlparse
sqls
wget
];
programs.java = {
enable = true;
#package = (pkgs.jdk8.overrideAttrs (_: { postPatch = "ln -nsf ../zulu-8.jdk/Contents/Home/man man"; }));
};
}

25
nixconf/djmuk1.nix Normal file
View File

@ -0,0 +1,25 @@
{ config, pkgs, ... }:
{
imports = [
./common.nix
./linux-server.nix
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "djm";
home.homeDirectory = "/home/djm";
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "21.05";
}

25
nixconf/egalmoth.nix Normal file
View File

@ -0,0 +1,25 @@
{ config, pkgs, ... }:
{
imports = [
./common.nix
./linux-dev.nix
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "djm";
home.homeDirectory = "/home/djm";
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "21.11";
}

35
nixconf/linux-dev.nix Normal file
View File

@ -0,0 +1,35 @@
{ config, pkgs, ... }:
{
imports = [
./clojure.nix
];
#services.emacs.package = pkgs.emacsUnstable;
nixpkgs.overlays = [
(import (builtins.fetchTarball {
url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
}))
];
programs.emacs = {
enable = true;
#package = pkgs.emacsGcc;
package = pkgs.emacs28NativeComp;
extraPackages = (epkgs: [ epkgs.vterm ] );
};
home.packages = with pkgs; [
docker
docker-compose
gcc
gnumake
mpv
mu
notmuch
nix
protonmail-bridge
protonvpn-cli
youtube-dl
];
}

15
nixconf/linux-server.nix Normal file
View File

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
#services.emacs.package = pkgs.emacsUnstable;
home.packages = with pkgs; [
bitlbee
bitlbee-discord
emacs-nox
heroku
irssi
];
}

25
nixconf/otm.nix Normal file
View File

@ -0,0 +1,25 @@
{ config, pkgs, ... }:
{
imports = [
./common.nix
./darwin.nix
];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "djm";
home.homeDirectory = "/Users/djm";
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "21.11";
}

168
nixconf/zsh.nix Normal file
View File

@ -0,0 +1,168 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
zsh-completions
];
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
programs.keychain = {
enable = true;
agents = [ "ssh" "gpg"];
keys = [ "id_rsa" "id_ed25519" "C171251002C200F2" ];
# extraFlags = [ "--quiet" "--ignore-missing" ];
};
programs.zsh = {
enable = true;
enableCompletion = true;
enableAutosuggestions = true;
defaultKeymap = "emacs";
history = {
size = 100000;
save = 100000;
};
profileExtra = ''
[[ -f ~/.nix-profile/etc/profile.d/nix.sh ]] && . ~/.nix-profile/etc/profile.d/nix.sh
path=(~/bin
~/.local/bin
~/go/bin/
$path)
'';
shellAliases = {
cp = "cp -iv";
mv = "mv -iv";
mkdir = "mkdir -v";
pp = "pushbullet push \"Pixel\" link \"\${1}\" \"\${1}\"";
upgrade_emacs = "emacs -Q --batch -L \"~/.emacs.d/lisp/\" -l \"init-packages.el\" --eval \"(my/upgrade-packages)\"";
# Git log aliases from the omz git plugin
gl = "git pull";
glg = "git log --stat";
glgp = "git log --stat -p";
glgg = "git log --graph";
glgga = "git log --graph --decorate --all";
glgm = "git log --graph --max-count=10";
glo = "git log --oneline --decorate";
glol = "git log --graph --pretty=\"%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset\"";
glols = "git log --graph --pretty=\"%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset\" --stat";
glod = "git log --graph --pretty=\"%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset\"";
glods = "git log --graph --pretty=\"%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset\" --date=short";
glola = "git log --graph --pretty=\"%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset\" --all";
glog = "git log --oneline --decorate --graph";
gloga = "git log --oneline --decorate --graph --all";
};
initExtra = ''
# Taken from prezto tmux plugin
if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" && -z "$INSIDE_EMACS" && -z "$SSH_TTY" ]]; then
tmux start-server
if ! tmux has-session 2> /dev/null; then
tmux new-session -d -s "0" \; set-option -t "0" destroy-unattached off &> /dev/null
fi
exec tmux -u attach-session -d
fi
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow -g "!{.git,node_modules}/*" 2> /dev/null'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="rg --hidden --files --sort-files --null | xargs -0 dirname | sort -u"
if [ -d "~/fzf-git" ]; then
source ~/fzf-git/functions.sh
source ~/fzf-git/key-binding.zsh
fi
autopair-init
enable-fzf-tab
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
# disable sort when completing `git checkout`
zstyle ''\':completion:*:git-checkout:*''\' sort false
# set descriptions format to enable group support
zstyle ''\':completion:*:descriptions''\' format ''\'[%d]''\'
# Allow tab to expand aliases
zstyle ':completion:*' completer _expand_alias _complete _ignored
# set list-colors to enable filename colorizing
#zstyle ''\':completion:*''\' list-colors ''${(s.:.)LS_COLORS}
# preview directory''\'s content with exa when completing cd
zstyle ''\':fzf-tab:complete:cd:*''\' fzf-preview ''\'exa -1 --color=always ''$realpath''\'
# switch group using `,` and `.`
zstyle ''\':fzf-tab:*''\' switch-group ''\',''\' ''\'.''\'
set -o noclobber append_history share_history
test -e "~/.iterm2_shell_integration.zsh" && source "~/.iterm2_shell_integration.zsh" || true
if [ "$(uname 2> /dev/null)" = "Darwin" ]; then
#colima status 2>/dev/null || ( nohup colima start & ) >/dev/null 2>&1
pgrep -q openvpn || ( pushd ~/otm-vpn ; nohup sudo -C 20 openvpn --config otm.ovpn --auth-user-pass <(gpg -qd ~/otm-vpn/vpn_creds.txt.gpg) & ; popd ) >/dev/null 2>&1
fi
function generate () { gopass generate -s -p $1 $((RANDOM % 14 + 45)) }
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
'';
plugins = with pkgs; [
{
name = "zsh-autopair";
src = zsh-autopair;
file = "share/zsh/zsh-autopair/autopair.zsh";
}
{
name = "zsh-fzf-tab";
src = zsh-fzf-tab;
file = "share/fzf-tab/fzf-tab.zsh";
}
{
name = "zsh-fast-syntax-highlighting";
src = zsh-fast-syntax-highlighting;
file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh";
}
{
name = "zsh-powerlevel10k";
src = zsh-powerlevel10k;
file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";
}
{
name = "zsh-history-substring-search";
src = zsh-history-substring-search;
file = "share/zsh-history-substring-search/zsh-history-substring-search.zsh";
}
{
name = "forgit";
src = fetchFromGitHub {
owner = "wfxr";
repo = "forgit";
rev = "810735294107ef1b1de66cf1cdfc358fc14049ac";
sha256 = "11mydkl8psic57qzkzyjlff9wl6inwx9hn3a0vqyfr78pv6vk23y";
};
file = "forgit.plugin.zsh";
}
{
name = "zsh-edit";
src = fetchFromGitHub {
owner = "marlonrichert";
repo = "zsh-edit";
rev = "17b17e5f32fc69349cb9474cf591d5c74e399cdc";
sha256 = "0nvb7jril7in5b0279z25vmlc0karhagmfsxpjw1rzni5qpyak1s";
};
file = "zsh-edit.plugin.zsh";
}
];
};
}