{ config, pkgs, user, firefox-addons, ... }: { # Home Manager needs a bit of information about you and the # paths it should manage. home.username = user; home.homeDirectory = "/home/${user}"; # Packages that should be installed to the user profile. home.packages = with pkgs; [ aseprite audacity blender darktable digikam discord drawio exiftool # For digikam famistudio digikam firefox flameshot gimp-with-plugins gnucash godot_4 grafx2 jellyfin-media-player keepassxc krita rawtherapee libreoffice lmms lutris moonlight-qt ncdu nextcloud-client nixpkgs-fmt obsidian pavucontrol picard rawtherapee rofi spotify sqlitebrowser steam syncthing ventoy-full vlc winetricks wineWowPackages.unstableFull yt-dlp ]; # WM/DE config gtk = { enable = true; font.name = "Victor Mono SemiBold 12"; theme = { name = "SolArc-Dark"; package = pkgs.solarc-gtk-theme; }; }; xsession = { enable = true; windowManager.bspwm = { enable = true; settings = { border_width = 10; }; extraConfig = '' bspc monitor -d I II III IV V polybar & ''; startupPrograms = [ ]; }; }; services.sxhkd = { enable = true; keybindings = { "Super_L; @Super_L" = "rofi -show drun"; "super + Return" = "kitty"; # # bspwm hotkeys # # quit/restart bspwm "super + alt + {q,r}" = "bspc {quit,wm -r}"; # close and kill "super + {_,shift + }w" = "bspc node -{c,k}"; # # state/flags # # set the window state "super + {t,shift + t,s,f}" = "bspc node -t {tiled,pseudo_tiled,floating,fullscreen}"; # set the node flags "super + ctrl + {m,x,y,z}" = "bspc node -g {marked,locked,sticky,private}"; # # focus/swap # # focus the node in the given direction "super + {_,shift + }{h,j,k,l}" = "bspc node -{f,s} {west,south,north,east}"; # focus the node for the given path jump "super + {p,b,comma,period}" = "bspc node -f @{parent,brother,first,second}"; # focus the next/previous window in the current desktop "super + {_,shift + }c" = "bspc node -f {next,prev}.local.!hidden.window"; # focus the next/previous desktop in the current monitor "super + bracket{left,right}" = "bspc desktop -f {prev,next}.local"; # focus the last node/desktop "super + {grave,Tab}" = "bspc {node,desktop} -f last"; # focus the older or newer node in the focus history "super + {o,i}" = '' bspc wm -h off; \ bspc node {older,newer} -f; \ bspc wm -h on ''; # focus or send to the given desktop "super + {_,shift + }{1-9,0}" = "bspc {desktop -f,node -d} '^{1-9,10}'"; # # move/resize # # expand a window by moving one of its side outward "super + alt + {h,j,k,l}" = " bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}"; # contract a window by moving one of its side inward "super + alt + shift + {h,j,k,l}" = "bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}"; # move a floating window "super + {Left,Down,Up,Right}" = " bspc node -v {-20 0,0 20,0 -20,20 0}"; }; }; services.polybar = { enable = true; config = "${pkgs.polybar}/etc/polybar/config.ini"; script = "polybar &"; }; # User software configurations programs = { bash = { shellAliases = { "git-override" = "git add . && git commit --amend --no-edit && git push --force-with-lease"; }; }; firefox = { enable = true; profiles.default = { settings = { "browser.newtabpage.activity-stream.default.sites" = "https://www.wikipedia.org/"; "browser.newtabpage.activity-stream.discoverystream.saveToPocketCard.enabled" = false; "browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled" = false; "browser.newtabpage.activity-stream.feeds.section.topstories" = false; "browser.newtabpage.activity-stream.feeds.system.topstories" = false; "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned" = "duckduckgo"; "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.searchEngines" = "duckduckgo"; "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; "browser.newtabpage.activity-stream.showSponsored" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.system.showSponsored" = false; "browser.newtabpage.pinned" = [{ url = "https://duckduckgo.com"; label = "@duckduckgo"; searchTopSite = true; }]; "browser.topsites.contile.cachedTiles" = [ ]; "browser.topsites.contile.enabled" = false; # man fuck this shit, its the api that gets FF newpage shortcuts like FB, expedia, ... "browser.urlbar.suggest.quicksuggest.sponsored" = false; "extensions.autoDisableScopes" = 0; }; extensions = with firefox-addons; [ darkreader multi-account-containers simple-tab-groups ublock-origin umatrix ]; search = { force = true; default = "DuckDuckGo"; engines = { "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" ]; }; }; order = [ "DuckDuckGo" "Nix Packages" "Wikipedia" "Google" "Amazon" ]; }; }; }; git = { enable = true; userEmail = "alexmat2on@protonmail.com"; userName = "alex"; ignores = [ "*~" ]; extraConfig = { init.defaultBranch = "main"; }; }; kitty = { enable = true; # TODO figure out how to get atau-nixpkgs working from the flake with different systems # background_image ${atau-nixpkgs.atau-wallpapers}/share/backgrounds/atau-wallpapers/aos1.png extraConfig = '' background_tint 0.2 background_image_layout centered modify_font cell_width 110% window_border_width 1 window_margin_width 10 window_padding_width 2 ''; theme = "Rosé Pine Dawn"; font.package = pkgs.victor-mono; font.name = "Victor Mono"; font.size = 12; }; mpv = { enable = true; scriptOpts = { "ytdl_hook" = { "ytdl_path" = "${pkgs.yt-dlp}/bin/yt-dlp"; }; }; }; vscode = { enable = true; extensions = with pkgs; [ vscode-extensions.eamodio.gitlens vscode-extensions.jnoortheen.nix-ide vscode-extensions.scalameta.metals ]; userSettings = { "workbench.colorTheme" = "Default Dark Modern"; "security.workspace.trust.untrustedFiles" = "open"; "nix.formatterPath" = "nixpkgs-fmt"; "files.autoSave" = "afterDelay"; "editor.formatOnSave" = true; }; }; }; # This value determines the Home Manager release that your # configuration is compatible with. This helps avoid breakage # when a new Home Manager release introduces backwards # incompatible changes. # # You can update Home Manager without changing this value. See # the Home Manager release notes for a list of state version # changes in each release. home.stateVersion = "23.05"; home.enableNixpkgsReleaseCheck = true; # Let Home Manager install and manage itself. programs.home-manager.enable = true; }