dotfiles/modules/profiles/base.nix

320 lines
8.6 KiB
Nix
Raw Normal View History

2022-07-15 13:11:54 +02:00
{ config
, lib
, pkgs
2024-02-12 10:10:32 +01:00
, inputs
2022-07-15 13:11:54 +02:00
, ...
}:
with lib;
let
2023-07-15 12:46:53 +02:00
f = pkgs.writeFishApplication {
name = "f";
runtimeInputs = with pkgs; [ fzf bat ];
2023-08-26 11:43:29 +02:00
text = /* fish */ ''
fzf --query "$argv" \
--multi \
--bind "enter:become($EDITOR {+})" \
--preview "bat --color=always --style=header,grid --line-range :500 {+}"
2023-07-15 12:46:53 +02:00
'';
};
2023-08-26 11:43:56 +02:00
which-nix = pkgs.writeFishApplication {
name = "which-nix";
2023-09-10 15:07:55 +02:00
runtimeInputs = with pkgs; [ which coreutils-full procps ];
2023-08-26 11:43:56 +02:00
text = /* fish */ ''
2023-09-10 15:07:55 +02:00
function recurse -a path;
if not test -f "$path"
return
end
echo $path
if test -L $path
recurse (readlink $path)
end
end
2023-09-22 10:14:12 +02:00
2023-09-10 15:07:55 +02:00
for arg in $argv
recurse (which $arg)
end
2023-08-26 11:43:56 +02:00
'';
completions = /* fish */ ''
complete -c which-nix -fa '(__fish_complete_command)'
'';
};
2023-09-10 15:07:55 +02:00
gi = pkgs.writeFishApplication {
name = "gi";
2024-03-21 18:46:06 +01:00
runtimeInputs = with pkgs; [ fzf gum curl coreutils-full ];
2023-09-10 15:07:55 +02:00
text = /* fish */ ''
set url https://www.gitignore.io/api
2023-09-10 15:07:55 +02:00
if test (count $argv) -eq 0
set choice ( curl -sL $url/list \
| string split "," \
| fzf -m \
| string join "," )
else
set choice (string join "," $argv[1..])
end
2024-03-21 18:46:06 +01:00
set contents "$(curl -sL $url/$choice | head -n -2 | tail -n +4)"
2023-09-10 15:07:55 +02:00
if gum confirm "Overwrite current .gitignore?"
2024-03-21 18:46:06 +01:00
echo "$contents" > .gitignore
2023-09-10 15:07:55 +02:00
else
2024-03-21 18:46:06 +01:00
echo "$contents" >> .gitignore
2023-09-10 15:07:55 +02:00
end
'';
completions = /* fish */ ''
set args (curl -sL https://www.gitignore.io/api/list | string split ",")
complete -c gi -fa "$args"
'';
};
in
2022-07-15 13:11:54 +02:00
{
2023-09-25 18:29:29 +02:00
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGoAqa2m7hIzZ2LS96Z+RCIlRvhBM/j7h27tMBCwMT+a" # Moritz
];
2022-07-15 13:11:54 +02:00
users.users.moritz = {
isNormalUser = true;
home = "/home/moritz";
2022-10-06 20:19:59 +02:00
extraGroups = [ "wheel" "networkmanager" "video" ];
2024-03-21 17:19:06 +01:00
# initialPassword = "password"; # CHANGE ME PLEASE
2022-07-15 13:11:54 +02:00
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGoAqa2m7hIzZ2LS96Z+RCIlRvhBM/j7h27tMBCwMT+a" # Moritz
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhtwHDGAZshiQWKkCcPWV9tC83b+bKBgjDcjP/N2CKO" # Laptop
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKl8gMhwSf1NsP5gp14xbbyjqQLZzcHLb/XKRMoHdXgI" # Desktop
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDHlemuKagHwz2T5rEwgJNlVUdUdOXyPtCEzD73CrwY2zmpR4AMj7y9u3Rm7HwHUDjLap1ZFwg+53bAsVP6HFZccCXoIfO/8BL0WDGQJrfgb+A+UiRhSqSvyZ77bGJkadbBkadguz3qR3PHcb41DOlhuqVcHxsY8ceHMxAuyb0pLJVJLeytMD+CHS/r7hoj2hckTNAZ+VhCXBtdZfZ7uPUBxLfluYRNNMmdwCglsg3RUS242nJUzy3A84+CXIGeWmNG9Fu45IDkwMthxSW9klyU9R38R9DBDcugkyb6vz+JKSuRVAa47qh/kmtsYekfL3ul9D2JN32P8S+6ZoXx+gXupGJ0ltwJWAFkhLJ+yeXj9kCOv/mIUmCB14jMGsvKiSwV25O/twyjqe2LEkMVgimgrjEYoHu+ZTyp0iFtUvSrFo4tsAhfWPV9yj4F/hUksW7xKIwq5Niyx7he5M/XddudtnAximyiBDGCdJm1Ejl0UaGa6ZQv7y6VZdx0PyZuraT7l9ub8so6JlE4cVgSSU9vE0IS2QqBuHhsIjh8RVksoTR2NQbeDdGaGpGnq2C8y0rDXwE/EJA4LK45khX/GPn73n8F0kBG8dBrWgRDAEODpmebScO7d5mCeM0z3lPcRmh+3e3DPnVVOl+uR7udlc7NauLzl7q913UtxZaF1PlD7Q==" # GPG
];
};
time.timeZone = "Europe/Berlin";
my = {
2024-02-12 10:10:32 +01:00
nixpkgs = {
overlays = [
(_: prev:
{
nur = import inputs.nur {
pkgs = prev;
nurpkgs = prev;
};
}
)
(
final: _:
with final.lib;
rec {
fishFile =
{ name
, destination
, content
, checkPhase ? null
}:
final.writeTextFile {
inherit name destination;
executable = true;
allowSubstitutes = true;
preferLocalBuild = false;
text = ''
#!${getExe final.fish}
${content}
'';
checkPhase =
if checkPhase == null then ''
runHook preCheck
${getExe final.fish} -n "$target"
runHook postCheck
''
else checkPhase;
};
writeFishApplication =
{ name
, text
, completions ? null
, runtimeInputs ? [ ]
, checkPhase ? null
}:
let
runtimeHeader = optionalString (runtimeInputs != [ ])
''export PATH="${makeBinPath runtimeInputs}:$PATH"'';
script = fishFile {
inherit checkPhase;
name = "${name}_script";
destination = "/bin/${name}";
content = concatLines [ runtimeHeader text ];
};
completions_file = fishFile {
inherit checkPhase;
name = "${name}_completions";
destination = "/share/fish/vendor_completions.d/${name}.fish";
content = concatLines [ runtimeHeader completions ];
};
in
final.symlinkJoin {
inherit name;
paths = [
script
] ++ optional (completions != null) completions_file;
};
}
)
(
_: prev: {
xorg = prev.xorg // {
lndir = prev.xorg.lndir.overrideAttrs (_: {
meta.mainProgram = "lndir";
});
};
}
)
];
channels = {
master = inputs.master;
stable = inputs.stable;
};
};
2022-10-15 20:00:09 +02:00
bin.enable = true;
2022-07-15 13:11:54 +02:00
shell = {
abbreviations = {
us = "systemctl --user";
2022-10-09 20:49:35 +02:00
rs = "sudo systemctl";
2023-09-23 09:46:46 +02:00
uj = "journalctl --user";
rj = "sudo journalctl";
2024-10-25 07:46:19 +02:00
lg = "lazygit";
2022-07-15 13:11:54 +02:00
};
aliases = {
2023-09-25 18:29:29 +02:00
ls = "${getExe pkgs.eza} -lh --icons --git";
2022-07-15 13:11:54 +02:00
cat = "bat";
rm = "rm -i";
mv = "mv -i";
2023-01-01 15:28:13 +01:00
nixos-update = "pushd ~/.dotfiles && nix flake update && popd";
2022-07-15 13:11:54 +02:00
};
variables = { EDITOR = "vim"; };
};
2022-08-20 14:21:15 +02:00
programs = {
2022-10-15 20:00:09 +02:00
direnv.enable = true;
2022-10-09 20:51:45 +02:00
fish.enable = true;
2022-10-15 20:00:09 +02:00
git.enable = true;
gpg.enable = true;
nix = {
gc.enable = true;
optimise.enable = true;
};
2023-04-25 18:55:15 +02:00
tmux.enable = true;
2023-04-28 08:11:44 +02:00
tmux.keybinds = {
prefix = {
"-" = "split-window -v";
"|" = "split-window -h";
"C-l" = "send-keys C-l";
"R" = "source-file $XDG_CONFIG_HOME/tmux/tmux.conf \\; display-message 'Reloaded tmux.conf'";
"f" = "new-window ts";
"a" = "new-window ta";
2023-04-28 08:11:44 +02:00
};
copy-mode-vi = {
"v" = "send -X begin-selection";
"V" = "send -X select-line";
"C-v" = "send -X rectangle-toggle";
};
};
2022-08-20 14:21:15 +02:00
};
2022-07-15 13:11:54 +02:00
};
console.keyMap = "de";
environment.systemPackages = with pkgs; [
# archives
2023-05-27 11:58:10 +02:00
ouch
2022-07-15 13:11:54 +02:00
# monitoring
bottom
# nix
2023-08-26 11:43:56 +02:00
nix-output-monitor
2022-07-15 13:11:54 +02:00
nixpkgs-fmt
2023-08-26 11:43:56 +02:00
which-nix
2022-07-15 13:11:54 +02:00
2023-09-23 09:49:35 +02:00
# utils
2024-10-24 11:47:19 +02:00
(viu.override { withSixel = true; })
2022-07-15 13:11:54 +02:00
bat
cht-sh
f
2023-09-23 09:49:35 +02:00
fd
gi
2024-10-24 11:47:19 +02:00
lazygit
2023-09-23 09:49:35 +02:00
parallel
2022-12-23 12:40:37 +01:00
ripgrep
vim
2022-07-15 13:11:54 +02:00
wget
];
2023-09-22 10:14:12 +02:00
fonts = {
enableDefaultPackages = true;
2024-08-19 09:54:40 +02:00
packages = [
(pkgs.nerdfonts.override {
2023-09-22 10:14:12 +02:00
fonts = [ "FiraCode" ];
})
2024-08-19 09:54:40 +02:00
pkgs.master.intel-one-mono
2023-09-22 10:14:12 +02:00
];
};
2022-07-15 13:11:54 +02:00
programs = {
mtr.enable = true;
2023-10-10 11:50:54 +02:00
command-not-found.enable = false;
2022-07-15 13:11:54 +02:00
};
services = {
sshd.enable = true; # for agenix
btrfs.autoScrub.enable =
lib.mkDefault
(builtins.any (filesystem: filesystem.fsType == "btrfs")
(builtins.attrValues config.fileSystems));
};
2022-10-09 20:49:35 +02:00
i18n.extraLocaleSettings = {
2023-01-28 13:46:23 +01:00
# LC_NUMERIC = "de_DE.UTF-8";
2022-10-09 20:49:35 +02:00
LC_PAPER = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
2022-07-15 13:11:54 +02:00
home-manager.users.moritz = {
programs = {
# Let Home Manager install and manage itself.
home-manager.enable = true;
2023-03-18 06:14:11 +01:00
fzf = {
enable = true;
defaultOptions = [
"--height 50%"
"--bind alt-j:preview-down,alt-k:preview-up"
2023-03-18 06:14:11 +01:00
];
};
zoxide = {
enable = true;
options = [
"--cmd c"
];
};
starship.enable = true;
2022-07-15 13:11:54 +02:00
};
home = {
username = "moritz";
homeDirectory = "/home/moritz";
stateVersion = "21.05";
};
xdg.userDirs.enable = true;
};
system.activationScripts.diff = ''
if [ -e /run/current-system ]; then
${pkgs.nvd}/bin/nvd --nix-bin-dir ${pkgs.nix}/bin diff /run/current-system/ "$systemConfig"
fi
'';
2022-07-15 13:11:54 +02:00
}