Compare commits
9
Commits
delete-crumb
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
383182c24e | ||
|
|
ff20b976ad | ||
|
|
67cb7f35e6 | ||
|
|
6527b0a274 | ||
|
|
f8936662c2 | ||
|
|
cb3119a897 | ||
|
|
f6c4b58d9e | ||
|
|
cffe715e30 | ||
|
|
28cc8474cd |
@@ -171,6 +171,14 @@ in {
|
|||||||
client.enable = true;
|
client.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Start Emacs after the graphical session so as to inherit
|
||||||
|
# expected envvars, but don't necessarily /depend/ on a
|
||||||
|
# graphical session.
|
||||||
|
systemd.user.services.emacs = {
|
||||||
|
Unit.After = [ "graphical-session.target" ];
|
||||||
|
Install.WantedBy = lib.mkForce [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
# We do this ourselves.
|
# We do this ourselves.
|
||||||
stylix.targets.emacs.enable = false;
|
stylix.targets.emacs.enable = false;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -12,8 +12,20 @@ in {
|
|||||||
builtins.readFile ./haskell/ghc-with-packages.sh;
|
builtins.readFile ./haskell/ghc-with-packages.sh;
|
||||||
|
|
||||||
home.file.".ghc/ghci.conf".text = ''
|
home.file.".ghc/ghci.conf".text = ''
|
||||||
:set prompt "\x1b[38;5;5mλ>\x1b[0m "
|
:{
|
||||||
:set prompt-cont "\x1b[38;5;5m|>\x1b[0m "
|
ghci_set_prompt :: IO String
|
||||||
|
ghci_set_prompt = do
|
||||||
|
term <- System.Environment.Blank.getEnvDefault "TERM" ""
|
||||||
|
let (prompt,promptCont) =
|
||||||
|
if Data.List.isPrefixOf "xterm-" term
|
||||||
|
then ("\x1b[38;5;5mλ>\x1b[0m ", "\x1b[38;5;5m|>\x1b[0m ")
|
||||||
|
else ("λ> ", "|> ")
|
||||||
|
pure . unlines $
|
||||||
|
[ ":set prompt " ++ show prompt
|
||||||
|
, ":set prompt-cont " ++ show promptCont
|
||||||
|
]
|
||||||
|
:}
|
||||||
|
:cmd ghci_set_prompt
|
||||||
:set -interactive-print=Text.Pretty.Simple.pPrint
|
:set -interactive-print=Text.Pretty.Simple.pPrint
|
||||||
:m + Text.Show.Functions
|
:m + Text.Show.Functions
|
||||||
:unset +r
|
:unset +r
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
;;; init.el -*- lexical-binding: t -*-
|
;;; init.el -*- lexical-binding: t -*-
|
||||||
|
|
||||||
|
(require 'syd/transient)
|
||||||
|
|
||||||
(syd-require-features
|
(syd-require-features
|
||||||
'(syd/base
|
'(syd/base
|
||||||
syd/constants
|
syd/constants
|
||||||
@@ -33,7 +35,6 @@
|
|||||||
syd/which-key
|
syd/which-key
|
||||||
syd/tramp
|
syd/tramp
|
||||||
syd/handle
|
syd/handle
|
||||||
syd/flycheck
|
|
||||||
syd/org
|
syd/org
|
||||||
syd/org/roam
|
syd/org/roam
|
||||||
syd/org/agenda
|
syd/org/agenda
|
||||||
|
|||||||
@@ -5,11 +5,18 @@
|
|||||||
|
|
||||||
(defun syd-agda-locate-and-load ()
|
(defun syd-agda-locate-and-load ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((agda-mode-path (executable-find "agda-mode")))
|
(if-let* ((agda-mode-path (executable-find "agda-mode"))
|
||||||
(load-file
|
(agda-path (executable-find "agda")))
|
||||||
|
(progn (load-file
|
||||||
(shell-command-to-string
|
(shell-command-to-string
|
||||||
(format "%s locate" agda-mode-path))))
|
(format "%s locate" agda-mode-path)))
|
||||||
(setq agda2-program-name (executable-find "agda")))
|
(setq agda2-program-name agda-path))
|
||||||
|
(when-let* ((mikan-path (executable-find "mikan")))
|
||||||
|
(setq agda2-program-name mikan-path)
|
||||||
|
(load-file
|
||||||
|
(let ((coding-system-for-read 'utf-8))
|
||||||
|
(shell-command-to-string
|
||||||
|
(format "%s --emacs-mode locate" mikan-path)))))))
|
||||||
|
|
||||||
(defface syd-agda2-default
|
(defface syd-agda2-default
|
||||||
`((t :font ,(font-spec :family "IBM Plex Sans" :size 17)
|
`((t :font ,(font-spec :family "IBM Plex Sans" :size 17)
|
||||||
@@ -93,7 +100,8 @@
|
|||||||
|
|
||||||
(add-to-list
|
(add-to-list
|
||||||
'auto-mode-alist
|
'auto-mode-alist
|
||||||
'("\\.lagda\\.org\\'" . agda2-mode))
|
`(,(rx ".lagda." (or "org" "md"))
|
||||||
|
. agda2-mode))
|
||||||
|
|
||||||
(with-eval-after-load 'smartparens
|
(with-eval-after-load 'smartparens
|
||||||
(sp-local-pair '(agda2-mode) "{!" "!}"))
|
(sp-local-pair '(agda2-mode) "{!" "!}"))
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
:states '(normal insert)
|
:states '(normal insert)
|
||||||
"C-k" #'comint-previous-input
|
"C-k" #'comint-previous-input
|
||||||
"C-j" #'comint-next-input
|
"C-j" #'comint-next-input
|
||||||
"C-s" #'consult-history)
|
"C-s" #'consult-history
|
||||||
|
"<return>" #'comint-send-input)
|
||||||
(general-def
|
(general-def
|
||||||
:keymaps 'comint-mode-map
|
:keymaps 'comint-mode-map
|
||||||
:states 'insert
|
:states 'insert
|
||||||
|
|||||||
@@ -167,7 +167,8 @@ if FILE-NAME has no TRAMP prefix."
|
|||||||
:states '(normal insert)
|
:states '(normal insert)
|
||||||
"C-j" #'eshell-next-matching-input-from-input
|
"C-j" #'eshell-next-matching-input-from-input
|
||||||
"C-k" #'eshell-previous-matching-input-from-input
|
"C-k" #'eshell-previous-matching-input-from-input
|
||||||
"C-s" #'consult-history)
|
"C-s" #'consult-history
|
||||||
|
"<return>" #'eshell-send-input)
|
||||||
:config
|
:config
|
||||||
;; When cd'd into a TRAMP remote, automatically expand '/' to the TRAMP
|
;; When cd'd into a TRAMP remote, automatically expand '/' to the TRAMP
|
||||||
;; notation referring to the remote's root.
|
;; notation referring to the remote's root.
|
||||||
|
|||||||
@@ -5,10 +5,17 @@
|
|||||||
|
|
||||||
;; Nicer error messages, integrates with `lsp-mode'
|
;; Nicer error messages, integrates with `lsp-mode'
|
||||||
(use-package flycheck
|
(use-package flycheck
|
||||||
:custom ((flycheck-highlighting-mode nil))
|
:custom (; disable annoying underlines.
|
||||||
|
(flycheck-highlighting-mode nil)
|
||||||
|
; don't display error at point without input.
|
||||||
|
(flycheck-auto-display-errors-after-checking nil))
|
||||||
:general
|
:general
|
||||||
(:states '(motion normal)
|
(:states '(motion normal)
|
||||||
"[ e" #'flycheck-previous-error
|
"[ e" #'flycheck-previous-error
|
||||||
"] e" #'flycheck-next-error))
|
"] e" #'flycheck-next-error)
|
||||||
|
:config
|
||||||
|
(syd-defadvice syd-suppress-flycheck-popups-a (&rest _)
|
||||||
|
:override #'flycheck-display-error-at-point-soon
|
||||||
|
nil))
|
||||||
|
|
||||||
(provide 'syd/flycheck)
|
(provide 'syd/flycheck)
|
||||||
|
|||||||
@@ -9,6 +9,18 @@
|
|||||||
(require 'inf-haskell)
|
(require 'inf-haskell)
|
||||||
(run-haskell))
|
(run-haskell))
|
||||||
|
|
||||||
|
(defun syd-haskell-ts-open-repl ()
|
||||||
|
"Open a Haskell REPL."
|
||||||
|
(interactive)
|
||||||
|
(haskell-ts-run)
|
||||||
|
(pop-to-buffer haskell-ts-ghci-buffer-name))
|
||||||
|
|
||||||
|
(defun syd-haskell-ts-eval-region (beg end)
|
||||||
|
(haskell-ts--send-region beg end))
|
||||||
|
|
||||||
|
(defun syd-haskell-ts-load-buffer ()
|
||||||
|
(haskell-ts-load-file))
|
||||||
|
|
||||||
(defun syd-haskell-evil-open-above ()
|
(defun syd-haskell-evil-open-above ()
|
||||||
"Opens a line above the current, following Haskell-mode's indentation"
|
"Opens a line above the current, following Haskell-mode's indentation"
|
||||||
(interactive)
|
(interactive)
|
||||||
@@ -62,13 +74,58 @@
|
|||||||
(add-to-list 'haskell-font-lock-quasi-quote-modes '("wats" . wat-mode))
|
(add-to-list 'haskell-font-lock-quasi-quote-modes '("wats" . wat-mode))
|
||||||
(add-to-list 'haskell-font-lock-quasi-quote-modes '("expr" . wat-mode)))
|
(add-to-list 'haskell-font-lock-quasi-quote-modes '("expr" . wat-mode)))
|
||||||
|
|
||||||
|
(use-package consult-hoogle
|
||||||
|
:config
|
||||||
|
(syd-push shackle-rules
|
||||||
|
`("*hoogle-search*"
|
||||||
|
:select t :size 0.5 :popup t :align bottom)))
|
||||||
|
|
||||||
|
(use-package haskell-ts-mode
|
||||||
|
:straight (:type git
|
||||||
|
:host github
|
||||||
|
:repo "dschrempf/haskell-ts-mode")
|
||||||
|
:custom ((haskell-ts-font-lock-level 4)
|
||||||
|
(haskell-ts-ghci "ghci")
|
||||||
|
(haskell-ts-inferior-prompt-regexp
|
||||||
|
(rx bol (or "λ> " "|> ")))
|
||||||
|
(haskell-ts-inferior-history-file
|
||||||
|
(file-name-concat syd-data-dir "haskell-ts-inferior-history")))
|
||||||
|
:general
|
||||||
|
(:keymaps 'haskell-ts-mode-map
|
||||||
|
:states '(normal motion)
|
||||||
|
:major-modes t
|
||||||
|
:prefix syd-localleader-key
|
||||||
|
:non-normal-prefix syd-alt-localleader-key
|
||||||
|
"h s" #'syd-haskell-hoogle-start-server
|
||||||
|
"h q" #'haskell-hoogle-kill-server
|
||||||
|
"c" #'haskell-cabal-visit-file)
|
||||||
|
:config
|
||||||
|
(add-to-list 'completion-ignored-extensions ".hi")
|
||||||
|
(syd-add-hook 'haskell-ts-mode-hook
|
||||||
|
(defun syd-haskell-configure-indent-h ()
|
||||||
|
(setq-local tab-width 2)
|
||||||
|
;; (setq-local indent-line-function #'tab-to-tab-stop)
|
||||||
|
(indent-tabs-mode -1))
|
||||||
|
(defun syd-haskell-configure-evil-h ()
|
||||||
|
(setq-local evil-symbol-word-search nil)))
|
||||||
|
(syd-handle '(haskell-ts-mode)
|
||||||
|
:repl #'syd-haskell-ts-open-repl
|
||||||
|
:eval-region #'syd-haskell-ts-eval-region
|
||||||
|
:load-buffer #'syd-haskell-ts-load-buffer)
|
||||||
|
(syd-defadvice syd-haskell-hide-repl-h (old &rest rs)
|
||||||
|
:around #'haskell-ts-show-repl
|
||||||
|
(save-window-excursion
|
||||||
|
(apply old rs))))
|
||||||
|
|
||||||
(use-package lsp-haskell
|
(use-package lsp-haskell
|
||||||
:defer t
|
:defer t
|
||||||
:custom ((lsp-haskell-server-path "haskell-language-server"))
|
:custom ((lsp-haskell-server-path "haskell-language-server"))
|
||||||
:init
|
:init
|
||||||
(add-hook 'haskell-mode-hook #'lsp-deferred 'append)
|
(add-hook 'haskell-mode-hook #'lsp-deferred 'append)
|
||||||
(add-hook 'haskell-literate-mode-hook #'lsp-deferred 'append)
|
(add-hook 'haskell-literate-mode-hook #'lsp-deferred 'append)
|
||||||
(syd-add-hook '(haskell-mode-hook haskell-literate-mode-hook)
|
(add-hook 'haskell-ts-mode-hook #'lsp-deferred 'append)
|
||||||
|
(syd-add-hook '(haskell-ts-mode-hook
|
||||||
|
haskell-mode-hook haskell-literate-mode-hook)
|
||||||
(defun syd-haskell-configure-lsp-h ()
|
(defun syd-haskell-configure-lsp-h ()
|
||||||
;; it often highlights list literals and quasiquotes which
|
;; it often highlights list literals and quasiquotes which
|
||||||
;; gets reaaaally annoying.
|
;; gets reaaaally annoying.
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
(require 'syd/base)
|
(require 'syd/base)
|
||||||
(require 'syd/popups)
|
(require 'syd/popups)
|
||||||
(require 'syd/handle)
|
(require 'syd/handle)
|
||||||
|
(require 'syd/flycheck)
|
||||||
|
|
||||||
(use-package lsp-mode
|
(use-package lsp-mode
|
||||||
:init
|
:init
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
;;; -*- lexical-binding: t -*-
|
;;; -*- lexical-binding: t -*-
|
||||||
(require 'syd/base)
|
(require 'syd/base)
|
||||||
|
|
||||||
;; Disable tabs by default.
|
;; Tabs, not spaces.
|
||||||
(setq-default indent-tabs-mode nil)
|
(setq-default indent-tabs-mode nil)
|
||||||
|
(setq-default tab-width 2)
|
||||||
|
|
||||||
|
(use-package kakapo-mode
|
||||||
|
:hook ((prog-mode . kakapo-mode)))
|
||||||
|
|
||||||
(provide 'syd/tabs)
|
(provide 'syd/tabs)
|
||||||
|
|||||||
@@ -6,9 +6,34 @@ in {
|
|||||||
enable = lib.mkEnableOption "Treesitter grammars";
|
enable = lib.mkEnableOption "Treesitter grammars";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable
|
||||||
sydnix.emacs.emacsPackages = epkgs: [
|
# https://github.com/dschrempf/haskell-ts-mode/blob/1c236f00dc214e546124a5dac90902ba62500c15/flake.nix#L40-L55
|
||||||
epkgs.treesit-grammars.with-all-grammars
|
(let
|
||||||
];
|
grammars = pkgs.tree-sitter-grammars.overrideScope (ts-final: ts-prev: {
|
||||||
|
tree-sitter-haskell = ts-prev.tree-sitter-haskell.overrideAttrs (prev:
|
||||||
|
let rev = "1ad6077a1fb776c255836e00aeb6da57ba564b6a";
|
||||||
|
in {
|
||||||
|
version = "unstable-2026-07-07-${builtins.substring 0 7 rev}";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "dschrempf";
|
||||||
|
repo = "tree-sitter-haskell";
|
||||||
|
inherit rev;
|
||||||
|
hash = "sha256-kC6HwImFRx5HUY7NDLAA0I/DaSstQ94dWxA9+lMx2gI=";
|
||||||
};
|
};
|
||||||
|
nativeBuildInputs = (prev.nativeBuildInputs or [ ]) ++ [
|
||||||
|
pkgs.nodejs
|
||||||
|
pkgs.tree-sitter
|
||||||
|
];
|
||||||
|
preBuild = ''
|
||||||
|
tree-sitter generate
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
in {
|
||||||
|
sydnix.emacs.emacsPackages = epkgs: [
|
||||||
|
(epkgs.treesit-grammars.with-grammars (_ps:
|
||||||
|
grammars.allGrammars
|
||||||
|
))
|
||||||
|
];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ in {
|
|||||||
# Mount our NAS's 'media' share.
|
# Mount our NAS's 'media' share.
|
||||||
fileSystems."/media" = {
|
fileSystems."/media" = {
|
||||||
# DNS is seemingly unavailable to the mount service.
|
# DNS is seemingly unavailable to the mount service.
|
||||||
device = "//10.0.0.203/media";
|
device = "//192.168.68.62/media";
|
||||||
mountPoint = "/media";
|
mountPoint = "/media";
|
||||||
fsType = "cifs";
|
fsType = "cifs";
|
||||||
options = [
|
options = [
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
config = {
|
config = {
|
||||||
networking.hosts = {
|
networking.hosts = {
|
||||||
"100.95.131.43" = [ "whitepc" ];
|
"100.95.131.43" = [ "whitepc" ];
|
||||||
"10.0.0.109" = [ "guix-rebound" "sydpc" ];
|
"192.168.68.66" = [ "guix-rebound" "sydpc" ];
|
||||||
"10.0.0.248" = [ "deertopia" ];
|
"192.168.68.79" = [ "deertopia" ];
|
||||||
"10.0.0.218" = [ "fruitbook" ];
|
"192.168.68.55" = [ "fruitbook" ];
|
||||||
"10.0.0.203" = [ "buffalo-nas" ];
|
"192.168.68.62" = [ "buffalo-nas" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user