{ config, pkgs, lib, ... }: { 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 alacritty blueman brightnessctl chafa curl darktable ddcutil ddev devenv distrobox dog downonspot fastfetch fd ffmpegthumbnailer fuzzel git heroku htop httpie just libreoffice neovide nerd-fonts.iosevka maid mediainfo mpv morgen obsidian offpunk pamixer pavucontrol powertop qutebrowser rclone rockbox-utility signal-desktop solargraph sops spot sxiv steam-run tmux unzip via wget whois wl-clipboard wl-mirror sway-launcher-desktop swaynotificationcenter swayosd 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; loginShellInit = '' if test (tty) = /dev/tty1 exec sway end ''; shellAliases = { cat = "bat"; }; }; fzf = { 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; }; 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 ''; }; niri = { enable = false; }; nixvim = { enable = true; defaultEditor = true; vimAlias = true; viAlias = true; vimdiffAlias = true; clipboard.providers.wl-copy.enable = true; globals.mapleader = " "; globals.maplocalleader = " "; keymaps = [ { key = "ff"; action = "Telescope find_files"; } { key = "fg"; action = "Telescope live_grep"; } { key = "fb"; action = "Telescope buffers"; } { key = "fh"; action = "Telescope help_tags"; } { key = "\\"; action = "Neotree toggle"; } { key = "?"; action = "WhichKey"; } ]; opts = { conceallevel = 1; expandtab = true; ignorecase = true; number = true; relativenumber = true; ruler = true; shiftwidth = 2; smartcase = true; tabstop = 2; }; plugins = { 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; }; }; 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; nvim-colorizer.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; }; swaylock.enable = true; waybar = { enable = true; systemd.enable = true; settings = { mainBar = { layer = "top"; position = "top"; height = 24; spacing = 3; output = [ "DP-1" ]; modules-left = [ "sway/workspaces" "sway/mode" "sway/scratchpad" "sway/window" "custom/media" ]; modules-center = [ "clock" "idle_inhibitor" ]; modules-right = [ "pulseaudio" "backlight" "network" "tray" "custom/notification" "custom/power" ]; "sway/scratchpad" = { format = "{icon} {count}"; show-empty = false; format-icons = ["" ""]; tooltip = true; tooltip-format = "{app}: {title}"; }; "backlight" = { device = "ddcci6"; format = "{percent}% {icon}"; format-icons = [ "" "" "" "" "" "" ""]; }; "clock" = { format = "{:%d. %B | %H:%M}"; tooltip-format = "{:%Y %B}\n{calendar}"; format-alt = "{: KW %OV, %A, %d. %B %Y | %H:%M}"; calendar = { mode = "year"; mode-mon-col = 3; weeks-pos = "right"; on-scroll = 1; on-click-right = "mode"; format = { months = "{}"; days = "{}"; weeks = "W{}"; weekdays = "{}"; today = "{}"; }; }; "actions" = { on-click-right = "mode"; on-click-forward = "tz_up"; on-click-backward = "tz_down"; on-scroll-up = "shift_up"; on-scroll-down = "shift_down"; }; }; "tray" = { icon-size = 16; spacing = 6; }; }; }; }; yazi = { enable = true; enableFishIntegration = true; }; zoxide = { enable = true; }; }; services = { mbsync = { enable = true; preExec = ""; postExec = ""; }; espanso = { enable = true; package = pkgs.espanso-wayland; matches = { base = { matches = [ { trigger = ";dat"; replace = "{{mydate}}"; vars = [ { name = "mydate"; type = "date"; params.format = "%F"; } ]; } ]; }; }; }; gnome-keyring.enable = true; playerctld.enable = true; swayidle = { enable = true; events = [ { event = "before-sleep"; command = "${pkgs.swaylock}/bin/swaylock -fF"; } ]; timeouts = [ { timeout = 300; command = "${pkgs.swaylock}/bin/swaylock -fF"; } { timeout = 330; command = "${pkgs.sway}/bin/swaymsg 'output * dpms off'"; resumeCommand = "${pkgs.sway}/bin/swaymsg 'output * dpms on'"; } ]; }; swaync = { enable = true; }; swayosd = { enable = true; display = "DP-1"; }; syncthing = { enable = true; # dataDir = "/home/muhh/Sync"; # configDir = "/home/muhh/.config/syncthing"; }; }; sops = { age.keyFile = "${config.xdg.configHome}/sops/age/keys.txt"; defaultSopsFile = ./secrets/secrets.yaml; secrets = { atuin_key = {}; "mail/privat/address" = {}; "mail/privat/username" = {}; "mail/privat/password" = {}; "mail/icloud/address" = {}; "mail/icloud/username" = {}; "mail/icloud/password" = {}; }; }; stylix = { enable = true; image = /home/muhh/Sync/Backgrounds/wald.jpg; polarity = "dark"; # 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"; fonts = { monospace = { package = pkgs.nerd-fonts.iosevka; name = "Iosevka Nerd Font"; }; sizes = { terminal = 14; }; }; }; wayland.windowManager = { sway = { enable = true; extraConfig = '' smart_gaps inverse_outer ''; config = { bars = []; window = { commands = [ { command = "floating enable, sticky enable, resize set 20 ppt 40 ppt, border pixel 10"; criteria = { app_id = "^launcher"; }; } ]; }; gaps = { inner = 30; vertical = 50; horizontal = 400; # smartGaps = true; smartBorders = "on"; }; input = { "type:keyboard" = { xkb_layout = "eu"; xkb_options = "compose:rwin"; }; "type:touchpad" = { tap = "enabled"; natural_scroll = "enabled"; dwt = "enabled"; accel_profile = "adaptive"; pointer_accel = "0.5"; }; }; keybindings = let modifier = config.wayland.windowManager.sway.config.modifier; in lib.mkOptionDefault { "XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"; "XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; "XF86AudioMute" = "exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; "XF86MonBrightnessUp" = "exec brightnessctl set 10%+"; "XF86MonBrightnessDown" = "exec brightnessctl set 10%-"; "XF86AudioPlay" = "exec playerctl play-pause"; "XF86AudioNext" = "exec playerctl next"; "XF86AudioPrev" = "exec playerctl previous"; "${modifier}+o" = "for_window [class=obsidian] scratchpad show"; }; menu = "kitty --app-id launcher -e sway-launcher-desktop"; modifier = "Mod4"; output = { DP-1 = { resolution = "3840x2160@30Hz"; position = "1280 0"; # background = "/home/muhh/Sync/Backgrounds/wald.jpg fill"; scale = "1.5"; }; HDMI-A-1 = { resolution = "1920x1080@60.000Hz"; transform = "180"; position = "0 0"; scale = "1.5"; # background = "/home/muhh/Sync/Backgrounds/pfuetze.jpg fill"; }; }; seat = { "*" = { hide_cursor = "5000"; }; }; terminal = "kitty"; window = { titlebar = false; }; workspaceOutputAssign = map (x: { workspace = x; output = "DP-1"; }) ["1" "2" "3" "4" "5" "6" "7"] ++ map (x: { workspace = x; output = "HDMI-A-1"; }) ["8" "9" "10"]; }; wrapperFeatures.gtk = true; }; }; xdg = { enable = true; mimeApps.enable = true; }; # leave things below alone. home.stateVersion = "23.05"; programs.home-manager.enable = true; }