392 lines
7.7 KiB
Nix
392 lines
7.7 KiB
Nix
{ 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.vim = {
|
||
enable = true;
|
||
settings = {
|
||
background = "dark";
|
||
expandtab = false;
|
||
number = true;
|
||
shiftwidth = 4;
|
||
tabstop = 4;
|
||
};
|
||
extraConfig = ''
|
||
" no Vi compatibility
|
||
set nocompatible
|
||
|
||
" Unicode support
|
||
set encoding=utf-8
|
||
|
||
" special characters
|
||
set list
|
||
set listchars=tab:»·,trail:·,extends:…
|
||
|
||
set ruler
|
||
|
||
" movement
|
||
noremap r h
|
||
noremap R H
|
||
noremap n j
|
||
noremap t k
|
||
noremap h l
|
||
noremap H L
|
||
|
||
" beginning of previous word
|
||
noremap p b
|
||
|
||
" end of word
|
||
noremap l e
|
||
noremap L E
|
||
|
||
" change one char
|
||
noremap X s
|
||
|
||
" repeat search
|
||
noremap ; n
|
||
noremap : N
|
||
|
||
" paste
|
||
noremap s p
|
||
noremap S P
|
||
|
||
" join lines
|
||
noremap N J
|
||
|
||
" change
|
||
noremap e c
|
||
noremap E C
|
||
|
||
" replace
|
||
noremap z r
|
||
noremap Z R
|
||
|
||
" inclusive jump
|
||
noremap m f
|
||
noremap M F
|
||
|
||
" exlusive jump
|
||
noremap f t
|
||
noremap F T
|
||
|
||
" command mode
|
||
noremap - :
|
||
'';
|
||
};
|
||
|
||
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 {
|
||
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
|
||
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.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;
|
||
};
|
||
}
|