{ 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; [ android-studio-full plantuml libnotify graphviz gcolor3 typescript deno powershell vesktop vimiv-qt kooha libreoffice-fresh zathura pulseaudio 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 fontconfig 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 twitter-color-emoji open-sans noto-fonts fira-code nerdfonts 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 ] ++ [ 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" ]; }; fonts.fontconfig.enable = true; 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; "fontconfig/fonts.conf".text = '' sans-serif Noto Sans Fira Code serif Noto Serif Fira Code monospace Fira Code FiraCode Nerd Font Noto Sans Mono emoji Twemoji Noto Color Emoji ''; }; }; 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; }; font = { name = "Open Sans"; size = 11; package = pkgs.open-sans; }; 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" ]; }; }; }; }