# man home-configuration.nix { config, lib, pkgs, ... }: let inherit (lib) mkIf optionals; inherit (pkgs.stdenv) isLinux isDarwin; #GNOME on Linux in { # ======================================================================= # ----------------------- HOME & INSTALLED PACKAGES --------------------- # ======================================================================= home.username = "trude"; home.homeDirectory = "/home/trude"; home.stateVersion = "24.05"; nixpkgs.config.allowUnfree = true; home.packages = with pkgs; [ google-chrome transmission_4 neovim gh unzip fastfetch # Override nerdfont to install JetBrains only. (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) # Shell Scripts (writeShellScriptBin "extract" '' if [ -f $1 ]; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar e $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi '') (writeShellScriptBin "pushall" '' if [[ -z "$1" ]]; then echo "Usage: pushall \"commit message\"" else git pull git diff read -p "Press ENTER to continue..." git add -A git commit -m "$@" git push fi '') (writeShellScriptBin "update" '' if command -v nixos-rebuild 2>&1 >/dev/null; then sudo nixos-rebuild switch --recreate-lock-file --flake /etc/nixos#default fi if command -v darwin-rebuild 2>&1 >/dev/null; then sudo softwareupdate -i -a nix run nix-darwin -- switch --recreate-lock-file --flake ~/.config/nix-darwin fi nix-channel --update home-manager -b backup switch '') ] # Linux-only apps ++ optionals isLinux [eyedropper gnome-terminal epiphany gnome-podcasts impression gnome-boxes adw-gtk3 gnomeExtensions.vitals gnomeExtensions.appindicator gnomeExtensions.caffeine] # macOS-only apps ++ optionals isDarwin []; # Cursor theme fix (Linux) home.file = mkIf isLinux { ".icons/default".source = "${pkgs.bibata-cursors}/share/icons/Bibata-Modern-Classic"; # Set file content as another file }; home.sessionVariables = { EDITOR = "nvim"; }; # ===================================================== # -------------------- LINUX -------------------------- # ===================================================== gtk = mkIf isLinux { enable = true; cursorTheme = { name = "Bibata-Modern-Classic"; package = pkgs.bibata-cursors; size = 22; }; # iconTheme = { # name = "Papirus"; # package = pkgs.papirus-icon-theme; # }; }; dconf.settings = with lib.hm.gvariant; mkIf isLinux { "org/gnome/Console" = { theme = "auto"; use-system-font = true; }; "org/gnome/calculator" = { accuracy = 9; angle-units = "degrees"; base = 10; button-mode = "programming"; number-format = "automatic"; show-thousands = false; show-zeroes = false; source-currency = ""; source-units = "degree"; target-currency = ""; target-units = "radian"; word-size = 64; }; "org/gnome/desktop/a11y/interface" = { high-contrast = false; show-status-shapes = false; }; "org/gnome/desktop/background" = { color-shading-type = "solid"; picture-options = "zoom"; picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/blobs-l.svg"; picture-uri-dark = "file:///run/current-system/sw/share/backgrounds/gnome/blobs-d.svg"; primary-color = "#241f31"; secondary-color = "#000000"; }; "org/gnome/desktop/calendar" = { show-weekdate = false; }; "org/gnome/desktop/datetime" = { automatic-timezone = true; }; "org/gnome/desktop/input-sources" = { current = mkUint32 0; mru-sources = [ (mkTuple [ "xkb" "us+altgr-intl" ]) (mkTuple [ "xkb" "us+intl" ]) ]; sources = [ (mkTuple [ "xkb" "us+altgr-intl" ]) ]; xkb-options = [ "caps:ctrl_modifier" ]; }; "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-seconds = false; clock-show-weekday = true; color-scheme = "prefer-dark"; enable-animations = true; font-antialiasing = "grayscale"; font-hinting = "slight"; gtk-theme = "adw-gtk3-dark"; locate-pointer = false; monospace-font-name = "JetBrainsMono Nerd Font 11"; overlay-scrolling = true; toolkit-accessibility = false; }; "org/gnome/desktop/peripherals/touchpad" = { two-finger-scrolling-enabled = true; }; "org/gnome/desktop/privacy" = { old-files-age = mkUint32 30; recent-files-max-age = 30; remove-old-temp-files = true; remove-old-trash-files = true; report-technical-problems = true; }; "org/gnome/desktop/screensaver" = { color-shading-type = "solid"; picture-options = "zoom"; picture-uri = "file:///usr/share/backgrounds/gnome/blobs-l.svg"; primary-color = "#241f31"; secondary-color = "#000000"; }; "org/gnome/desktop/search-providers" = { enabled = [ "org.gnome.Weather.desktop" ]; sort-order = [ "org.gnome.Contacts.desktop" "org.gnome.Documents.desktop" "org.gnome.Nautilus.desktop" "org.gnome.Calculator.desktop" "org.gnome.seahorse.Application.desktop" "org.gnome.Characters.desktop" "org.gnome.clocks.desktop" ]; }; "org/gnome/desktop/session" = { idle-delay = mkUint32 300; }; "org/gnome/desktop/sound" = { event-sounds = true; theme-name = "__custom"; }; "org/gnome/desktop/wm/preferences" = { button-layout = "appmenu:minimize,close"; resize-with-right-button = true; visual-bell = false; }; "org/gnome/epiphany" = { # GNOME Web homepage-url = "about:newtab"; start-in-incognito-mode = false; restore-session-policy = "always"; use-google-search-suggestions = false; default-search-engine = "StartPage"; search-engine-providers = with lib.hm.gvariant; [ [ (mkDictionaryEntry["url" (mkVariant "https://duckduckgo.com/?q=%s&t=epiphany")]) (mkDictionaryEntry["bang" (mkVariant "!d")]) (mkDictionaryEntry["name" (mkVariant "DuckDuckGo")]) ] [ (mkDictionaryEntry["url" (mkVariant "https://www.google.com/search?q=%s")]) (mkDictionaryEntry["bang" (mkVariant "!g")]) (mkDictionaryEntry["name" (mkVariant "Google")]) ] [ (mkDictionaryEntry["url" (mkVariant "https://search.nixos.org/packages?channel=23.11&from=0&size=50&sort=relevance&type=packages&query=%s")]) (mkDictionaryEntry["bang" (mkVariant "!np")]) (mkDictionaryEntry["name" (mkVariant "Nix Packages")]) ] [ (mkDictionaryEntry["url" (mkVariant "https://www.startpage.com/search?q=%s")]) (mkDictionaryEntry["bang" (mkVariant "!s")]) (mkDictionaryEntry["name" (mkVariant "StartPage")]) ] ]; content-filters = [ "https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json" "https://better.fyi/blockerList.json" "https://github.com/AdguardTeam/BlockYouTubeAdsShortcut/blob/master/index.js" ]; }; "org/gnome/epiphany/web" = { show-developer-actions = true; }; "org/gnome/evince/default" = { continuous = true; dual-page = false; dual-page-odd-left = true; enable-spellchecking = true; inverted-colors = false; show-sidebar = true; sidebar-page = "thumbnails"; sidebar-size = 132; sizing-mode = "automatic"; }; "org/gnome/evolution-data-server" = { migrated = true; }; "org/gnome/mutter" = { center-new-windows = true; edge-tiling = true; experimental-features = [ "scale-monitor-framebuffer" ]; }; "org/gnome/mutter/keybindings" = { toggle-tiled-left = []; toggle-tiled-right = []; }; "org/gnome/nautilus/icon-view" = { default-zoom-level = "small"; }; "org/gnome/nautilus/preferences" = { default-folder-viewer = "icon-view"; migrated-gtk-settings = true; search-filter-time-type = "last_modified"; }; "org/gnome/settings-daemon/plugins/color" = { night-light-enabled = true; night-light-temperature = mkUint32 2410; sleep-inactive-ac-timeout = 3600; sleep-inactive-ac-type = "nothing"; }; "org/gnome/settings-daemon/plugins/power" = { power-button-action = "interactive"; sleep-inactive-ac-type = "nothing"; }; "org/gnome/shell" = { enabled-extensions = [ "caffeine@patapon.info" "appindicatorsupport@rgcjonas.gmail.com" "Vitals@CoreCoding.com" "gtk4-ding@smedius.gitlab.com" "blur-my-shell@aunetx" ]; favorite-apps = [ "google-chrome.desktop" "org.gnome.Epiphany.desktop" "org.gnome.Nautilus.desktop" "org.gnome.Console.desktop" "org.gnome.Terminal.desktop" ]; last-selected-power-profile = "performance"; }; "org/gnome/shell/extensions/dash-to-dock" = { dash-max-icon-size = 34; dock-fixed = false; dock-position = "BOTTOM"; extend-height = false; }; "org/gnome/shell/extensions/ding" = { check-x11wayland = true; icon-size = "small"; show-home = false; }; "org/gnome/shell/extensions/vitals" = { fixed-widths = false; hot-sensors = [ "_memory_usage_" "_processor_usage_" "__temperature_max__" ]; icon-style = 1; use-higher-precision = false; }; "org/gnome/shell/world-clocks" = { locations = []; }; "org/gnome/system/location" = { enabled = true; }; "org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9" = { background-color = "rgb(0,0,0)"; backspace-binding = "auto"; exit-action = "hold"; font = "JetBrainsMono Nerd Font 12"; foreground-color = "rgb(208,207,204)"; use-system-font = false; use-theme-colors = true; }; }; # Default browser xdg.mimeApps = mkIf isLinux { enable = true; defaultApplications = { "text/html" = "org.gnome.Epiphany.desktop"; "x-scheme-handler/http" = "google-chrome.desktop"; "x-scheme-handler/https" = "google-chrome.desktop"; "x-scheme-handler/about" = "google-chrome.desktop"; "x-scheme-handler/unknown" = "google-chrome.desktop"; }; }; programs.firefox = mkIf isLinux { enable = true; policies = { DisableTelemetry = true; DisableFirefoxStudies = true; DontCheckDefaultBrowser = true; DisablePocket = true; SearchBar = "unified"; Preferences = { # Privacy settings "extensions.pocket.enabled" = false; "browser.topsites.contile.enabled" = false; "browser.newtabpage.activity-stream.showSponsored" = false; "browser.newtabpage.activity-stream.system.showSponsored" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; }; ExtensionSettings = { "uBlock0@raymondhill.net" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; installation_mode = "force_installed"; }; "jid1-MnnxcxisBPnSXQ@jetpack" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi"; installation_mode = "force_installed"; }; }; }; profiles.default = { id = 0; name = "TrudeEH"; isDefault = true; settings = { "browser.startup.homepage" = "about:newtab"; "browser.search.defaultenginename" = "DuckDuckGo"; "browser.search.order.1" = "DuckDuckGo"; "general.smoothScroll" = true; "browser.disableResetPrompt" = true; "browser.download.panel.shown" = true; "browser.download.useDownloadDir" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.shell.checkDefaultBrowser" = false; "browser.shell.defaultBrowserCheckCount" = 1; "dom.security.https_only_mode" = true; "identity.fxaccounts.enabled" = false; "privacy.trackingprotection.enabled" = true; "signon.rememberSignons" = false; }; search = { force = true; default = "Startpage"; order = [ "Startpage" "DuckDuckGo" "Google" ]; engines = { "Startpage" = { urls = [{ template = "https://www.startpage.com/do/search?query={searchTerms}"; }]; definedAliases = [ "@s" ]; }; "Nix Packages" = { urls = [{ template = "https://search.nixos.org/packages"; params = [ { name = "type"; value = "packages"; } { name = "query"; value = "{searchTerms}"; } ]; }]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@np" ]; }; "NixOS Wiki" = { urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }]; iconUpdateURL = "https://nixos.wiki/favicon.png"; updateInterval = 24 * 60 * 60 * 1000; # every day definedAliases = [ "@nw" ]; }; "Bing".metaData.hidden = true; "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias }; }; bookmarks = [ { name = "Toolbar"; toolbar = true; bookmarks = [ { name = "YouTube"; url = "https://www.youtube.com/"; } { name = "Arch Linux"; tags = [ "news" "wiki" "arch" ]; url = "https://archlinux.org/"; } { name = "NixOS Discourse"; tags = [ "wiki" "nix" ]; url = "https://discourse.nixos.org/"; } { name = "GitHub"; url = "https://github.com/"; } { name = "WOL"; url = "https://wol.jw.org/pt-PT/"; } { name = "Rust Book"; url = "https://doc.rust-lang.org/stable/book/"; } { name = "Rust by example"; url = "https://doc.rust-lang.org/stable/rust-by-example/"; } { name = "Rustlings"; url = "https://github.com/rust-lang/rustlings/"; } ]; } ]; }; }; # ===================================================== # -------------------- macOS -------------------------- # ===================================================== # =========================================================== # -------------------- Independent -------------------------- # =========================================================== # Autostart services on boot services.gnome-keyring.enable = isLinux; programs.home-manager.enable = true; programs.tmux = { enable = true; aggressiveResize = true; baseIndex = 1; disableConfirmationPrompt = true; escapeTime = 250; keyMode = "vi"; mouse = true; plugins = with pkgs; [ tmuxPlugins.cpu ]; prefix = "C-s"; terminal = "tmux-256color"; extraConfig = '' bind-key C command-prompt -p "Name of new window: " "new-window -n '%%'" # hjkl pane traversal bind-key h select-pane -L bind-key j select-pane -D bind-key k select-pane -U bind-key l select-pane -R # easy reload config bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded." # set window split bind-key v split-window -h -c "#{pane_current_path}" bind-key b split-window -v -c "#{pane_current_path}" # Styling set-option -g status-position top set -g mode-style "fg=black,bg=orange" set-option -g pane-border-style fg=colour236 set-option -g pane-active-border-style fg=orange set-window-option -g window-status-current-style fg=orange,bg=default,bright set-window-option -g window-status-style fg=colour244,bg=default set-window-option -g clock-mode-colour orange set-option -g status-style "bg=default,fg=white" set-option -g status-left "" set-option -g status-right '[Session: #S] [CPU: #{cpu_fg_color}#{cpu_percentage}#[default]] [RAM: #{ram_fg_color}#{ram_percentage}#[default]] %d#[dim]/#[default]%m#[dim]/#[default]%Y %I:%M#[dim]%P#[default]' set -g status-interval 1 set -g status-right-length 60 set -g @cpu_high_fg_color "#[fg=#FF0000]" set -g @ram_high_fg_color "#[fg=#FF0000]" run-shell ${pkgs.tmuxPlugins.cpu}/share/tmux-plugins/cpu/cpu.tmux ''; }; programs.git = { enable = true; userName = "TrudeEH"; userEmail = "ehtrude@gmail.com"; aliases = { a = "add"; c = "commit"; ca = "commit --amend"; can = "commit --amend --no-edit"; cl = "clone"; cm = "commit -m"; co = "checkout"; cp = "cherry-pick"; cpx = "cherry-pick -x"; d = "diff"; f = "fetch"; fo = "fetch origin"; fu = "fetch upstream"; lol = "log --graph --decorate --pretty=oneline --abbrev-commit"; lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all"; pl = "pull"; pr = "pull -r"; ps = "push"; psf = "push -f"; rb = "rebase"; rbi = "rebase -i"; r = "remote"; ra = "remote add"; rr = "remote rm"; rv = "remote -v"; rs = "remote show"; st = "status"; }; extraConfig = { pull = { rebase=true; }; }; }; programs.bash = { enable = true; enableCompletion = true; shellAliases = { l = "ls -alh"; ls = "ls --color=auto"; ll = "ls -lhi"; grep = "grep --color=auto"; ta = "tmux attach"; t = "tmux"; v = "nvim"; cpp = "rsync -ah --progress"; code = "codium --enable-features=UseOzonePlatform --ozone-platform=wayland"; neofetch = "fastfetch"; sudo = "sudo -i"; ns = "nix-shell"; }; initExtra = "set completion-ignore-case On"; bashrcExtra = '' export EDITOR="nvim"; export PS1="\n[\[\e[37m\]\u\[\e[0m\]@\[\e[37;2m\]\h\[\e[0m\]] \[\e[1m\]\w \[\e[0;2m\]J:\[\e[0m\]\j\n\$ "; if [[ -z $TMUX ]]; then tmux attach if [[ $? == 1 ]]; then tmux new -s main fi fi ''; }; programs.vscode = { enable = true; package = pkgs.vscodium; enableUpdateCheck = false; enableExtensionUpdateCheck = false; mutableExtensionsDir = false; # Extensions extensions = (with pkgs.vscode-extensions; [ ms-vscode-remote.remote-ssh mhutchie.git-graph pkief.material-icon-theme oderwat.indent-rainbow bierner.emojisense jnoortheen.nix-ide ritwickdey.liveserver github.vscode-pull-request-github ms-toolsai.jupyter ms-python.python arrterian.nix-env-selector piousdeer.adwaita-theme ]); # Settings userSettings = { # General "editor.fontSize" = 14; "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'monospace', monospace"; "terminal.integrated.fontSize" = 12; "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font', 'monospace', monospace"; "window.zoomLevel" = 0.1; "editor.multiCursorModifier" = "ctrlCmd"; "workbench.startupEditor" = "none"; "explorer.compactFolders" = false; "workbench.tree.indent" = 12; # Whitespace "files.trimTrailingWhitespace" = true; "files.trimFinalNewlines" = true; "files.insertFinalNewline" = true; "diffEditor.ignoreTrimWhitespace" = false; # Git "git.enableCommitSigning" = false; "git.enableSmartCommit" = true; "git.confirmSync" = false; "git.autofetch" = true; # Styling "window.autoDetectColorScheme" = true; "workbench.colorTheme" = "Adwaita Dark"; "workbench.preferredDarkColorTheme" = "Adwaita Dark"; "workbench.preferredLightColorTheme" = "Adwaita Light"; "workbench.iconTheme" = "material-icon-theme"; "material-icon-theme.activeIconPack" = "none"; "material-icon-theme.folders.theme" = "classic"; "editor.fontLigatures" = true; "window.commandCenter" = true; "workbench.productIconTheme" = "adwaita"; "editor.renderLineHighlight" = "none"; # Other "telemetry.telemetryLevel" = "off"; "update.showReleaseNotes" = false; "window.titleBarStyle" = "custom"; "explorer.confirmDelete" = false; }; }; }