nix-config/home.nix
2025-04-22 10:20:12 +02:00

536 lines
13 KiB
Nix

{ config, pkgs, lib, ... }:
{
imports = [
modules/gnome
modules/niri
modules/sops
modules/sway
modules/waybar
];
home = {
username = "muhh";
homeDirectory = "/home/muhh";
activation.setupEtc = config.lib.dag.entryAfter [ "writeBoundary" ] ''
/run/current-system/sw/bin/systemctl start --user sops-nix
'';
packages = with pkgs; [
_1password-cli
_1password-gui
atkinson-hyperlegible
atkinson-monolegible
alacritty
blueman
brightnessctl
chafa
curl
darktable
ddcutil
ddev
devenv
distrobox
# dog
fastfetch
fd
ffmpegthumbnailer
fuzzel
git
gurk-rs
heroku
htop
httpie
jq
just
libreoffice
localsend
nerd-fonts.iosevka
maid
mediainfo
mpv
morgen
obsidian
offpunk
pamixer
pavucontrol
powertop
prettyping
qutebrowser
rclone
rockbox-utility
rose-pine-cursor
signal-desktop
solargraph
sops
spot
sxiv
steam-run
sway-launcher-desktop
tmux
uni
unzip
via
wget
whois
wl-clipboard
wl-mirror
vivaldi
xdg-utils
zellij
zulip
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# You can also manage environment variables but you will have to manually
# source
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/muhh/etc/profile.d/hm-session-vars.sh
#
# if you don't want to manage your shell through Home Manager.
sessionVariables = {
EDITOR = "nvim";
};
};
accounts = {
email = {
accounts = {
privat = {
primary = true;
address = "markus@heurung.net";
realName = "Markus Heurung";
userName = "markus@heurung.net";
passwordCommand = ''(/run/current-system/sw/bin/cat $XDG_RUNTIME_DIR/secrets/mail/privat/password)'';
imap.host = "imap.mailbox.org";
# neomutt.enable = true;
mbsync = {
enable = true;
create = "both";
};
};
};
};
};
programs = {
atuin = {
enable = true;
enableFishIntegration = true;
flags = [
"--disable-up-arrow"
];
settings = {
auto_sync = true;
history_filter = [
"^..$"
"^cd "
"^ls "
"^mv "
"^rm "
];
key_path = config.sops.secrets.atuin_key.path;
};
};
bat = {
enable = true;
};
btop = {
enable = true;
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
firefox = {
enable = true;
};
fish = {
enable = true;
shellAliases = {
cat = "bat";
ping = "prettyping";
};
};
fzf = {
enable = true;
enableFishIntegration = true;
};
ghostty = {
enable = true;
enableFishIntegration = true;
};
git = {
enable = true;
userEmail = "markus@heurung.net";
userName = "Markus Heurung";
extraConfig = {
apply.whitespace = "warn";
color = {
diff = "auto";
status = "auto";
branch = "auto";
ui = "always";
};
fetch.prune = true;
init.defaultBranch = "main";
pull.ff = "only";
pull.rebase = true;
push.default = "current";
status.submodule = "1";
user.useConfigOnly = true;
};
delta = {
enable = true;
options = {
light = false;
line-numbers = true;
navigate = true;
};
};
ignores = [
"*~"
".DS_Store"
".sublime-*"
"*.swp"
];
};
keychain = {
enable = true;
enableFishIntegration = true;
keys = [
"id_ed25519"
"id_rsa"
];
};
kitty = {
enable = true;
shellIntegration.enableFishIntegration = true;
keybindings = {
"ctrl+shift+g" = "show_last_command_output";
"ctrl+alt+enter" = "launch --cwd=current";
"ctrl+alt+t" = "launch --type=tab --cwd=current";
"ctrl+h" = "neighboring_window left";
"ctrl+j" = "neighboring_window bottom";
"ctrl+k" = "neighboring_window top";
"ctrl+l" = "neighboring_window right";
"ctrl+shift+h" = "move_window left";
"ctrl+shift+j" = "move_window down";
"ctrl+shift+k" = "move_window up";
"ctrl+shift+l" = "move_window right";
"ctrl+shift+z" = "next_layout";
"ctrl+shift+c" = "copy_to_clipboard";
"ctrl+shift+v" = "paste_from_clipboard";
};
settings = {
background_opacity = lib.mkForce "0.95";
dynamic_background_opacity = true;
enabled_layouts = "tall:bias=50;full_size=1;mirrored=false,stack";
scrollback_lines = 10000;
scrollback_pager_history_size = 4096;
strip_trailing_space = "smart";
tab_bar_edge = "bottom";
tab_bar_min_tabs = 2;
tab_bar_style = "powerline";
tab_powerline_style = "round";
tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
};
};
lazygit = {
enable = true;
};
lsd = {
enable = true;
enableAliases = true;
};
neomutt = {
enable = true;
vimKeys = true;
sidebar.enable = true;
};
neovide = {
enable = true;
settings = {};
};
newsboat = {
enable = true;
extraConfig = ''
color background color234 default # Dark Everforest background
color listnormal color249 default # Neutral gray for readability
color listnormal_unread color142 default # Highlighted for unread items
color listfocus color234 color142 # Inverse for focused items
color listfocus_unread color234 color142 bold
color info color108 color234 # Subtle info text
color article color249 default # Neutral for article content
# Highlights
highlight article "^(Feed|Link):.*$" color109 default bold
highlight article "^(Title|Date|Author):.*$" color109 default bold
highlight article "https?://[^ ]+" color214 default underline # Bright orange-yellow for links
highlight article "\\[[0-9]+\\]" color142 default bold # Matches unread highlight
highlight article "\\[image\\ [0-9]+\\]" color142 default bold # Matches unread highlight
highlight feedlist "^.*$" color142 color234 bold
'';
};
nixvim = {
enable = true;
defaultEditor = true;
vimAlias = true;
viAlias = true;
vimdiffAlias = true;
clipboard.providers.wl-copy.enable = true;
globals.mapleader = " ";
globals.maplocalleader = " ";
keymaps = [
{
key = "<leader>ff";
action = "<cmd>Telescope find_files<cr>";
}
{
key = "<leader>fg";
action = "<cmd>Telescope live_grep<cr>";
}
{
key = "<leader>fb";
action = "<cmd>Telescope buffers<cr>";
}
{
key = "<leader>fh";
action = "<cmd>Telescope help_tags<cr>";
}
{
key = "\\";
action = "<cmd>Neotree toggle<cr>";
}
{
key = "<leader>?";
action = "<cmd>WhichKey<cr>";
}
];
opts = {
conceallevel = 1;
expandtab = true;
ignorecase = true;
number = true;
relativenumber = true;
ruler = true;
shiftwidth = 2;
smartcase = true;
tabstop = 2;
};
plugins = {
colorizer.enable = true;
comment.enable = true;
cmp = {
enable = true;
autoEnableSources = true;
settings.sources = [
{ name = "cmdline"; }
{ name = "emoji"; }
{ name = "fish"; }
{ name = "nvim-lsp"; }
];
};
# lualine.enable = true;
fidget.enable = true;
fugitive.enable = true;
gitblame.enable = true;
gitsigns.enable = true;
lsp = {
enable = true;
servers = {
html.enable = true;
jsonls.enable = true;
marksman.enable = true;
solargraph.enable = true;
yamlls.enable = true;
};
};
mini = {
enable = true;
mockDevIcons = true;
modules = {
files = {};
icons = {};
notify = {};
statusline = {};
};
};
neogit.enable = true;
neo-tree = {
enable = true;
enableGitStatus = true;
gitStatusAsync = true;
enableModifiedMarkers = true;
closeIfLastWindow = true;
};
nix.enable = true;
noice.enable = false;
# notify.enable = false;
nvim-autopairs.enable = true;
obsidian = {
enable = true;
settings = {
dir = "~/muhhmory";
daily_notes = {
folder = "Journal/Daily Pages";
template = "Daily Page.md";
};
templates = {
subdir = "Templates";
};
};
};
oil.enable = true;
render-markdown.enable = true;
vim-surround.enable = true;
which-key.enable = true;
telescope = {
enable = true;
extensions = {
fzf-native.enable = true;
};
};
transparent.enable = true;
toggleterm.enable = true;
treesitter = {
enable = true;
settings = {
indent.enable = true;
};
};
# web-devicons.enable = true;
zen-mode.enable = true;
};
extraPlugins = with pkgs.vimPlugins; [
];
};
nnn = {
enable = true;
extraPackages = with pkgs; [
ffmpegthumbnailer
mediainfo
sxiv
];
package = pkgs.nnn.override ({
withNerdIcons = true;
});
plugins = {
mappings = {
c = "fzcd";
f = "finder";
v = "imgview";
};
src = (pkgs.fetchFromGitHub {
owner = "jarun";
repo = "nnn";
rev = "v4.9";
sha256 = "sha256-Hpc8YaJeAzJoEi7aJ6DntH2VLkoR6ToP6tPYn3llR7k=";
}) + "/plugins";
};
};
mbsync = {
enable = true;
};
obs-studio = {
enable = true;
plugins = [
pkgs.obs-studio-plugins.wlrobs
];
};
ripgrep.enable = true;
starship = {
enable = true;
enableFishIntegration = true;
};
yazi = {
enable = true;
enableFishIntegration = true;
};
zoxide = {
enable = true;
};
};
services = {
mbsync = {
enable = true;
preExec = "";
postExec = "";
};
gnome-keyring.enable = true;
playerctld.enable = true;
syncthing = {
enable = true;
# dataDir = "/home/muhh/Sync";
# configDir = "/home/muhh/.config/syncthing";
};
};
stylix = {
enable = true;
image = /home/muhh/Sync/Backgrounds/wald.jpg;
polarity = "either";
# base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
# base16Scheme = "${pkgs.base16-schemes}/share/themes/tokyo-city-terminal-dark.yaml";
# base16Scheme = "${pkgs.base16-schemes}/share/themes/everforest.yaml";
# base16Scheme = ./share/themes/flexoki-light.yaml;
base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml";
cursor = {
name = "BreezeX-RosePine-Linux";
package = pkgs.rose-pine-cursor;
size = 32;
};
fonts = {
monospace = {
package = pkgs.nerd-fonts.iosevka;
name = "Iosevka Nerd Font";
};
sansSerif = {
package = pkgs.atkinson-hyperlegible;
name = "Atkinson Hyperlegible";
};
sizes = {
applications = 14;
desktop = 10;
popups = 10;
terminal = 14;
};
};
};
# catppuccin = {
# enable = true;
# flavor = "mocha";
# };
xdg = {
enable = true;
mimeApps.enable = true;
};
# leave things below alone.
home.stateVersion = "23.05";
programs.home-manager.enable = true;
}