idiosyn/home/config/nil/home.nix

340 lines
7.5 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, catppuccin, nix-index-database, niri, ripgrep-all, ... }: { config, lib, pkgs, ... }@args:
let
osConfig = args.osConfig or { };
bat = lib.getExe config.programs.bat.package;
col = lib.getExe' pkgs.util-linux "col";
sh = lib.getExe self.packages.${pkgs.system}.hush;
in {
imports = [
nur.hmModules.nur
self.homeModules.greedy
self.homeModules.locale-en_EU
nix-index-database.hmModules.nix-index
catppuccin.homeManagerModules.catppuccin
niri.homeModules.config
] ++ self.lib.mods [
./gammarelay.nix
./founts.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;
catppuccin = {
enable = true;
pointerCursor.enable = true;
};
home.packages = with pkgs; [
# Terminfo
kitty.terminfo
# Minimal POSIX shell
self.packages.${system}.hush
# 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
];
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.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;
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.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}'#
MANROFFOPT: `-c`
MANPAGER: `${sh} -c '${col} -bx | ${bat} -l man -p'`
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: {
[
(ansi light_red)
($env.CMD_DURATION_MS | into int | 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 }
]
}
}
]
hooks: {
command_not_found: {
|cmd_name| (
try {
let pkgs = (
`${config.programs.nix-index.package}/bin/nix-locate`
--top-level --type x --type s --no-group --whole-name --at-root --minimal
$"/bin/($cmd_name)"
)
if ($pkgs | is-empty) {
null
} else {
$pkgs | split row "\n"
| each {|pkg| $" nixpkgs#($pkg)\n"}
| prepend $"($cmd_name) is provided by:\n"
| append "\n" | str join
}
}
)
}
}
}
tabs -4
'';
};
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;
};
}