{ inputs, configDir, config, pkgs, lib, ... }: { imports = [ ../common/home.nix ]; # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave # this value at the release version of the first install of this system. # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). home.stateVersion = "23.11"; # Did you read the comment? home.packages = let packages = with pkgs; [ pavucontrol pamixer picom rofi notify-desktop pass just zathura libvterm texliveFull flameshot brightnessctl pinentry-gtk2 bluez5-experimental bluez-tools blueman dmenu pipewire dconf mu isync openssl meson glib stow syncthing nitrogen redshift networkmanager nixfmt-classic hurl gh libnotify tokei eza typst typst-live gdb ccls clang-tools valgrind fzf rofi rofi-bluetooth docker awscli bear direnv wasmtime wabt gleam erlang zip framework-system-tools bspwm sxhkd discord steam bitwarden nautilus obs-studio vlc easyeffects thunderbird signal-desktop plasma5Packages.kdeconnect-kde (prismlauncher.override { jdks = [ jdk23 jdk8 ]; }) tidal-hifi zotero deadd-notification-center mullvad-browser networkmanagerapplet pasystray arandr inkscape zoom-us gimp libreoffice peek rofimoji playerctl aspell aspellDicts.en nil emacs30 alacritty emacs-lsp-booster mu msmtp semgrep ruff ruff-lsp irony-server typescript-language-server prettierd jdk23 ocaml ocamlPackages.ocaml-lsp dune_3 opam ocamlformat noto-fonts fira-code open-sans inter roboto-mono jetbrains-mono noto-fonts-cjk-sans libertine roboto adwaita-icon-theme ihaskell ]; emacsPackages = with pkgs.emacsPackages; [ mu4e ]; pythonPackages = with pkgs.python312Packages; [ python-lsp-server ]; in packages ++ emacsPackages ++ pythonPackages; home.sessionPath = [ "$HOME/.local/share/racket/8.14/bin/" # This has to be updated every time Racket updates :( ]; home.pointerCursor = { gtk.enable = true; x11.enable = true; name = "Adwaita"; package = pkgs.adwaita-icon-theme; size = 16; }; xresources.properties = { "Xft.antialias" = true; "Xft.rgba" = "rgb"; # type of anti-aliasing "Xft.hinting" = 1; # font hinting "Xft.hintstyle" = "hintslight"; }; # Window Manager xsession.windowManager.bspwm = { enable = true; monitors = { "eDP-2" = [ "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" ]; }; settings = { border_width = 2; normal_border_color = "#919191"; focused_border_color = "#FF6054"; presel_feedback_color = "#CCCCCC"; window_gap = 25; split_ratio = 0.5; borderless_monocle = false; gapless_monocle = true; pointer_follows_monitor = true; pointer_follows_focus = false; focus_follows_pointer = true; merge_overlapping_monitors = true; top_monocle_padding = 25; right_monocle_padding = 25; left_monocle_padding = 25; bottom_monocle_padding = 25; }; }; ### Services services.pasystray.enable = true; services.easyeffects.enable = true; # Hotkey Daemon services.sxhkd = { enable = true; # Reminder: Written in QWERTY keybindings = { # Reload "super + shift + o" = "bspc wm -r"; # Applications "super + Return" = ''emacsclient -n -c -a ""''; "super + control + Return" = "alacritty"; "super + d" = "rofi -show drun"; "super + n" = "rofi-bluetooth"; "super + g" = "rofimoji"; "super + shift + d" = "flameshot gui"; "super + shift + q" = "bspc node -k"; # Window focus "super + {j,k,l,semicolon}" = "bspc node -f {west,south,north,east}"; "super + {Left,Down,Up,Right}" = "bspc node -f {west,south,north,east}"; # Window movement "super + shift + {j,k,l,semicolon}" = "bspc node -s {west,south,north,east}"; "super + shift + {Left,Down,Up,Right}" = "bspc node -s {west,south,north,east}"; # Fullscreen "super + f" = "bspc node -t ~fullscreen"; # Center floating window "super + i" = "bspc node -v 0 0"; # Layout control "super + w" = "bspc desktop -l next"; "super + e" = "bspc desktop -l tiled"; # Toggle floating "super + shift + space" = "bspc node -t ~floating"; # Workspace switching "super + Tab" = "bspc desktop -f last"; # Switch to workspace - first monitor "super + 1" = "bspc desktop -f '^1'"; "super + 2" = "bspc desktop -f '^2'"; "super + 3" = "bspc desktop -f '^3'"; "super + 4" = "bspc desktop -f '^4'"; "super + 5" = "bspc desktop -f '^5'"; "super + 6" = "bspc desktop -f '^6'"; "super + 7" = "bspc desktop -f '^7'"; "super + 8" = "bspc desktop -f '^8'"; "super + 9" = "bspc desktop -f '^9'"; "super + 0" = "bspc desktop -f '^10'"; # Switch to workspace - second monitor "super + ctrl + 1" = "bspc desktop -f '^11'"; "super + ctrl + 2" = "bspc desktop -f '^12'"; "super + ctrl + 3" = "bspc desktop -f '^13'"; "super + ctrl + 4" = "bspc desktop -f '^14'"; "super + ctrl + 5" = "bspc desktop -f '^15'"; "super + ctrl + 6" = "bspc desktop -f '^16'"; "super + ctrl + 7" = "bspc desktop -f '^17'"; "super + ctrl + 8" = "bspc desktop -f '^18'"; "super + ctrl + 9" = "bspc desktop -f '^19'"; "super + ctrl + 0" = "bspc desktop -f '^20'"; # Move container to workspace - first monitor "super + shift + 1" = "bspc node -d '^1'"; "super + shift + 2" = "bspc node -d '^2'"; "super + shift + 3" = "bspc node -d '^3'"; "super + shift + 4" = "bspc node -d '^4'"; "super + shift + 5" = "bspc node -d '^5'"; "super + shift + 6" = "bspc node -d '^6'"; "super + shift + 7" = "bspc node -d '^7'"; "super + shift + 8" = "bspc node -d '^8'"; "super + shift + 9" = "bspc node -d '^9'"; "super + shift + 0" = "bspc node -d '^10'"; # Move container to workspace - second monitor "super + ctrl + shift + 1" = "bspc node -d '^11'"; "super + ctrl + shift + 2" = "bspc node -d '^12'"; "super + ctrl + shift + 3" = "bspc node -d '^13'"; "super + ctrl + shift + 4" = "bspc node -d '^14'"; "super + ctrl + shift + 5" = "bspc node -d '^15'"; "super + ctrl + shift + 6" = "bspc node -d '^16'"; "super + ctrl + shift + 7" = "bspc node -d '^17'"; "super + ctrl + shift + 8" = "bspc node -d '^18'"; "super + ctrl + shift + 9" = "bspc node -d '^19'"; "super + ctrl + shift + 0" = "bspc node -d '^20'"; # Move to adjacent workspaces "super + c" = "bspc desktop -f prev.local"; "super + v" = "bspc desktop -f next.local"; "super + shift + c" = "bspc node -d prev.local --follow"; "super + shift + v" = "bspc node -d next.local --follow"; # Resize mode equivalent - direct resize bindings "super + alt + {j,semicolon}" = "bspc node -z {left -20 0,right 20 0}"; "super + alt + {k,l}" = "bspc node -z {bottom 0 20,top 0 -20}"; # Volume controls "XF86AudioRaiseVolume" = "pamixer --increase 5"; "XF86AudioLowerVolume" = "pamixer --decrease 5"; "XF86AudioMute" = "pamixer --toggle-mute"; "XF86AudioPrev" = "playerctl previous"; "XF86AudioPlay" = "playerctl play-pause"; "XF86AudioNext" = "playerctl next"; # Brightness controls "XF86MonBrightnessUp" = "brightnessctl set +5%"; "XF86MonBrightnessDown" = "brightnessctl set 5%-"; # Convenient volume/brightness keys "super + a" = "pamixer --increase 5"; "super + s" = "pamixer --decrease 5"; "super + shift + a" = "brightnessctl set +5%"; "super + shift + s" = "brightnessctl set 5%-"; }; }; # Compositor services.picom = { enable = true; backend = "glx"; activeOpacity = 1; inactiveOpacity = 1; }; services.emacs = { enable = true; defaultEditor = true; package = pkgs.emacs30; }; services.redshift = { enable = true; tray = true; dawnTime = "6:00-7:00"; duskTime = "20:00-21:00"; temperature = { day = 6500; night = 3000; }; }; ### Programs programs.home-manager.enable = true; programs.mu.enable = true; programs.git = { enable = true; userName = "Lucas Sta Maria"; userEmail = "lucas@priime.dev"; signing = { key = "2EAF5BA156A36810B057BF61F07FB16A826E3B47"; signByDefault = true; }; extraConfig = { pull.rebase = true; github.user = "priime0"; credential.helper = "store"; merge.conflictstyle = "zdiff3"; diff.algorithm = "histogram"; }; }; programs.direnv = { enable = true; enableFishIntegration = true; nix-direnv.enable = true; }; programs.alacritty = { enable = true; settings = { terminal.shell = "fish"; font.size = 5; font.normal = { family = "JetBrains Mono"; style = "SemiBold"; }; font.bold = { family = "JetBrains Mono"; style = "Bold"; }; font.italic = { family = "JetBrains Mono"; style = "Italic"; }; font.bold_italic = { family = "JetBrains Mono"; style = "Bold Italic"; }; }; }; programs.gh = { enable = true; settings.editor = "emacsclient"; }; programs.firefox = { enable = true; policies = { WebsiteFilter = { Block = [ "*://*.facebook.com/" ]; }; }; }; }