{ conf, more-packages ? [] }: { config, pkgs, ... }: let wm = conf.wm; in { /* The home.stateVersion option does not have a default and must be set */ home.stateVersion = "22.05"; home.packages = with pkgs; [ firefox # ugh chromium # bsdgames # CRITICAL THREE fortune cowsay ponysay # lutris # mono5 nethack angband brogue # cataclysm-dda keeperrl # adom openrct2 # not yet # celeste64 tetrio-desktop # foliate # thunderbird prismlauncher starship eza dmenu watchexec wl-clipboard xsel manix shellcheck jq file fd zip semgrep pandoc rlwrap # i like having easy access to a lot of repls deno ghc ghcid cabal-install sbcl chez guile gambit racket clojure ruby_3_3 julia lua gcc zls cargo clippy rustc rustfmt idris2 # might as well use it consistently # (builtins.foldl' (a: b: "${a} ${b}") "" (builtins.attrNames leanpkgs)) haskell-language-server typst discord steam steam-run gamemode rare minigalaxy slipstream obs-studio # drm more like pooprm # might as well use a newer version #(itch.override {electron_11 = electron_22;}) fzf kolourpaint # yeah audacious audacity ffmpeg libjxl exiftool godot_4 blender akku ripgrep tldr htop pv helix numbat hyperfine lm_sensors libnotify hunspell aspell libsForQt5.krunner-symbols libsForQt5.khotkeys libsForQt5.kio mpv yt-dlp qbittorrent lmms helm obsidian (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) lmmath julia-mono # glow and gum are a good example of something that should really be in a flake.nix or whatever ] ++ more-packages; programs.fish = { enable = true; shellInit = import ./fish.conf.nix; }; programs.vscode = { enable = true; enableUpdateCheck = false; # i prefer to let vscode manage stuff mutableExtensionsDir = true; userSettings = (import ./vscode-settings.nix) { rust-analyzer = pkgs.rust-analyzer; }; }; programs.neovim = { enable = true; coc.enable = true; coc.settings = '' { "rust-analyzer.checkOnSave.command": "clippy", "rust-analyzer.checkOnSave.extraArgs": ["-- -W clippy::pedantic"], "languageserver": { "ccls": { "command": "ccls", "filetypes": ["c", "cpp", "objc", "objcpp"], "rootPatterns": [".ccls", "compile_commands.json", ".vim/", ".git/", ".hg/"], "initializationOptions": { "cache": { "directory": "/tmp/ccls" } } } }, "inlayHint.enable": true, "zig.zls.path": "/home/mbk/.config/coc/extensions/coc-zls-data/zls_install/zls" } ''; defaultEditor = true; # should probably extract this out but meh plugins = with pkgs.vimPlugins; [ vim-airline vim-airline-themes ale vim-fugitive vim-bufkill vim-suda # navigation nerdtree nerdtree-git-plugin plenary-nvim telescope-nvim telescope-manix vim-rooter fzfWrapper # Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } # Plug 'junegunn/fzf.vim' # Plug 'jlanzarotta/bufexplorer' vim-commentary #Plug 'mrtazz/DoxygenToolkit.vim' vim-surround vim-sexp vim-operator-user #Plug 'rhysd/vim-clang-format' #vim-scripts/a.vim vim-highlightedyank # Plug 'autozimu/LanguageClient-neovim', { 'branch': 'next', 'do': 'bash install.sh' } ncm2 nvim-yarp # Completion plugins #Plug 'ncm2/ncm2-bufword' ncm2-path # CoC # Plug 'neoclide/coc.nvim', {'branch': 'release'} coc-sh coc-json haskell-vim # Syntactic language support rust-vim vim-toml elixir-tools-nvim #vim-rubocop zig-vim vim-elixir gruvbox ]; extraConfig = import ./nvim.conf.nix; }; programs.kitty = { enable = true; extraConfig = import ./kitty.conf.nix; }; programs.git = { enable = true; userName = "mehbark"; userEmail = "terezi@pyrope.net"; extraConfig = { safe = { directory = "*"; }; core.autocrlf = false; }; }; programs.git.difftastic = { enable = true; background = "dark"; }; xsession.windowManager.xmonad = if wm == "xmonad" then { enable = true; config = pkgs.writeText "xmonad.hs" '' import XMonad import XMonad.Config.Kde main = xmonad kde4Config { terminal = "kitty" , modMask = mod4Mask , borderWidth = 1 } ''; } else {}; wayland.windowManager.hyprland = if wm == "hyprland" then { enable = true; enableNvidiaPatches = true; extraConfig = '' $mod = SUPER bind = $mod, F, exec, firefox bind = , Print, exec, grimblast copy area # workspaces # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} ${builtins.concatStringsSep "\n" (builtins.genList ( x: let ws = let c = (x + 1) / 10; in builtins.toString (x + 1 - (c * 10)); in '' bind = $mod, ${ws}, workspace, ${toString (x + 1)} bind = $mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)} '' ) 10)} # ... ''; } else {}; wayland.windowManager.sway = if wm == "sway" then { enable = true; config = rec { modifier = "Mod4"; terminal = "kitty"; startup = [ ]; }; } else {}; services.polybar = if wm == "i3" then { enable = true; script = "polybar bar &"; settings = import ./polybar.conf.nix; } else {}; xsession.windowManager.i3 = if wm == "i3" then { enable = true; extraConfig = import ./i3.conf.nix; } else {}; programs.readline = { enable = true; }; # services.emacs.client.enable = true; # not working right now programs.emacs = { enable = true; package = pkgs.emacs29-pgtk; extraPackages = epkgs: with epkgs; [ lsp-mode markdown-mode yaml-mode json-mode elixir-mode clojure-mode haskell-mode zig-mode which-key all-the-icons-ivy bind-key counsel gruvbox-theme avy consult embark embark-consult vertico #vertico-directory marginalia corfu #corfu-popupinfo corfu-terminal kind-icon #eshell orderless magit eglot org org-roam paredit rainbow-delimiters geiser-chez geiser-guile geiser-gambit macrostep-geiser evil evil-leader evil-goggles evil-surround evil-commentary evil-org erc-hl-nicks gcmh sly general lispyville cider direnv esup ]; # apparently errors in the config matter? nvm? extraConfig = (import ./init.el.nix) pkgs; }; programs.direnv.enable = true; programs.direnv.nix-direnv.enable = true; # services.syncthing = { # enable = true; # tray.enable = true; # }; }