idiosyn/home/config/nil/home.nix

364 lines
8.1 KiB
Nix
Raw Normal View History

2024-10-06 19:04:57 +02:00
{ self, nur, catppuccin, nix-index-database, niri, ripgrep-all, ... }:
{ config, lib, pkgs, ... }@args:
2024-08-18 13:47:18 +02:00
let
osConfig = args.osConfig or { };
2024-10-03 21:43:28 +02:00
bat = lib.getExe config.programs.bat.package;
col = lib.getExe' pkgs.util-linux "col";
2024-10-06 19:04:57 +02:00
nix-locate = lib.getExe' config.programs.nix-index.package "nix-locate";
2024-10-03 21:43:28 +02:00
sh = lib.getExe self.packages.${pkgs.system}.hush;
2024-08-18 13:47:18 +02:00
in {
imports = [
nur.hmModules.nur
2024-08-25 19:10:52 +02:00
self.homeModules.greedy
2024-08-18 13:47:18 +02:00
self.homeModules.locale-en_EU
2024-10-03 17:40:41 +02:00
catppuccin.homeManagerModules.catppuccin
2024-08-25 11:11:12 +02:00
niri.homeModules.config
2024-08-18 13:47:18 +02:00
] ++ self.lib.mods [
2024-08-25 19:10:52 +02:00
./gammarelay.nix
./founts.nix
./editor.nix
2024-08-25 19:10:52 +02:00
./desktop.nix
./bar.nix
./terminal.nix
2024-08-18 13:47:18 +02:00
./firefox.nix
2024-08-25 19:10:52 +02:00
./thunderbird.nix
./sioyek.nix
./texlive.nix
2024-08-25 21:57:42 +02:00
./mpv.nix
2024-08-26 13:05:56 +02:00
./music.nix
2024-08-18 13:47:18 +02:00
];
home.stateVersion = "24.11";
home.enableNixpkgsReleaseCheck = false;
2024-10-03 17:40:41 +02:00
catppuccin = {
enable = true;
pointerCursor.enable = true;
};
2024-10-06 19:04:57 +02:00
home.file.".nix-defexpr/channels/nixpkgs/programs.sqlite".source =
nix-index-database.packages.${pkgs.system}.nix-channel-index-programs;
2024-08-18 13:47:18 +02:00
home.packages = with pkgs; [
# Terminfo
kitty.terminfo
2024-10-03 16:25:45 +02:00
# Minimal POSIX shell
self.packages.${system}.hush
2024-08-18 13:47:18 +02:00
# Core utilities
(lib.meta.setPrio 0 uutils-coreutils-noprefix)
# Text manipulation
2024-08-28 11:53:20 +02:00
delta
2024-08-18 13:47:18 +02:00
sd
skim
# Networking
dogdns
whois
xh
# Filesystem
file
#xcp
# Development
pijul
# Calculator
fend
2024-09-16 20:20:06 +02:00
jaq
2024-09-17 16:31:19 +02:00
ripgrep-all.packages.${system}.default
2024-10-06 19:04:57 +02:00
# Required for Carapace nix completer
sqlite
2024-08-18 13:47:18 +02:00
];
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;
2024-11-04 12:06:19 +01:00
i18n.glibcLocales = self.packages.${pkgs.system}.locale-en_EU.override {
locales = [
"en_EU.UTF-8/UTF-8"
"en_US.UTF-8/UTF-8"
];
} |> lib.mkForce;
2024-08-18 13:47:18 +02:00
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";
};
};
2024-10-03 17:40:41 +02:00
programs.bat.enable = true;
2024-08-18 13:47:18 +02:00
programs.bottom = {
enable = true;
settings.flags = {
group = true;
battery = true;
mem_as_value = true;
network_use_binary_prefix = true;
network_use_bytes = true;
};
};
2024-10-06 19:04:57 +02:00
programs.carapace.enable = true;
2024-08-18 13:47:18 +02:00
programs.eza = {
enable = true;
2024-10-18 19:34:51 +02:00
icons = "auto";
2024-08-18 13:47:18 +02:00
git = true;
extraOptions = [
"--binary"
"--colour=automatic"
"--colour-scale=all"
"--colour-scale-mode=gradient"
"--group-directories-first"
];
};
programs.fd.enable = true;
2024-08-24 18:15:18 +02:00
programs.git = let
key = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAICczPHRwY9MAwDGlcB0QgMOJjcpLJhVU3covrW9RBS62AAAABHNzaDo=";
in {
2024-08-18 13:47:18 +02:00
enable = true;
2024-08-28 11:53:20 +02:00
delta.enable = true;
2024-08-18 13:47:18 +02:00
userName = "Mikael Voss";
userEmail = "mvs@nyantec.com";
extraConfig = {
core = {
eol = "lf";
fsync = "committed";
};
2024-08-24 18:15:18 +02:00
user.signingKey = "key::${key}";
2024-08-18 13:47:18 +02:00
init.defaultBranch = "main";
pull.rebase = true;
push.autoSetupRemote = true;
rebase.autoStash = true;
gpg.format = "ssh";
gpg.ssh.allowedSignersFile = toString (pkgs.writeText "allowed-signers" ''
2024-08-24 18:15:18 +02:00
${config.programs.git.userEmail} ${key}
2024-08-18 13:47:18 +02:00
'');
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;
};
2024-09-27 18:31:12 +02:00
programs.nushell = {
enable = true;
envFile.text = let
ls-colours = pkgs.runCommand "ls-colours" { } ''
${lib.getExe pkgs.vivid} generate catppuccin-mocha >$out
'' |> builtins.readFile;
in ''
2024-09-27 18:31:12 +02:00
load-env {
2024-10-06 19:04:57 +02:00
CARAPACE_BRIDGES: `bash`
EDITOR: `${lib.getExe config.programs.helix.package}`
LS_COLORS: `${ls-colours}`
2024-10-03 21:43:28 +02:00
MANROFFOPT: `-c`
MANPAGER: `${sh} -c '${col} -bx | ${bat} -l man -p'`
2024-09-27 18:31:12 +02:00
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
2024-09-27 18:31:12 +02:00
}
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
}
2024-09-27 18:31:12 +02:00
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 = (
2024-10-06 19:04:57 +02:00
`${nix-locate}`
--db `${nix-index-database.packages.${pkgs.system}.nix-index-database}`
--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
}
}
)
}
}
2024-10-01 21:39:40 +02:00
}
tabs -4
2024-09-27 18:31:12 +02:00
'';
};
2024-09-28 17:09:24 +02:00
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;
};
};
};
2024-08-18 13:47:18 +02:00
services.ssh-agent.enable = true;
2024-10-24 20:44:35 +02:00
systemd.user.sessionVariables = {
TMPDIR = "$XDG_RUNTIME_DIR/tmp";
XDG_CACHE_HOME = "\${XDG_CACHE_HOME:-$HOME/.cache}";
};
2024-08-18 13:47:18 +02:00
systemd.user.tmpfiles.rules = [
2024-09-17 16:36:37 +02:00
"d %C 700 - - 90d"
2024-08-18 13:47:18 +02:00
"d %t/ssh 700"
"d %T 700 - - 24h"
2024-08-18 13:47:18 +02:00
];
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;
};
}