{ lib, pkgs, config, ... }: let # Theming constants colors = config.lib.stylix.colors; fonts = config.stylix.fonts; borderSize = 1; windowPadding = 2; waylockOptions = "-init-color 0x${colors.base00} -input-color 0x${colors.base02} -fail-color 0x${colors.base00}"; in { # Extra modules imports = [ # nixvim.homeManagerModules.nixvim # stylix.homeManagerModules.stylix ]; # Packages home.packages = with pkgs; [ # Programs # vscode # feishin # discord # obsidian # winbox # Utilities # pulsemixer # waylock # playerctl # Fish plugin dependencies # grc # fzf # Rust development # rustc # cargo # rustfmt # Bitwarden # rofi-rbw # LaTeX libraries # (pkgs.texlive.combine { # inherit (pkgs.texlive) scheme-full; # }) ]; # Stylix stylix = { # enable = true; # polarity = "dark"; # base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; # fonts = { # # monospace = { # # package = pkgs.dina-font; # # name = "Dina"; # # }; # sizes = { # terminal = 9; # }; # }; # autoEnable = false; # targets = { # foot.enable = true; # nixvim.enable = true; # qutebrowser.enable = true; # vscode.enable = true; # # zathura.enable = true; # }; }; # Fish shell # programs.fish = { # enable = true; # plugins = [ # { name = "done"; src = pkgs.fishPlugins.done.src; } # { name = "fzf"; src = pkgs.fishPlugins.fzf-fish.src; } # { name = "grc"; src = pkgs.fishPlugins.grc.src; } # ]; # }; # # Bash prompt # programs.bash = { # enable = true; # initExtra = '' # if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] # then # shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" # exec ${pkgs.fish}/bin/fish $LOGIN_OPTION # fi # ''; # bashrcExtra = '' # FG_BLACK="\[$(tput setaf 0)\]" # FG_RED="\[$(tput setaf 1)\]" # FG_GREEN="\[$(tput setaf 2)\]" # FG_YELLOW="\[$(tput setaf 3)\]" # FG_BLUE="\[$(tput setaf 4)\]" # FG_MAGENTA="\[$(tput setaf 5)\]" # FG_CYAN="\[$(tput setaf 6)\]" # FG_WHITE="\[$(tput setaf 7)\]" # RESET="\[$(tput sgr0)\]" # export PS0="\n''${RESET}" # export PS1="''${FG_GREEN}\n│\w\n│" # export PS2="│" # ''; # }; # Direnv setup # programs.direnv = { # enable = true; # nix-direnv.enable = true; # }; # Qutebrowser # programs.qutebrowser = { # enable = true; # extraConfig = '' # config.set("colors.webpage.darkmode.enabled", False) # config.set("colors.webpage.preferred_color_scheme", "dark") # config.set("fonts.default_family", "${fonts.monospace.name}") # config.set("fonts.default_size", "${toString fonts.sizes.terminal}pt") # ''; # }; # Bitwarden client # programs.rbw = { # enable = true; # settings = { # base_url = "https://keys.bulthuis.dev"; # identity_url = "https://keys.bulthuis.dev"; # email = "jan@bulthuis.dev"; # pinentry = pkgs.pinentry; # }; # }; # Firefox # programs.firefox = { # enable = true; # policies = { # AppAutoUpdate = false; # BlockAboutAddons = true; # BlockAboutConfig = true; # BlockAboutProfiles = true; # DisableAppUpdate = true; # DisableFeedbackCommands = true; # DisableMasterPasswordCreation = true; # DisablePocket = true; # DisableProfileImport = true; # DisableProfileRefresh = true; # DisableSetDesktopBackground = true; # DisableTelemetry = true; # DisplayBookmarksToolbar = "never"; # DisplayMenuBar = "never"; # DNSOverHTTPS = { Enabled = false; }; # DontCheckDefaultBrowser = true; # PasswordManagerEnabled = false; # TranslateEnabled = true; # UseSystemPrintDialog = true; # }; # profiles.nixos = { # search.default = "DuckDuckGo"; # extensions = with pkgs.nur.repos.rycee.firefox-addons; [ # ublock-origin # ]; # settings = { # "browser.tabs.inTitlebar" = 0; # "extensions.autoDisableScopes" = 0; # }; # # Force overwriting configuration file # search.force = true; # containersForce = true; # }; # }; # # Email setup # accounts.email.accounts = { # Personal = { # primary = true; # realName = "Jan Bulthuis"; # userName = "jan@bulthuis.dev"; # address = "jan@bulthuis.dev"; # thunderbird.enable = true; # flavor = "plain"; # imap = { # host = "mail.bulthuis.dev"; # port = 993; # }; # smtp = { # host = "mail.bulthuis.dev"; # port = 465; # }; # }; # }; # # Thunderbird setup # programs.thunderbird = { # enable = true; # profiles.nixos = { # isDefault = true; # }; # }; # Rofi setup # programs.rofi = { # enable = true; # package = pkgs.rofi-wayland; # font = "${fonts.monospace.name} ${toString fonts.sizes.terminal}"; # theme = let # inherit (config.lib.formats.rasi) mkLiteral; # in { # "*" = { # background-color = mkLiteral "rgba(0, 0, 0, 0%)"; # border-color = mkLiteral colors.withHashtag.base05; # text-color = mkLiteral colors.withHashtag.base05; # }; # mainbox = { # background-color = mkLiteral colors.withHashtag.base00; # border = mkLiteral "${toString borderSize}px"; # }; # element-text = { # highlight = mkLiteral colors.withHashtag.base09; # }; # inputbar = { # children = mkLiteral "[textbox-search, entry]"; # }; # listview = { # padding = mkLiteral "2px 0px"; # }; # textbox-search = { # expand = false; # content = "> "; # }; # "inputbar, message" = { # padding = mkLiteral "2px"; # }; # element = { # padding = mkLiteral "0px 2px"; # }; # "element selected" = { # background-color = mkLiteral colors.withHashtag.base02; # }; # }; # }; # Dark mode # dconf.settings = { # "org/gnome/desktop/interface" = { # color-scheme = "prefer-dark"; # }; # }; # qt = { # enable = true; # platformTheme.name = "adwaita"; # style.name = "adwaita-dark"; # }; # systemd.user.sessionVariables = config.home.sessionVariables; # Configure GTK # gtk = let # css = '' # headerbar.default-decoration { # margin-bottom: 50px; # margin-top: -100px; # } # window.csd, # window.csd decoration { # box-shadow: none; # } # ''; # in { # enable = true; # # Dark mode # theme = { # name = "Adwaita-dark"; # package = pkgs.gnome-themes-extra; # }; # # Disable CSD # gtk3.extraCss = css; # gtk4.extraCss = css; # }; # Cursors # home.pointerCursor = { # gtk.enable = true; # name = lib.mkForce "BreezeX-RosePine-Linux"; # package = lib.mkForce pkgs.rose-pine-cursor; # size = lib.mkForce 24; # x11 = { # defaultCursor = lib.mkForce "BreezeX-RosePine-Linux"; # enable = true; # }; # }; # Neovim setup # programs.nixvim = { # enable = true; # defaultEditor = true; # viAlias = true; # vimAlias = true; # extraPackages = with pkgs; [ # ]; # opts = { # number = true; # relativenumber = true; # signcolumn = "yes"; # ignorecase = true; # smartcase = true; # tabstop = 4; # shiftwidth = 4; # softtabstop = 0; # expandtab = true; # smarttab = true; # list = true; # listchars = "tab:»┈«,trail:·,extends:→,precedes:←,nbsp:␣"; # }; # diagnostics = { # enable = true; # signs = true; # underline = true; # update_in_insert = true; # }; # extraConfigLua = '' # vim.fn.sign_define("DiagnosticSignError", # {text = "", texthl = "DiagnosticSignError"}) # vim.fn.sign_define("DiagnosticSignWarn", # {text = "", texthl = "DiagnosticSignWarn"}) # vim.fn.sign_define("DiagnosticSignInfo", # {text = "", texthl = "DiagnosticSignInfo"}) # vim.fn.sign_define("DiagnosticSignHint", # {text = "💡", texthl = "DiagnosticSignHint"}) # ''; # keymaps = [ # # Save shortcut # { # action = ":update"; # key = ""; # mode = "n"; # } # { # action = ":update"; # key = ""; # mode = "i"; # } # # Neo tree # { # action = ":Neotree action=focus reveal toggle"; # key = "n"; # mode = "n"; # options.silent = true; # } # ]; # autoCmd = [ # { # desc = "Automatic formatting"; # event = "BufWritePre"; # callback = { # __raw = '' # function() # vim.lsp.buf.format { # async = false, # } # end # ''; # }; # } # ]; # highlight = { # Comment = { # italic = true; # fg = colors.withHashtag.base03; # }; # }; # plugins.lsp = { # enable = true; # }; # #plugins.treesitter = { # # enable = true; # #}; # plugins.cmp = { # enable = true; # settings = { # mapping = { # "" = "cmp.mapping.complete()"; # "" = "cmp.mapping.scroll_docs(-4)"; # "" = "cmp.mapping.close()"; # "" = "cmp.mapping.scroll_docs(4)"; # "" = "cmp.mapping.confirm({ select = true })"; # "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; # "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; # }; # sources = [ # { name = "path"; } # { name = "nvim_lsp"; } # ]; # }; # }; # plugins.neo-tree = { # enable = true; # closeIfLastWindow = true; # window = { # width = 30; # autoExpandWidth = true; # }; # extraOptions = { # default_component_configs.git_status.symbols = { # # Change type # added = "+"; # deleted = "✕"; # modified = "✦"; # renamed = "→"; # # Status type # untracked = "?"; # ignored = "▫"; # unstaged = "□"; # staged = "■"; # conflict = "‼"; # }; # }; # }; # #plugins.cmp-nvim-lsp.enable = true; # plugins.gitsigns = { # enable = true; # settings.current_line_blame = true; # }; # #plugins.copilot-vim = { # # enable = true; # #}; # plugins.rust-tools = { # enable = true; # }; # plugins.vimtex = { # enable = true; # texlivePackage = null; # settings = { # view_method = "zathura"; # }; # }; # }; # programs.neovim.defaultEditor = true; # Foot setup # programs.foot = { # enable = true; # settings = { # main = let # font = fonts.monospace.name; # size = toString fonts.sizes.terminal; # in { # font = lib.mkForce "${font}:style=Regular:size=${size}"; # font-bold = "${font}:style=Bold:size=${size}"; # font-italic = "${font}:style=Italic:size=${size}"; # font-bold-italic = "${font}:style=Bold Italic:size=${size}"; # }; # }; # }; # Fuzzel setup #programs.fuzzel = { # enable = true; # settings = { # main = { # font = "${fonts.monospace.name}:size=${toString fonts.sizes.terminal}"; # icons-enabled = "no"; # horizontal-pad = borderSize; # vertical-pad = borderSize; # inner-pad = 2; # dpi-aware = "no"; # }; # colors = { # background = colors.base00 + "ff"; # text = colors.base05 + "ff"; # match = colors.base09 + "ff"; # selection = colors.base02 + "ff"; # selection-text = colors.base05 + "ff"; # selection-match = colors.base09 + "ff"; # border = colors.base05 + "ff"; # }; # border = { # width = borderSize; # radius = 0; # }; # }; # }; # Mako notifications setup # services.mako = { # enable = true; # anchor = "top-right"; # defaultTimeout = 5000; # backgroundColor = "#${colors.base00}ff"; # textColor = "#${colors.base05}ff"; # borderColor = "#${colors.base05}ff"; # progressColor = "#${colors.base09}ff"; # borderRadius = 0; # borderSize = borderSize; # font = "${fonts.monospace.name} ${toString fonts.sizes.terminal}"; # }; # Waybar setup # programs.waybar = { # enable = true; # settings = { # mainBar = { # layer = "top"; # spacing = 16; # modules-left = [ # "river/tags" # ]; # modules-center = [ # #"river/window" # "mpris" # ]; # modules-right = [ # "pulseaudio" # "battery" # "clock" # ]; # "river/window" = { # max-length = 50; # }; # "river/tags" = { # tag-labels = [ # "一" # "二" # "三" # "四" # "五" # "六" # "七" # "八" # "九" # ]; # disable-click = false; # }; # pulseaudio = { # tooltip = false; # format = "{icon}   {volume}%"; # Spacing achieved using "Thin Space" # #format-muted = ""; # format-muted = "{icon}  --%"; # Spacing achieved using "Thin Space" # format-icons = { # #headphone = ""; # #default = [ "" "" ]; # headphone = ""; # headphone-muted = ""; # default = [ "" "" "" ]; # }; # }; # battery = { # format = "{icon} {capacity}%"; # Spacing achieved using "Thin Space" # format-charging = " {capacity}%"; # Spacing achieved using "Thin Space" # #format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; # format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ]; # interval = 1; # }; # clock = { # #format = "󰅐 {:%H:%M}"; # #format = "   {:%H:%M}"; # Spacing achieved using "Thin Space" # format = "{:%H:%M}"; # }; # mpris = { # format = "{dynamic}"; # tooltip-format = ""; # interval = 1; # }; # }; # }; # style = '' # window#waybar { # color: #${colors.base05}; # background-color: #${colors.base00}; # border-style: none none solid none; # border-width: ${toString borderSize}px; # border-color: #${colors.base01}; # font-size: 12px; # font-family: "${fonts.monospace.name}"; # } # .modules-right { # margin: 0 8px 0 0; # } # #tags button { # color: #${colors.base03}; # padding: 0 5px 1px 5px; # border-radius: 0; # font-size: 16px; # font-family: "Unifont"; # } # #tags button.occupied { # color: #${colors.base05}; # } # #tags button.focused { # color: #${colors.base09}; # } # #tags.button.bell { # color: #${colors.base0A}; # } # ''; # }; # home.stateVersion = "24.05"; }