399 lines
9.7 KiB
HolyC
399 lines
9.7 KiB
HolyC
{ config, pkgs, inputs, lib, ... }:
|
|
|
|
{
|
|
imports = [ inputs.zen-browser.homeModules.default ];
|
|
|
|
home.username = "jet";
|
|
home.homeDirectory = "/home/jet";
|
|
home.stateVersion = "23.05";
|
|
|
|
# Define configuration directory
|
|
# Note: we can't use config.home.homeDirectory in the let block if we're also defining it in the set
|
|
# recursively without strict evaluation issues sometimes, but here it should be fine if we just use the string.
|
|
# Safer to just use /home/jet or home.homeDirectory if it was passed in.
|
|
# Actually, `config.home.homeDirectory` is safe to use inside simple attribute sets.
|
|
# Let's use a let binding for clarity.
|
|
|
|
# Configure GNOME settings
|
|
dconf.settings = let
|
|
nixConfigDirectory = "${config.home.homeDirectory}/Documents/nix-config";
|
|
in {
|
|
"org/gnome/desktop/interface" = {
|
|
clock-format = "12h";
|
|
clock-show-weekday = true;
|
|
color-scheme = "prefer-dark";
|
|
enable-animations = false;
|
|
enable-hot-corners = false;
|
|
};
|
|
"org/gnome/system/location" = {
|
|
enabled = true;
|
|
};
|
|
"org/gnome/desktop/background" = {
|
|
picture-uri = "file://${nixConfigDirectory}/cat.png";
|
|
picture-uri-dark = "file://${nixConfigDirectory}/cat.png";
|
|
picture-options = "wallpaper";
|
|
};
|
|
"org/gnome/settings-daemon/plugins/power" = {
|
|
sleep-inactive-ac-type = "nothing";
|
|
};
|
|
"org/gtk/gtk4/settings/file-chooser" = {
|
|
show-hidden = true;
|
|
};
|
|
"org/gtk/settings/file-chooser" = {
|
|
clock-format = "12h";
|
|
show-hidden = true;
|
|
};
|
|
"org/gnome/desktop/peripherals/touchpad" = {
|
|
disable-while-typing = true;
|
|
};
|
|
"org/gnome/shell" = {
|
|
disable-user-extensions = false;
|
|
enabled-extensions = [
|
|
"hidetopbar@mathieu.bidon.ca"
|
|
"wifiqrcode@glerro.pm.me"
|
|
"system-monitor@paradoxxx.zero.gmail.com"
|
|
"clipboard-indicator@tudmotu.com"
|
|
"emoji-copy@felipeftn"
|
|
];
|
|
};
|
|
"org/nemo/preferences" = {
|
|
show-hidden-files = true;
|
|
default-folder-viewer = "list-view";
|
|
show-location-entry = true;
|
|
show-full-path-titles = true;
|
|
date-format = "informal";
|
|
};
|
|
"org/nemo/window-state" = {
|
|
side-pane-view = "treeview";
|
|
};
|
|
"org/nemo/list-view" = {
|
|
default-zoom-level = "small";
|
|
};
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
# CLI Tools
|
|
bat
|
|
ripgrep
|
|
tree
|
|
unzip
|
|
hyfetch
|
|
# Development
|
|
gh
|
|
tea
|
|
mkp224o
|
|
nixfmt
|
|
|
|
# Terminal
|
|
nerd-fonts.commit-mono
|
|
fastfetch
|
|
|
|
# Desktop / GUI
|
|
thunderbird
|
|
vlc
|
|
gimp3
|
|
inkscape
|
|
qbittorrent-enhanced
|
|
signal-desktop
|
|
beeper
|
|
element-desktop
|
|
zulip
|
|
logseq
|
|
prismlauncher
|
|
nemo-with-extensions
|
|
font-manager
|
|
antigravity-fhs
|
|
claude-code
|
|
kdePackages.kdenlive
|
|
zulip
|
|
vesktop
|
|
obs-studio
|
|
google-chrome
|
|
|
|
# GNOME Extensions
|
|
gnomeExtensions.hide-top-bar
|
|
gnomeExtensions.wifi-qrcode
|
|
gnomeExtensions.system-monitor-next
|
|
gnomeExtensions.clipboard-indicator
|
|
gnomeExtensions.emoji-copy
|
|
];
|
|
|
|
|
|
# Set environment variables for OpenCL
|
|
home.sessionVariables = {
|
|
OCL_ICD_VENDORS = "/etc/OpenCL/vendors";
|
|
POCL_DEVICES = "cpu";
|
|
BROWSER = "zen";
|
|
};
|
|
|
|
programs.helix = {
|
|
enable = true;
|
|
defaultEditor = true;
|
|
settings = {
|
|
theme = "dark_high_contrast";
|
|
editor = {
|
|
line-number = "relative";
|
|
lsp.display-messages = true;
|
|
lsp.display-inlay-hints = true;
|
|
};
|
|
};
|
|
languages = {
|
|
haskell = {
|
|
config = {
|
|
end-of-line-diagnostics = "hint";
|
|
};
|
|
"inline-diagnostics" = {
|
|
cursor-line = "hint";
|
|
other-lines = "hint";
|
|
};
|
|
};
|
|
rust = {
|
|
config = {
|
|
end-of-line-diagnostics = "hint";
|
|
};
|
|
"inline-diagnostics" = {
|
|
cursor-line = "hint";
|
|
other-lines = "hint";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.zellij = {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
|
|
settings = {
|
|
# Default shell (using bash as configured in your system)
|
|
default_shell = "bash";
|
|
default_layout = "compact";
|
|
pane_frames = false;
|
|
|
|
# Mouse and interaction settings - enable for proper pane handling
|
|
mouse_mode = true;
|
|
copy_on_select = true;
|
|
|
|
show_startup_tips = false;
|
|
show_release_notes = false;
|
|
|
|
on_force_close = "detach";
|
|
};
|
|
};
|
|
|
|
programs.eza = {
|
|
enable = true;
|
|
icons = "always";
|
|
enableBashIntegration = true;
|
|
git = true;
|
|
extraOptions = [
|
|
"--group-directories-first"
|
|
"--all"
|
|
];
|
|
};
|
|
|
|
programs.zoxide = {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
};
|
|
|
|
programs.direnv = {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
nix-direnv.enable = true;
|
|
};
|
|
|
|
programs.bash = {
|
|
enable = true;
|
|
shellAliases = {
|
|
"c" = "claude";
|
|
"." = "z ..";
|
|
".." = "z ..";
|
|
j = "jj";
|
|
jgf = "jj git fetch";
|
|
jgp = "jj git push";
|
|
jgc = "jj git clone --colocate";
|
|
jbs = "jj bookmark set";
|
|
jd = "jj describe";
|
|
js = "jj show";
|
|
jss = "jj show -s";
|
|
jab = "jj abandon";
|
|
jsp = "jj split";
|
|
je = "jj edit --ignore-immutable";
|
|
jall = "jj log -r 'all()'";
|
|
jn = "jj new";
|
|
jdiff = "jj diff";
|
|
jsq = "jj squash";
|
|
h = "hx";
|
|
vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}";
|
|
};
|
|
initExtra = ''
|
|
# Automatically list directory contents when changing directories
|
|
auto_l_on_cd() {
|
|
if [ "$__LAST_PWD" != "$PWD" ]; then
|
|
l
|
|
__LAST_PWD="$PWD"
|
|
fi
|
|
}
|
|
export PROMPT_COMMAND="auto_l_on_cd; $PROMPT_COMMAND"
|
|
__LAST_PWD="$PWD"
|
|
'';
|
|
};
|
|
|
|
programs.kitty = {
|
|
enable = true;
|
|
settings = {
|
|
hide_window_decorations = "yes";
|
|
draw_minimal_borders = "yes";
|
|
font_family = "CommitMono Nerd Font";
|
|
font_size = "12";
|
|
confirm_os_window_close = "0";
|
|
enable_audio_bell = "no";
|
|
};
|
|
keybindings = {
|
|
"ctrl+shift+c" = "copy_and_clear_or_interrupt";
|
|
"ctrl+c" = "copy_and_clear_or_interrupt";
|
|
"ctrl+shift+v" = "paste_from_clipboard";
|
|
"ctrl+v" = "paste_from_clipboard";
|
|
};
|
|
themeFile = "GitHub_Dark_High_Contrast";
|
|
};
|
|
|
|
programs.jujutsu = {
|
|
enable = true;
|
|
settings = {
|
|
remotes.origin.auto-track-bookmarks = "glob:*";
|
|
user = {
|
|
email = "jetthomaspham@gmail.com";
|
|
name = "Jet Pham";
|
|
};
|
|
|
|
signing = {
|
|
behavior = "own";
|
|
backend = "ssh";
|
|
key = "~/.ssh/id_ed25519.pub";
|
|
};
|
|
|
|
git = {
|
|
sign-on-push = true;
|
|
};
|
|
ui = {
|
|
default-command = "log";
|
|
editor = "hx";
|
|
pager = "bat --style=plain";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Configure Zen Browser with about:config settings
|
|
programs.zen-browser = {
|
|
enable = true;
|
|
suppressXdgMigrationWarning = true;
|
|
policies = {
|
|
DisableTelemetry = true;
|
|
DisableFirefoxStudies = true;
|
|
DisablePocket = true;
|
|
DontCheckDefaultBrowser = true;
|
|
DisableAppUpdate = true;
|
|
DisableMasterPasswordCreation = true;
|
|
DisablePasswordReveal = true;
|
|
DisableProfileImport = true;
|
|
ExtensionUpdate = false;
|
|
OfferToSaveLogins = false;
|
|
DisableFirefoxAccounts = true;
|
|
DisableFormHistory = true;
|
|
DisableSafeMode = true;
|
|
DisableSetDesktopBackground = true;
|
|
EnableTrackingProtection = {
|
|
Value = true;
|
|
Locked = true;
|
|
Cryptomining = true;
|
|
Fingerprinting = true;
|
|
};
|
|
HardwareAcceleration = true;
|
|
NoDefaultBookmarks = true;
|
|
PasswordManagerEnabled = false;
|
|
Preferences = {
|
|
"zen.theme.border-radius" = 0;
|
|
"zen.theme.content-element-separation" = 0;
|
|
};
|
|
};
|
|
profiles.default = {
|
|
isDefault = true;
|
|
settings = {
|
|
"identity.fxaccounts.enabled" = false;
|
|
};
|
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
ublock-origin
|
|
onepassword-password-manager
|
|
sponsorblock
|
|
darkreader
|
|
vimium
|
|
return-youtube-dislikes
|
|
react-devtools
|
|
firefox-color
|
|
pay-by-privacy
|
|
translate-web-pages
|
|
user-agent-string-switcher
|
|
copy-selected-tabs-to-clipboard
|
|
dearrow
|
|
violentmonkey
|
|
tst-indent-line
|
|
];
|
|
search = {
|
|
default = "SearXNG";
|
|
privateDefault = "SearXNG";
|
|
force = true;
|
|
engines = {
|
|
"SearXNG" = {
|
|
urls = [{ template = "https://search.extremist.software/search?q={searchTerms}"; }];
|
|
definedAliases = [ "@s" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# Override the Kitty desktop entry to always launch in fullscreen
|
|
xdg.desktopEntries.kitty = {
|
|
name = "Kitty";
|
|
genericName = "Terminal Emulator";
|
|
exec = "kitty --start-as=fullscreen";
|
|
icon = "kitty";
|
|
type = "Application";
|
|
categories = ["System" "TerminalEmulator"];
|
|
comment = "Fast, featureful, GPU based terminal emulator";
|
|
};
|
|
|
|
# Autostart applications using proper desktop files
|
|
xdg.autostart = {
|
|
enable = true;
|
|
entries = [
|
|
pkgs.kitty
|
|
config.programs.zen-browser.package
|
|
];
|
|
};
|
|
|
|
# Set Zen Browser as default
|
|
xdg.mimeApps = {
|
|
enable = true;
|
|
defaultApplications = {
|
|
"text/html" = "zen.desktop";
|
|
"x-scheme-handler/http" = "zen.desktop";
|
|
"x-scheme-handler/https" = "zen.desktop";
|
|
"x-scheme-handler/about" = "zen.desktop";
|
|
"x-scheme-handler/unknown" = "zen.desktop";
|
|
"inode/directory" = "nemo.desktop";
|
|
};
|
|
};
|
|
|
|
gtk = {
|
|
enable = true;
|
|
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
|
|
};
|
|
|
|
# Enable rootless Podman with Home Manager
|
|
services.podman = {
|
|
enable = true;
|
|
autoUpdate.enable = true;
|
|
};
|
|
}
|