idiosyn/home/config/nil/home.nix
2024-09-30 23:11:09 +02:00

350 lines
7.4 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ self, nur, stylix, nix-index-database, niri, ripgrep-all, ... }: { config, lib, pkgs, ... }@args:
let
osConfig = args.osConfig or { };
in {
imports = [
nur.hmModules.nur
self.homeModules.greedy
self.homeModules.locale-en_EU
nix-index-database.hmModules.nix-index
stylix.homeManagerModules.stylix
niri.homeModules.config
niri.homeModules.stylix
] ++ self.lib.mods [
./gammarelay.nix
./founts.nix
./stylix.nix
./editor.nix
./desktop.nix
./bar.nix
./terminal.nix
./firefox.nix
./thunderbird.nix
./sioyek.nix
./texlive.nix
./mpv.nix
./music.nix
];
home.stateVersion = "24.11";
home.enableNixpkgsReleaseCheck = false;
home.packages = with pkgs; [
# Terminfo
kitty.terminfo
# Core utilities
(lib.meta.setPrio 0 uutils-coreutils-noprefix)
# Text manipulation
delta
sd
skim
# Networking
dogdns
whois
xh
# Filesystem
file
#xcp
# Development
pijul
# Calculator
fend
jaq
ripgrep-all.packages.${system}.default
];
home.sessionVariables = {
TMPDIR = "$XDG_RUNTIME_DIR/tmp";
};
editorconfig = {
enable = true;
settings = {
"*" = {
indent_style = "tab";
tab_width = 4;
end_of_line = "lf";
charset = "utf-8";
trim_trailing_whitespace = true;
insert_final_newline = true;
};
"*.nix" = {
indent_style = "space";
indent_size = 2;
};
};
};
home.shellAliases = {
icat = "kitten icat";
jq = "jaq";
};
home.preferXdgDirectories = true;
programs.aria2 = {
enable = true;
settings = {
max-concurrent-downloads = 4;
max-connection-per-server = 2;
min-split-size = "16M";
remote-time = true;
split = 4;
http-accept-gzip = true;
max-overall-upload-limit = "256K";
dscp = 8;
enable-mmap = true;
file-allocation = "falloc";
};
};
programs.bat.enable = true;
programs.bottom = {
enable = true;
settings.flags = {
group = true;
battery = true;
color = "gruvbox";
mem_as_value = true;
network_use_binary_prefix = true;
network_use_bytes = true;
};
};
programs.eza = {
enable = true;
icons = true;
git = true;
extraOptions = [
"--binary"
"--colour=automatic"
"--colour-scale=all"
"--colour-scale-mode=gradient"
"--group-directories-first"
];
};
programs.fd.enable = true;
programs.fish = {
enable = true;
functions = {
fish_prompt = ''
set -l user_colour 'green'
if fish_is_root_user
set user_colour 'red'
end
echo -n -s (set_color $user_colour --bold) $USER@ (prompt_hostname) \
(set_color blue --bold) ' ' (prompt_pwd) ' ' (set_color normal)
'';
fish_right_prompt = ''
set -l st $status
if test $st -ne 0
set_color red --bold
printf "%s " (sysexit $st)
set_color normal
end
'';
fish_title = "prompt_pwd";
sysexit = builtins.readFile ./sysexit.fish;
};
interactiveShellInit = ''
if type -q tabs
tabs -4
end
'';
};
programs.git = let
key = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAICczPHRwY9MAwDGlcB0QgMOJjcpLJhVU3covrW9RBS62AAAABHNzaDo=";
in {
enable = true;
delta.enable = true;
userName = "Mikael Voss";
userEmail = "mvs@nyantec.com";
extraConfig = {
core = {
eol = "lf";
fsync = "committed";
};
user.signingKey = "key::${key}";
init.defaultBranch = "main";
pull.rebase = true;
push.autoSetupRemote = true;
rebase.autoStash = true;
gpg.format = "ssh";
gpg.ssh.allowedSignersFile = toString (pkgs.writeText "allowed-signers" ''
${config.programs.git.userEmail} ${key}
'');
commit.gpgSign = true;
tag.gpgSign = true;
};
};
programs.man.generateCaches =
osConfig.documentation.man.generateCaches or false;
programs.ripgrep.enable = true;
programs.ssh = {
enable = true;
compression = true;
controlMaster = "auto";
controlPath = "\${XDG_RUNTIME_DIR}/ssh/%r@%n:%p";
controlPersist = "1m";
matchBlocks = {
"*.nyantec.com".user = "mvs";
"solitary.social" = {
user = "nil";
forwardAgent = true;
};
};
serverAliveInterval = 10;
serverAliveCountMax = 60;
};
programs.nushell = {
enable = true;
envFile.text = let
ls-colours = pkgs.runCommand "ls-colours" { } ''
${lib.getExe pkgs.vivid} generate catppuccin-mocha >$out
'' |> builtins.readFile;
in ''
load-env {
EDITOR: r#'${lib.getExe config.programs.helix.package}'#
LS_COLORS: r#'${ls-colours}'#
PROMPT_COMMAND: {
let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {
null => $env.PWD
"" => '~'
$relative_pwd => ([~ $relative_pwd] | path join)
}
[
(if (is-admin) { ansi red_bold } else { ansi green_bold })
(sys host | get hostname)
(char space)
(ansi blue_bold)
($dir | path split | last)
(ansi reset)
(char space)
] | str join
}
PROMPT_COMMAND_RIGHT: {
let duration = $env.CMD_DURATION_MS | into int
if $duration >= 2000 {
[ (ansi light_red) ($duration | into duration --unit ms) ] | str join
}
}
PROMPT_INDICATOR: { " " }
SSH_AUTH_SOCK: $"($env.XDG_RUNTIME_DIR)/ssh-agent"
TMPDIR: $"($env.XDG_RUNTIME_DIR)/tmp"
}
'';
configFile.text = ''
$env.config = {
show_banner: false
history: {
max_size: 131072
sync_on_enter: true
file_format: "sqlite"
isolation: true
}
use_kitty_protocol: true
keybindings: [
{
name: completion_menu
modifier: control
keycode: char_i
mode: [ emacs vi_normal vi_insert ]
event: {
until: [
{ send: menu name: completion_menu }
{ send: menunext }
{ edit: complete }
]
}
}
]
};
'';
};
services.pueue = {
enable = true;
settings = {
shared = {
use_unix_socket = true;
};
client = {
status_time_format = "%H:%M:%S %Z";
status_datetime_format = "%Y-%m-%d %H:%M:%S %Z";
};
daemon = {
groups.default = 0;
callback = lib.mkIf (osConfig.hardware.graphics.enable or false)
''${lib.getExe pkgs.libnotify} "Task {{ id }} {{ result }}" "Command: {{ command }}\nPath: {{ path }}\nStatus: {{ exit_code }}'';
callback_log_lines = 4;
};
};
};
services.ssh-agent.enable = true;
systemd.user.tmpfiles.rules = [
"d %C 700 - - 90d"
"d %t/ssh 700"
"d %T 700 - - 24h"
];
xdg.userDirs =
let
home = config.home.homeDirectory;
in {
enable = true;
desktop = "${home}/tmp";
documents = "${home}/var";
download = "${home}/tmp";
pictures = "${home}/img";
music = "${home}/msc";
publicShare = null;
templates = null;
videos = null;
};
}