{ pkgs, lib, config, flake, inputs, ... }: { imports = [ ./modules/home-manager/neovim ./modules/home-manager/firefox inputs.sops-nix.homeManagerModules.sops ]; xsession.enable = true; services.syncthing.enable = true; xdg = { userDirs.enable = true; mimeApps = { enable = true; defaultApplications = let applications = { telegram = { mimeApp = "org.telegram.desktop.desktop"; mimeTypes = [ "x-scheme-handler/tg" ]; }; librewolf = { mimeApp = "librewolf.desktop"; mimeTypes = [ "x-scheme-handler/http" "text/html" "application/xhtml+xml" "x-scheme-handler/https" "application/pdf" ]; }; gnomeTextEditor = { mimeApp = "org.gnome.TextEditor.desktop"; mimeTypes = [ "text/plain" ]; }; thunderbird = { mimeApp = "thunderbird.desktop"; mimeTypes = [ "x-scheme-handler/mailto" ]; }; loupe = { mimeApp = "org.gnome.Loupe.desktop"; mimeTypes = [ "image/jpeg" "image/png" "image/gif" "image/webp" "image/tiff" "image/x-tga" "image/vnd-ms.dds" "image/x-dds" "image/bmp" "image/vnd.microsoft.icon" "image/vnd.radiance" "image/x-exr" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" "image/x-portable-anymap" "image/x-qoi" "image/svg+xml" "image/svg+xml-compressed" "image/avif" "image/heic" "image/jxl" ]; }; }; mimeTypesForApp = { mimeApp, mimeTypes }: map ( mimeType: { "${mimeType}" = mimeApp; } ) mimeTypes; in lib.zipAttrs (lib.flatten (map mimeTypesForApp (builtins.attrValues applications))); }; }; home = { username = "pim"; homeDirectory = "/home/pim"; stateVersion = "23.05"; packages = (with pkgs; [ gnome.gnome-tweaks jellyfin-media-player virt-manager ]) ++ (with pkgs.unstable; [ attic-client dbeaver-bin devenv bottles-unwrapped gimp hexchat impression insomnia keepassxc krita libreoffice # logseq # Has insecure electron dependency moonlight-qt nicotine-plus qFlipper signal-desktop strawberry telegram-desktop vlc vorta wireshark nheko handbrake ]); }; programs = { home-manager.enable = true; chromium.enable = true; bat.enable = true; alacritty = { enable = true; settings.shell = { program = lib.getExe config.programs.tmux.package; args = [ "attach" ]; }; }; thunderbird = { enable = true; profiles.default.isDefault = true; }; direnv = { enable = true; enableBashIntegration = true; nix-direnv.enable = true; }; atuin = { enable = true; flags = [ "--disable-up-arrow" ]; settings = { auto_sync = true; sync_frequency = "5m"; sync_address = "https://atuin.kun.is"; }; }; zsh = { enable = true; autocd = true; autosuggestion.enable = true; prezto = { enable = true; utility.safeOps = false; }; shellAliases = let gitExe = lib.getExe config.programs.git.package; in { htop = lib.getExe pkgs.btop; gp = "${gitExe} push"; gco = "${gitExe} checkout"; gd = "${gitExe} diff"; gc = "${gitExe} commit"; gpl = "${gitExe} pull"; gb = "${gitExe} branch"; ga = "${gitExe} add"; gl = "${gitExe} log"; gs = "${gitExe} status"; tf = lib.getExe pkgs.opentofu; }; }; tmux = { enable = true; shell = lib.getExe config.programs.zsh.package; shortcut = "a"; clock24 = true; newSession = true; mouse = true; escapeTime = 10; terminal = "screen-256color"; extraConfig = '' unbind _ bind _ split-window -h unbind - bind - split-window -v unbind h bind h select-pane -L unbind j bind j select-pane -D unbind k bind k select-pane -U unbind l bind l select-pane -R ''; }; ssh = { enable = true; extraConfig = "User root"; matchBlocks = { lewis = lib.hm.dag.entryBefore [ "*" ] { hostname = "lewis.dmz"; }; atlas = lib.hm.dag.entryBefore [ "*" ] { hostname = "atlas.dmz"; }; jefke = lib.hm.dag.entryBefore [ "*" ] { hostname = "jefke.dmz"; }; warwick = lib.hm.dag.entryBefore [ "*" ] { hostname = "warwick.dmz"; }; github = lib.hm.dag.entryBefore [ "*" ] { hostname = "github.com"; user = "pizzapim"; identitiesOnly = true; }; }; }; git = { enable = true; userName = "Pim Kunis"; userEmail = "pim@kunis.nl"; extraConfig = { push.autoSetupRemote = true; commit.verbose = true; pull.rebase = true; init.defaultBranch = "master"; }; }; # Currently, it is not possible to have Home Manager manage Liberwolf extensions. # There is a draft PR which addresses this: # https://github.com/nix-community/home-manager/pull/3339 # The extensions I currently use are: # - ublock-origin (already installed by librewolf) # - cookie-autodelete # - clearurls # - istilldontcareaboutcookies # - keepassxc-browser # - redirector # - violentmonkey # - boring-rss # - kagi-search # - refined-github librewolf = { enable = true; settings = { "identity.fxaccounts.enabled" = true; "privacy.clearOnShutdown.history" = false; "privacy.clearOnShutdown.downloads" = false; "browser.translations.automaticallyPopup" = false; "browser.aboutConfig.showWarning" = false; "privacy.clearOnShutdown.cookies" = false; }; }; }; dconf.settings = with lib.hm.gvariant; { "org/gnome/desktop/sound".allow-volume-above-100-percent = true; "org/gnome/desktop/wm.preferences".num-workspaces = 4; "org/gnome/mutter".edge-tiling = true; "org/gnome/shell" = { disable-extension-version-validation = true; enabled-extensions = [ "workspace-indicator@gnome-shell-extensions.gcampax.github.com" "pop-shell@system76.com" "windowIsReady_Remover@nunofarruca@gmail.com" "randomwallpaper@iflow.space" ]; }; "org/gnome/desktop/input-sources" = { sources = [ (mkTuple [ "xkb" "us" ]) ]; xkb-options = [ "terminate:ctrl_alt_bksp" "caps:escape" ]; }; "org/gnome/shell/extensions/pop-shell" = { active-hint = true; fullscreen-launcher = false; mouse-cursor-focus-location = mkUint32 4; mouse-cursor-follows-active-window = true; show-skip-taskbar = false; show-title = true; smart-gaps = false; snap-to-grid = false; stacking-with-mouse = true; tile-by-default = true; }; "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { binding = "t"; command = lib.getExe config.programs.alacritty.package; name = "Terminal"; }; "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { binding = "e"; command = "${lib.getExe config.programs.librewolf.package} --browser"; name = "Browser"; }; "org/gnome/desktop/wm/keybindings" = { close = [ "q" ]; minimize = mkEmptyArray type.string; move-to-workspace-1 = [ "1" ]; move-to-workspace-2 = [ "2" ]; move-to-workspace-3 = [ "3" ]; move-to-workspace-4 = [ "4" ]; switch-applications = mkEmptyArray type.string; switch-applications-backward = mkEmptyArray type.string; switch-to-workspace-1 = [ "1" ]; switch-to-workspace-2 = [ "2" ]; switch-to-workspace-3 = [ "3" ]; switch-to-workspace-4 = [ "4" ]; toggle-fullscreen = [ "f" ]; }; "org/gnome/shell/extensions/space-iflow-randomwallpaper" = { auto-fetch = true; change-type = 2; hide-panel-icon = true; history-length = 1; hours = 0; minutes = 30; sources = [ "42" ]; fetch-on-startup = true; }; "org/gnome/shell/extensions/space-iflow-randomwallpaper/sources/general/42".type = 4; "org/gnome/shell/extensions/space-iflow-randomwallpaper/sources/localFolder/42".folder = "${flake}/wallpapers"; }; sops = { age.keyFile = "${config.xdg.configHome}/sops/age/keys.txt"; defaultSopsFile = ./secrets/pim.yaml; secrets = { "keepassxc".path = "${config.xdg.configHome}/keepassxc/keepassxc.ini"; "syncthing/key".path = "${config.xdg.configHome}/syncthing/key.pem"; "syncthing/cert".path = "${config.xdg.configHome}/syncthing/cert.pem"; }; }; }