{ pkgs, config, lib, clib, ... }: let dotsDir = "${config.home.homeDirectory}/.config/home-manager/users/price/dots"; softLinkDots = dir: (builtins.listToAttrs ( map (n: { name = "${dir + "/" + n}"; value = { source = config.lib.file.mkOutOfStoreSymlink "${dotsDir}/${dir}/${n}"; force = true; }; }) (builtins.attrNames (builtins.readDir ./dots/${dir})) )); in { imports = (clib.recurseFilesInDirs [ ./conf ] ".nix"); programs.home-manager.enable = true; nixpkgs = { config = { allowUnfree = true; android_sdk.accept_license = true; }; }; home = { language.base = "en_US.UTF-8"; packages = with pkgs; [ inkscape sqlx-cli postgresql htop devenv android-studio-full plantuml libnotify graphviz gcolor3 typescript deno powershell vesktop kooha libreoffice-fresh zathura nix-prefetch-scripts mako wl-clipboard grim slurp unzip Fmt screen-cap starship nodePackages.prettier cargo clippy rustc rustfmt python3 shfmt bob-nvim neovide wezterm kitty sqlite swaylock-effects luajit luarocks imagemagick shellcheck nodejs poetry ruby yamllint curl openssh gradle maven pavucontrol openssl wget rsync readline gh ffmpeg silicon man thunderbird jq tectonic fzf delta eza ripgrep fd playerctl nixfmt-rfc-style lxappearance direnv swappy stylua typstyle typst hurl mullvad-vpn easyeffects egl-wayland helvum brightnessctl keyd tidal-hifi nix-output-monitor sops chromium tree-sitter qt6Packages.qt6gtk2 qt6Packages.qt6ct libsForQt5.qt5ct strawberry ] ++ [ age age-plugin-yubikey passage ] ++ [ ansible ansible-lint ] ++ [ gnumake cmake clang clang-tools ninja ccache llvm llvmPackages.libcxxStdenv pkg-config openssl.dev curl.dev ] ++ [ rust-analyzer ]; file = softLinkDots ".config"; sessionVariables = { _ZL_DATA = "${config.xdg.cacheHome}/zlua"; RUSTUP_HOME = "${config.xdg.dataHome}/rustup"; CARGO_HOME = "${config.xdg.dataHome}/cargo"; OMNISHARPHOME = "${config.xdg.configHome}/omnisharp"; NPM_CONFIG_USERCONFIG = "${config.xdg.configHome}/npm/npmrc"; TERMINFO_DIRS = "${config.home.homeDirectory}/.nix-profile/share/terminfo"; WSLENV = "TERMINFO_DIRS"; LD_LIBRARY_PATH = lib.strings.makeLibraryPath [ "${config.home.homeDirectory}/.nix-profile/" "${pkgs.sqlite.out}" ]; PKG_CONFIG_PATH = "${config.home.homeDirectory}/.nix-profile/lib/pkgconfig"; GTK_PATH = "${pkgs.gtk-engine-murrine}/lib/gtk-2.0"; }; sessionPath = [ "${config.xdg.dataHome}/bin" ]; }; xdg = { enable = true; mime.enable = true; systemDirs.data = [ "${config.home.homeDirectory}/.nix-profile/share/" ]; mimeApps = { enable = true; associations.added = { "x-scheme-handler/http" = [ "firefox-devedition.desktop" ]; "x-scheme-handler/https" = [ "firefox-devedition.desktop" ]; "x-scheme-handler/chrome" = [ "firefox-devedition.desktop" ]; "text/html" = [ "firefox-devedition.desktop" ]; "application/x-extension-htm" = [ "firefox-devedition.desktop" ]; "application/x-extension-html" = [ "firefox-devedition.desktop" ]; "application/x-extension-shtml" = [ "firefox-devedition.desktop" ]; "application/xhtml+xml" = [ "firefox-devedition.desktop" ]; "application/x-extension-xhtml" = [ "firefox-devedition.desktop" ]; "application/x-extension-xht" = [ "firefox-devedition.desktop" ]; }; defaultApplications = { "application/pdf" = [ "org.pwmt.zathura.desktop" ]; "x-scheme-handler/http" = [ "firefox-devedition.desktop" ]; "x-scheme-handler/https" = [ "firefox-devedition.desktop" ]; "x-scheme-handler/chrome" = [ "firefox-devedition.desktop" ]; "text/html" = [ "firefox-devedition.desktop" ]; "application/x-extension-htm" = [ "firefox-devedition.desktop" ]; "application/x-extension-html" = [ "firefox-devedition.desktop" ]; "application/x-extension-shtml" = [ "firefox-devedition.desktop" ]; "application/xhtml+xml" = [ "firefox-devedition.desktop" ]; "application/x-extension-xhtml" = [ "firefox-devedition.desktop" ]; "application/x-extension-xht" = [ "firefox-devedition.desktop" ]; }; }; configFile = { "hypr/hyprland.conf".enable = false; }; }; programs = { eclipse = { enable = true; package = pkgs.eclipses.eclipse-java; }; wofi.enable = true; firefox = { enable = true; package = pkgs.firefox-devedition; }; waybar = { enable = true; systemd.enable = true; }; git = { enable = true; userName = "Price Hiller"; userEmail = "price@orion-technologies.io"; aliases = { unstage = "reset HEAD --"; }; extraConfig = { init.defaultBranch = "main"; merge.conflictstyle = "zdiff3"; branch.autosetupmerge = "always"; remote.pushDefault = "origin"; am.threeWay = true; apply.ignoreWhitespace = "change"; # SEC: Integrate https://github.com/git-ecosystem/git-credential-manager with GPG to improve # security stance around the credential store credential.helper = "store"; pull.rebase = true; commit.gpgsign = true; transfer.fsckObjects = true; receive.fsckObjects = true; status.submoduleSummary = true; submodule.recurse = true; fetch = { fsckObjects = true; prune = true; prunetags = true; }; rebase = { autosquash = true; autostash = true; updateRefs = true; }; log = { abbrevCommit = true; decorate = "short"; date = "iso"; }; rerere = { enabled = true; autoUpdate = true; }; core = { ignorecase = false; quotePath = false; }; diff = { colorMoved = "default"; submodule = "log"; tool = "nvimdiff"; }; push = { autoSetupRemote = true; default = "current"; }; }; signing = { signByDefault = true; key = null; }; delta = { enable = true; options = { navigate = true; features = "interactive decorations"; interactive = { keep-plus-minus-markers = false; }; decorations = { commit-decoration-style = "bold box ul"; dark = true; file-style = "omit"; hunk-header-decoration-style = ''"#022b45" box ul''; hunk-header-file-style = ''"#999999"''; hunk-header-style = "file line-number syntax"; line-numbers = true; line-numbers-left-style = ''"#022b45"''; minus-emph-style = ''normal "#80002a"''; minus-style = ''normal "#330011"''; plus-emph-style = ''syntax "#003300"''; plus-style = ''syntax "#001a00"''; syntax-theme = "Solarized (dark)"; }; }; }; }; }; qt = { enable = true; style = { name = "gtk2"; package = pkgs.libsForQt5.breeze-qt5; }; platformTheme.name = "gtk"; }; home.pointerCursor = { name = "Adwaita"; package = pkgs.adwaita-icon-theme; size = 24; }; gtk = let extraGtkConfig = { gtk-application-prefer-dark-theme = true; gtk-cursor-theme-size = 0; gtk-enable-event-sounds = 1; gtk-enable-input-feedback-sounds = 1; gtk-xft-antialias = 1; gtk-xft-hinting = 1; gtk-xft-hintstyle = "hintfull"; }; in { enable = true; theme = { name = "Kanagawa-BL"; package = pkgs.kanagawa-gtk-theme; }; iconTheme = { name = "Kanagawa"; package = pkgs.kanagawa-icon-theme; }; gtk3.extraConfig = extraGtkConfig; gtk4.extraConfig = extraGtkConfig; }; services = { # blueman-applet.enable = true; gromit-mpx = { enable = true; tools = [ { device = "default"; type = "pen"; size = 5; color = "red"; } { device = "default"; type = "pen"; size = 5; color = "blue"; modifiers = [ "SHIFT" ]; } { device = "default"; type = "pen"; size = 5; color = "yellow"; modifiers = [ "CONTROL" ]; } { device = "default"; type = "pen"; size = 6; color = "green"; arrowSize = 1; modifiers = [ "2" ]; } { device = "default"; type = "eraser"; size = 75; modifiers = [ "3" ]; } { device = "default"; color = "red"; arrowSize = 5; modifiers = [ "CONTROL" "SHIFT" ]; } { device = "default"; color = "blue"; arrowSize = 5; modifiers = [ "CONTROL" "SHIFT" "2" ]; } { device = "default"; color = "yellow"; arrowSize = 5; modifiers = [ "CONTROL" "SHIFT" "3" ]; } ]; }; easyeffects.enable = true; }; systemd.user = { startServices = "sd-switch"; targets.compositor = { Unit = { Description = "Unit for DE to launch"; ConditionEnvironment = [ "WAYLAND_DISPLAY" "DISPLAY" ]; }; }; services = { keyd-application-mapper = { Unit = { Description = "Keyd - Linux Keyboard Remapper"; PartOf = [ "keyd.service" ]; }; Service = { ExecStart = "${pkgs.keyd}/bin/keyd-application-mapper"; RestartSec = 3; }; Install.WantedBy = [ "compositor.target" ]; }; waybar = { Service = { Environment = [ "GTK_THEME='THIS THEME DOES NOT EXIST!'" ]; RestartSec = 3; }; Install.WantedBy = [ "compositor.target" ]; Unit = { PartOf = [ "compositor.target" ]; After = [ "compositor.target" ]; }; }; gromit-mpx.Service.ExecStart = lib.mkForce "echo 'Disabled, managed by WM'"; easyeffects = { Install.WantedBy = [ "compositor.target" ]; Unit = { PartOf = [ "compositor.target" ]; After = [ "compositor.target" ]; }; }; polkit-gnome-authentication-agent-1 = { Unit = { Description = "Gnome Polkit authentication agent"; Documentation = "https://gitlab.freedesktop.org/polkit/polkit/"; After = [ "graphical-session-pre.target" ]; PartOf = [ "graphical-session.target" ]; }; Service = { ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; Restart = "always"; }; Install.WantedBy = [ "graphical-session.target" ]; }; }; }; }