{ config, lib, pkgs, self, ... }: let cfg = config.profiles.development; in { imports = [ ../../modules/programs/zshell ]; options.profiles.development = { enable = lib.mkEnableOption "A profile that enables the system to be used for developing programs"; }; config = lib.mkIf cfg.enable { programs.git = { enable = true; package = pkgs.gitFull; userName = "sefidel"; userEmail = "contact@sefidel.net"; signing = { key = "8BDFDFB56842239382A0441B9238BC709E05516A"; signByDefault = true; }; aliases = { graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold yellow)%h%C(reset) - %C(green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(normal)%s%C(reset) %C(blue)- %an%C(reset)' --all"; co = "checkout"; br = "branch"; st = "status"; ps = "push"; pl = "pull"; root = "rev-parse --show-toplevel"; }; extraConfig = { init.defaultBranch = "main"; pull.rebase = true; merge.conflictStyle = "diff3"; mergetool.fugitive = { cmd = ''nvim -f -c "Gvdiffsplit!" "$MERGED"''; trustExitCode = true; }; merge.tool = "fugitive"; mergetool.prompt = false; format.signOff = true; sendemail = { smtpserver = "smtp.migadu.com"; smtpuser = "contact@sefidel.com"; smtpencryption = "ssl"; smtpserverport = "465"; }; }; ignores = [ # IntelliJ files and folders ".idea/" "*.iml" # backupfiles and shadow copies done by editors "*~" "\\#*\\#" ".#*" # Elixir language server "/.elixir_ls" # MyPy Cache ".mypy_cache" # Visual Studio Code project configuration "/.vscode" # Result folder for nix builds "result" "result-*" # direnv caches ".direnv/" # emacs/python stuff "flycheck_*.py" ]; }; # GPG Authentication subkey is used for provisioning the server, # thus we need to use fallback key to identify with gitolite. programs.ssh.enable = true; # this has no relation with the sshd daemon. programs.ssh.forwardAgent = true; programs.ssh.extraConfig = '' Host git.exotic.sh User git Port 22 IdentityFile ~/.ssh/sefidel.pub IdentitiesOnly true Host git-admin.vhosts.exotic.sh HostName git.exotic.sh User git Port 22 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly true Host work.vhosts.exotic.sh HostName cobalt.exotic.sh User sefidel Port 22 IdentityFile ~/.ssh/sefidel.pub IdentitiesOnly true ''; programs.helix = { enable = true; settings = { theme = "rasmus-ext"; editor = { statusline = { left = [ "mode" "spinner" "file-name" "position" "separator" "spacer" "diagnostics" "file-modification-indicator" ]; center = [ "version-control" ]; right = [ "selections" "file-encoding" "file-line-ending" "file-type" ]; mode.normal = "NORMAL"; mode.insert = "INSERT"; mode.select = "SELECT"; }; cursor-shape = { insert = "bar"; normal = "block"; select = "underline"; }; # lsp = { # display-inlay-hints = true; # }; line-number = "relative"; color-modes = true; bufferline = "multiple"; }; keys.normal = { space = { q = ":buffer-previous"; e = ":buffer-next"; u = ":buffer-close"; o = ":new"; ";" = "command_mode"; "/" = "toggle_comments"; }; A-r = [ "extend_to_line_bounds" "delete_selection" "paste_after" ]; A-e = [ "extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before" ]; }; }; themes = { rasmus-ext = { inherits = "rasmus"; # Transparent background # "ui.background" = {}; # Bar cursor "ui.virtual" = { fg = "white"; }; # lightened ui.cursor.{normal,insert,select} "ui.cursor.primary.normal" = { bg = "gray045"; }; "ui.cursor.primary.insert" = { bg = "white"; }; "ui.cursor.primary.select" = { bg = "gray035"; }; # TODO: Use proper search group after # https://github.com/helix-editor/helix/pull/5702 # "ui.selection" = { /* fg = "accent01"; */ bg = "accent02"; }; # "ui.selection.primary" = { /* fg = "accent01"; */ bg = "accent02"; }; palette = { gray035 = "#4b4b49"; gray045 = "#525250"; accent01 = "#f0a0c0"; accent02 = "#302028"; }; }; }; }; services.emacs = lib.mkIf pkgs.stdenv.isLinux { enable = true; client.enable = true; socketActivation.enable = true; }; programs.emacs = { enable = true; package = pkgs.emacs29-pgtk; }; home.activation.installFootEmacsTerminfo = '' ${pkgs.ncurses}/bin/tic -x -o $HOME/.terminfo ${ pkgs.fetchurl { url = "https://gist.githubusercontent.com/sefidel/5f7f46783ad527ada98caa13e32efd42/raw/509375cc7bff269bb3b906fd417ed3d51b4a1cc5/foot-emacs.src"; sha256 = "sha256-aR/C40NWbrwYRIAvaRL/6gUAcP7xokChOVJIbyDXAwI="; } } ''; home.packages = [ # Launchable graphical emacsclient in bemenu (pkgs.writeShellScriptBin "ec" "emacsclient -cna emacs $@") # Emacsclient with 24bit colours fix for foot (pkgs.writeShellScriptBin "e" '' if [[ "$TERM" == "foot" ]]; then eprefix="TERM=foot-emacs" elif [[ "$TERM" == "foot-direct" ]]; then eprefix="TERM=foot-direct-emacs" fi eval "$eprefix emacsclient -ta emacs $@" '') pkgs.bfg-repo-cleaner pkgs.diffoscopeMinimal pkgs.colmena pkgs.du-dust pkgs.deploy-rs # pkgs.dnsutils # Err on darwin # TODO: https://github.com/cli/cli/issues/4955 pkgs.gh pkgs.git-annex pkgs.hyperfine pkgs.jq pkgs.lsof pkgs.ouch pkgs.tcpdump pkgs.tokei pkgs.mtr pkgs.nil pkgs.nixpkgs-fmt pkgs.nixpkgs-review pkgs.nmap pkgs.ripgrep pkgs.rust-analyzer pkgs.sd pkgs.tig pkgs.xh pkgs.cargo-play pkgs.cargo-edit pkgs.cargo-sort pkgs.cargo-diet pkgs.cargo-deny pkgs.lldb pkgs.ghc pkgs.ghidra pkgs.stack (pkgs.haskell-language-server.override { supportedGhcVersions = [ (builtins.replaceStrings [ "." ] [ "" ] pkgs.ghc.version) ]; }) pkgs.sbcl # pkgs.lispPackages.quicklisp # pkgs.lispPackages.clwrapper (pkgs.python3.withPackages (ps: with ps; [ pynvim ])) pkgs.gopls ] ++ pkgs.lib.optionals (pkgs.stdenv.isLinux) [ # TODO: currently broken/doesn't support Darwin pkgs.valgrind pkgs.clang-tools pkgs.gdb ]; }; }