dots/users/price/home.nix
Price Hiller 3b5ef48005
All checks were successful
Check Formatting of Files / Check-Formatting (push) Successful in 1m23s
feat(nix/hm/price): install nix-prefetch-scripts
2024-05-12 01:54:51 -05:00

584 lines
15 KiB
Nix

{
pkgs,
config,
lib,
...
}:
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
{
programs.home-manager.enable = true;
nixpkgs = {
config.allowUnfree = true;
};
home = {
language.base = "en_US.UTF-8";
packages =
with pkgs;
[
nix-prefetch-scripts
mako
wl-clipboard
grim
unzip
bat
Fmt
starship
nodePackages.prettier
cargo
rustc
rustfmt
python3
shfmt
bob-nvim
neovide
wezterm
fontconfig
sqlite
luajit
imagemagick
dotnet-sdk_8
shellcheck
openjdk
nodejs
poetry
ruby
yamllint
curl
openssh
openssl
wget
rsync
readline
gh
ffmpeg
silicon
man
jq
tectonic
fzf
delta
eza
ripgrep
fd
nixfmt-rfc-style
lxappearance
opensnitch-ui
twitter-color-emoji
open-sans
noto-fonts
fira-code
nerdfonts
direnv
swappy
stylua
typstfmt
typst
hurl
easyeffects
egl-wayland
helvum
brightnessctl
keyd
tidal-hifi
nix-output-monitor
sops
ungoogled-chromium
tree-sitter
qt6Packages.qt6gtk2
qt6Packages.qt6ct
libsForQt5.qt5ct
]
++ [
go
(lib.hiPrio gotools)
]
++ [
age
age-plugin-yubikey
passage
]
++ [
ansible
ansible-lint
]
++ [
gnumake
cmake
gcc
glibc
glibc.static
llvm
llvmPackages.libcxxStdenv
]
++ [ rust-analyzer ];
file = {
".local/share/wallpapers" = {
source = ./dots/.local/share/wallpapers;
force = true;
};
".omnisharp" = {
source = ./dots/.omnisharp;
force = true;
};
".latexmkrc" = {
source = ./dots/.latexmkrc;
force = true;
};
} // softLinkDots ".config";
sessionVariables = {
TERMINFO_DIRS = "${config.home.homeDirectory}/.nix-profile/share/terminfo";
WSLENV = "TERMINFO_DIRS";
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 = ''
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Fira Code</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Noto Serif</family>
<family>Fira Code</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Fira Code</family>
<family>FiraCode Nerd Font</family>
<family>Noto Sans Mono</family>
</prefer>
</alias>
<alias>
<family>emoji</family>
<prefer>
<family>Twemoji</family>
<family>Noto Color Emoji</family>
</prefer>
</alias>
</fontconfig>
'';
"bob/config.toml".text = ''
installation_location = "${config.xdg.dataHome}/bin"
'';
};
};
programs = {
emacs = {
enable = true;
package = pkgs.emacs-pgtk.overrideAttrs (old: {
passthru = old.passthru // {
treeSitter = true;
};
});
extraPackages = (epkgs: (with epkgs; [ treesit-grammars.with-all-grammars ]));
};
wofi.enable = true;
gpg.enable = true;
firefox = {
enable = true;
package = pkgs.firefox-devedition;
};
waybar = {
enable = true;
systemd.enable = true;
};
zsh = {
enable = true;
initExtra = ''
__HM_SESS_VARS_SOURCED= source "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
source "$HOME/.config/zsh/zsh"
'';
};
git = {
enable = true;
userName = "Price Hiller";
userEmail = "price@orion-technologies.io";
aliases = {
unstage = "reset HEAD --";
};
extraConfig = {
init.defaultBranch = "Development";
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 = "C3FADDE7A8534BEB";
};
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";
};
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"
];
}
];
};
cliphist.enable = true;
easyeffects.enable = true;
opensnitch-ui.enable = true;
gpg-agent = {
enable = true;
enableSshSupport = true;
enableZshIntegration = true;
pinentryPackage = pkgs.pinentry-qt;
maxCacheTtl = 14400;
maxCacheTtlSsh = 14400;
sshKeys = [ "530D3EC95C32AB9EC33714AAF865738D6E77680A" ];
extraConfig = ''
allow-loopback-pinentry
'';
};
};
systemd.user = {
startServices = "sd-switch";
targets.compositor = {
Unit = {
Description = "Unit for DE to launch";
ConditionEnvironment = [
"WAYLAND_DISPLAY"
"DISPLAY"
];
};
};
services = {
swww-daemon = {
Service =
let
cleanup-socket-script = pkgs.writeShellScript "swww-daemon-cleanup-socket" ''
# Remove the existing swww.socket if it exists, avoids some issues with swww-daemon
# startup where swww-daemon claims the address is already in use
if [[ -w "$XDG_RUNTIME_DIR/swww.socket" ]]; then
rm -f $XDG_RUNTIME_DIR/swww.socket || exit 1
fi
'';
in
{
RestartSec = 3;
PassEnvironment = [ "XDG_RUNTIME_DIR" ];
ExecStartPre = "${cleanup-socket-script}";
ExecStopPost = "${cleanup-socket-script}";
ExecStart = "${pkgs.swww}/bin/swww-daemon";
};
Install.WantedBy = [ "compositor.target" ];
Unit = {
Description = "Wayland Wallpaper Service";
PartOf = [ "compositor.target" ];
After = [ "compositor.target" ];
};
};
swww-wallpapers = {
Service = {
RestartSec = 3;
Type = "oneshot";
Environment = [
"SWWW_TRANSITION_FPS=120"
"SWWW_TRANSITION_STEP=30"
"SWWW_TRANSITION_DURATION=0.75"
];
ExecStart =
let
wallpaper-dir = "${dotsDir}/.local/share/wallpapers";
in
[
"${pkgs.swww}/bin/swww img -t random ${wallpaper-dir}/Nebula.jpg"
"${pkgs.swww}/bin/swww img -t wipe --transition-angle 40 -o eDP-1 ${wallpaper-dir}/Autumn-Leaves.jpg"
];
};
Install.WantedBy = [ "swww-daemon.service" ];
Unit = {
Description = "Wayland Wallpaper Service";
PartOf = [ "swww-daemon.service" ];
After = [ "swww-daemon.service" ];
};
};
keyd-application-mapper = {
Unit = {
Description = "Keyd - Linux Keyboard Remapper";
PartOf = [ "keyd.service" ];
};
Service = {
ExecStart = "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'";
opensnitch-ui = {
Service.RestartSec = 3;
Install.WantedBy = [ "compositor.target" ];
Unit = {
PartOf = [ "compositor.target" ];
After = [
"compositor.target"
"waybar.service"
];
};
};
easyeffects = {
Install.WantedBy = [ "compositor.target" ];
Unit = {
PartOf = [ "compositor.target" ];
After = [ "compositor.target" ];
};
};
cliphist = {
Service.RestartSec = 3;
Install.WantedBy = [ "compositor.target" ];
Unit = {
PartOf = [ "compositor.target" ];
After = [ "compositor.target" ];
};
};
};
};
}