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-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
|
2024-08-28 13:14:34 +02:00
|
|
|
|
./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;
|
|
|
|
|
|
|
|
|
|
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;
|
2024-09-27 22:14:00 +02:00
|
|
|
|
envFile.text = let
|
|
|
|
|
ls-colours = pkgs.runCommand "ls-colours" { } ''
|
2024-10-13 11:24:31 +02:00
|
|
|
|
${lib.getExe pkgs.buildPackages.vivid} generate catppuccin-mocha >$out
|
2024-09-27 22:14:00 +02:00
|
|
|
|
'' |> builtins.readFile;
|
|
|
|
|
in ''
|
2024-09-27 18:31:12 +02:00
|
|
|
|
load-env {
|
2024-10-06 19:04:57 +02:00
|
|
|
|
CARAPACE_BRIDGES: `bash`
|
2024-10-06 19:03:17 +02:00
|
|
|
|
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 22:14:00 +02:00
|
|
|
|
|
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: {
|
2024-10-01 13:57:34 +02:00
|
|
|
|
[
|
|
|
|
|
(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
|
2024-09-27 22:30:08 +02:00
|
|
|
|
|
|
|
|
|
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
|
2024-09-27 21:38:46 +02:00
|
|
|
|
|
|
|
|
|
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 }
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
2024-10-01 21:04:19 +02:00
|
|
|
|
|
|
|
|
|
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}`
|
2024-10-01 21:04:19 +02:00
|
|
|
|
--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"
|
2024-09-17 16:37:51 +02:00
|
|
|
|
"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;
|
|
|
|
|
};
|
|
|
|
|
}
|