Compare commits
15 commits
197af4cb55
...
79c98d1e5d
Author | SHA1 | Date | |
---|---|---|---|
79c98d1e5d | |||
36ad3ced81 | |||
fffef90905 | |||
1ed4ed0da5 | |||
f55a6b6423 | |||
a7c19c03df | |||
cdfa60ad5e | |||
39b276d691 | |||
cc3a0012b5 | |||
995af14515 | |||
58cfa8ee1f | |||
8fcc7106c3 | |||
f2da144a92 | |||
40b8028383 | |||
bf464f6e34 |
11 changed files with 349 additions and 116 deletions
|
@ -566,7 +566,10 @@
|
||||||
:mode "\\.hs\\'"
|
:mode "\\.hs\\'"
|
||||||
:config
|
:config
|
||||||
(add-to-list 'eglot-server-programs
|
(add-to-list 'eglot-server-programs
|
||||||
'(haskell-ts-mode . ("haskell-language-server-wrapper" "--lsp"))))
|
'(haskell-ts-mode . ("haskell-language-server" "--lsp"))))
|
||||||
|
|
||||||
|
(use-package tidal
|
||||||
|
:custom ((tidal-interpreter "tidal")))
|
||||||
|
|
||||||
(use-package purescript-mode
|
(use-package purescript-mode
|
||||||
:custom ((project-vc-extra-root-markers '("spago.dhall")))
|
:custom ((project-vc-extra-root-markers '("spago.dhall")))
|
||||||
|
@ -596,6 +599,15 @@
|
||||||
(use-package gptscript-mode
|
(use-package gptscript-mode
|
||||||
:mode "\\.gpt\\'")
|
:mode "\\.gpt\\'")
|
||||||
|
|
||||||
|
(use-package gptscript-mode
|
||||||
|
:mode "\\.gpt\\'")
|
||||||
|
|
||||||
|
(use-package typst-ts-mode
|
||||||
|
:config
|
||||||
|
(add-to-list 'eglot-server-programs
|
||||||
|
'(typst-ts-mode . ("tinymist" "lsp")))
|
||||||
|
:mode "\\.typ\\'")
|
||||||
|
|
||||||
;; FIXME
|
;; FIXME
|
||||||
;; (use-package mmm-mode
|
;; (use-package mmm-mode
|
||||||
;; :config
|
;; :config
|
||||||
|
@ -1027,7 +1039,7 @@ This is meant to be an helper to be called from the window manager."
|
||||||
)
|
)
|
||||||
(gptel-default-mode 'org-mode)
|
(gptel-default-mode 'org-mode)
|
||||||
(gptel-org-branching-context nil) ;; this is cool but I don't feel comfortable with it
|
(gptel-org-branching-context nil) ;; this is cool but I don't feel comfortable with it
|
||||||
(gptel-use-tools nil)
|
(gptel-use-tools 't)
|
||||||
|
|
||||||
:bind
|
:bind
|
||||||
("C-c a a" . gptel-add)
|
("C-c a a" . gptel-add)
|
||||||
|
@ -1042,56 +1054,139 @@ This is meant to be an helper to be called from the window manager."
|
||||||
;; (add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
;; (add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
||||||
;; (add-hook 'gptel-post-stream-hook 'gptel-auto-scroll)
|
;; (add-hook 'gptel-post-stream-hook 'gptel-auto-scroll)
|
||||||
|
|
||||||
(setq gptel-tools (mapcar (lambda (tool) (apply #'gptel-make-tool tool))
|
(defun ccr/edit-buffer (buffer-name old-string new-string)
|
||||||
'((
|
"In BUFFER-NAME, replace OLD-STRING with NEW-STRING."
|
||||||
:name "create_file"
|
(with-current-buffer buffer-name
|
||||||
:function (lambda (path filename content)
|
(let ((case-fold-search nil)) ;; Case-sensitive search
|
||||||
(let ((full-path (expand-file-name filename path)))
|
(save-excursion
|
||||||
(with-temp-buffer
|
(goto-char (point-min))
|
||||||
|
(let ((count 0))
|
||||||
|
(while (search-forward old-string nil t)
|
||||||
|
(setq count (1+ count)))
|
||||||
|
(if (= count 0)
|
||||||
|
(format "Error: Could not find text to replace in buffer %s" buffer-name)
|
||||||
|
(if (> count 1)
|
||||||
|
(format "Error: Found %d matches for the text to replace in buffer %s" count buffer-name)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(search-forward old-string)
|
||||||
|
(replace-match new-string t t)
|
||||||
|
(format "Successfully edited buffer %s" buffer-name))))))))
|
||||||
|
|
||||||
|
(defun ccr/replace-buffer (buffer-name content)
|
||||||
|
"Completely replace contents of BUFFER-NAME with CONTENT."
|
||||||
|
(with-current-buffer buffer-name
|
||||||
|
(erase-buffer)
|
||||||
(insert content)
|
(insert content)
|
||||||
(write-file full-path))
|
(format "Buffer replaced: %s" buffer-name)))
|
||||||
(format-read "Created file %s in %s" filename path)))
|
|
||||||
:description "Create a new file with the specified content"
|
(setq gptel-tools `(
|
||||||
:args (list '(:name "path"
|
,(gptel-make-tool
|
||||||
|
:function (lambda (url)
|
||||||
|
(with-current-buffer (url-retrieve-synchronously url)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(forward-paragraph)
|
||||||
|
(let ((dom (libxml-parse-html-region (point) (point-max))))
|
||||||
|
(run-at-time 0 nil #'kill-buffer (current-buffer))
|
||||||
|
(with-temp-buffer
|
||||||
|
(shr-insert-document dom)
|
||||||
|
(buffer-substring-no-properties (point-min) (point-max))))))
|
||||||
|
:name "read_url"
|
||||||
|
:description "Fetch and read the contents of a URL"
|
||||||
|
:args (list '(:name "url"
|
||||||
:type string
|
:type string
|
||||||
:description "The directory where to create the file")
|
:description "The URL to read"))
|
||||||
'(:name "filename"
|
:category "web")
|
||||||
|
,(gptel-make-tool
|
||||||
|
:function (lambda (filepath)
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents (expand-file-name filepath))
|
||||||
|
(buffer-string)))
|
||||||
|
:name "read_file"
|
||||||
|
:description "Read and display the contents of a file"
|
||||||
|
:args (list '(:name "filepath"
|
||||||
:type string
|
:type string
|
||||||
:description "The name of the file to create")
|
:description "Path to the file to read. Supports relative paths and ~."))
|
||||||
'(:name "content"
|
:category "filesystem")
|
||||||
|
,(gptel-make-tool
|
||||||
|
:function (lambda (directory)
|
||||||
|
(mapconcat #'identity
|
||||||
|
(directory-files directory)
|
||||||
|
"\n"))
|
||||||
|
:name "list_directory"
|
||||||
|
:description "List the contents of a given directory"
|
||||||
|
:args (list '(:name "directory"
|
||||||
:type string
|
:type string
|
||||||
:description "The content to write to the file"))
|
:description "The path to the directory to list"))
|
||||||
:category "filesystem"
|
:category "filesystem")
|
||||||
)
|
,(gptel-make-tool
|
||||||
;; (
|
:function (lambda () (mapcar 'buffer-name (buffer-list)))
|
||||||
;; :name "run_command"
|
:name "list_buffers"
|
||||||
;; :confirm 't
|
:description "Return a list containing all the Emacs buffers"
|
||||||
;; :function (lambda (command)
|
:category "emacs")
|
||||||
;; (shell-command-to-string command))
|
,(gptel-make-tool
|
||||||
;; :description "Run arbitrary commands"
|
:function (lambda (buffer)
|
||||||
;; :args (list '(:name "command"
|
(unless (buffer-live-p (get-buffer buffer))
|
||||||
;; :type string
|
(error "Error: buffer %s is not live." buffer))
|
||||||
;; :description "The content to run e.g. 'ls *' or 'fd <pattern> <path>'"))
|
(with-current-buffer buffer
|
||||||
;; )
|
(buffer-substring-no-properties (point-min) (point-max))))
|
||||||
(
|
:name "read_buffer"
|
||||||
:name "get_weather"
|
:description "Return the contents of an Emacs buffer"
|
||||||
:function (lambda (location)
|
:args (list '(:name "buffer"
|
||||||
(url-retrieve-synchronously "api.weather.com/..."
|
|
||||||
location unit))
|
|
||||||
:description "Get the current weather in a given location"
|
|
||||||
:args (list '(:name "location"
|
|
||||||
:type string
|
:type string
|
||||||
:description "The city and state, e.g. San Francisco, CA")
|
:description "The name of the buffer whose contents are to be retrieved"))
|
||||||
'(:name "unit"
|
:category "emacs")
|
||||||
|
,(gptel-make-tool
|
||||||
|
:function (lambda (buffer text)
|
||||||
|
(with-current-buffer (get-buffer-create buffer)
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-max))
|
||||||
|
(insert text)))
|
||||||
|
(format "Appended text to buffer %s" buffer))
|
||||||
|
:name "append_to_buffer"
|
||||||
|
:description "Append text to an Emacs buffer. If the buffer does not exist, it will be created."
|
||||||
|
:confirm t
|
||||||
|
:args (list '(:name "buffer"
|
||||||
:type string
|
:type string
|
||||||
:enum ["celsius" "farenheit"]
|
:description "The name of the buffer to append text to.")
|
||||||
:description
|
'(:name "text"
|
||||||
"The unit of temperature, either 'celsius' or 'fahrenheit"
|
:type string
|
||||||
:optional t
|
:description "The text to append to the buffer."))
|
||||||
|
:category "emacs")
|
||||||
|
,(gptel-make-tool
|
||||||
|
:name "EditBuffer"
|
||||||
|
:function #'ccr/edit-buffer
|
||||||
|
:description "Edits Emacs buffers"
|
||||||
|
:confirm t
|
||||||
|
:args '((:name "buffer_name"
|
||||||
|
:type string
|
||||||
|
:description "Name of the buffer to modify"
|
||||||
|
:required t)
|
||||||
|
(:name "old_string"
|
||||||
|
:type string
|
||||||
|
:description "Text to replace (must match exactly)"
|
||||||
|
:required t)
|
||||||
|
(:name "new_string"
|
||||||
|
:type string
|
||||||
|
:description "Text to replace old_string with"
|
||||||
|
:required t))
|
||||||
|
:category "edit")
|
||||||
|
,
|
||||||
|
(gptel-make-tool
|
||||||
|
:name "ReplaceBuffer"
|
||||||
|
:function #'ccr/replace-buffer
|
||||||
|
:description "Completely overwrites buffer contents"
|
||||||
|
:confirm t
|
||||||
|
:args '((:name "buffer_name"
|
||||||
|
:type string
|
||||||
|
:description "Name of the buffer to overwrite"
|
||||||
|
:required t)
|
||||||
|
(:name "content"
|
||||||
|
:type string
|
||||||
|
:description "Content to write to the buffer"
|
||||||
|
:required t))
|
||||||
|
:category "edit")
|
||||||
))
|
))
|
||||||
)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun ccr/suggest-eshell-command ()
|
(defun ccr/suggest-eshell-command ()
|
||||||
(interactive)
|
(interactive)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
services.gpg-agent = {
|
services.gpg-agent = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pinentryPackage = pkgs.pinentry-rofi.override {
|
pinentry.package = pkgs.pinentry-rofi.override {
|
||||||
rofi = pkgs.rofi-wayland;
|
rofi = pkgs.rofi-wayland;
|
||||||
};
|
};
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
|
61
hmModules/shell/catppuccin_mocha.omp.json
Normal file
61
hmModules/shell/catppuccin_mocha.omp.json
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
|
||||||
|
"palette": {
|
||||||
|
"os": "#ACB0BE",
|
||||||
|
"closer": "p:os",
|
||||||
|
"pink": "#F5C2E7",
|
||||||
|
"lavender": "#B4BEFE",
|
||||||
|
"blue": "#89B4FA"
|
||||||
|
},
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"alignment": "left",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"foreground": "p:blue",
|
||||||
|
"style": "plain",
|
||||||
|
"template": "{{ .UserName }}@{{ .HostName }} ",
|
||||||
|
"type": "session"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"foreground": "p:pink",
|
||||||
|
"properties": {
|
||||||
|
"folder_icon": "..\ue5fe..",
|
||||||
|
"home_icon": "~",
|
||||||
|
"style": "agnoster_short"
|
||||||
|
},
|
||||||
|
"style": "plain",
|
||||||
|
"template": "{{ .Path }} ",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"foreground": "p:lavender",
|
||||||
|
"properties": {
|
||||||
|
"branch_icon": "\ue725 ",
|
||||||
|
"cherry_pick_icon": "\ue29b ",
|
||||||
|
"commit_icon": "\uf417 ",
|
||||||
|
"fetch_status": false,
|
||||||
|
"fetch_upstream_icon": false,
|
||||||
|
"merge_icon": "\ue727 ",
|
||||||
|
"no_commits_icon": "\uf0c3 ",
|
||||||
|
"rebase_icon": "\ue728 ",
|
||||||
|
"revert_icon": "\uf0e2 ",
|
||||||
|
"tag_icon": "\uf412 "
|
||||||
|
},
|
||||||
|
"template": "{{ .HEAD }} ",
|
||||||
|
"style": "plain",
|
||||||
|
"type": "git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"style": "plain",
|
||||||
|
"foreground": "p:closer",
|
||||||
|
"template": "\uf105",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "prompt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"final_space": true,
|
||||||
|
"version": 3
|
||||||
|
}
|
|
@ -84,7 +84,12 @@
|
||||||
programs.thefuck.enable = true;
|
programs.thefuck.enable = true;
|
||||||
programs.oh-my-posh = {
|
programs.oh-my-posh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
useTheme = "catppuccin_mocha";
|
# same as "captuccin_mocha" but without the OS logo
|
||||||
|
settings = lib.mkForce (
|
||||||
|
builtins.fromJSON (
|
||||||
|
builtins.unsafeDiscardStringContext (builtins.readFile ./catppuccin_mocha.omp.json)
|
||||||
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.zellij.enableBashIntegration = false;
|
programs.zellij.enableBashIntegration = false;
|
||||||
|
|
|
@ -9,18 +9,18 @@ in
|
||||||
{
|
{
|
||||||
home.packages = [ spotify-adblocked ];
|
home.packages = [ spotify-adblocked ];
|
||||||
|
|
||||||
systemd.user.services.spotify-adblocked = {
|
# systemd.user.services.spotify-adblocked = {
|
||||||
Install.WantedBy = [ "graphical-session.target" ];
|
# Install.WantedBy = [ "graphical-session.target" ];
|
||||||
|
|
||||||
Unit = {
|
# Unit = {
|
||||||
Description = "Spotify";
|
# Description = "Spotify";
|
||||||
PartOf = [ "graphical-session.target" ];
|
# PartOf = [ "graphical-session.target" ];
|
||||||
};
|
# };
|
||||||
|
|
||||||
Service = {
|
# Service = {
|
||||||
ExecStart = lib.getExe spotify-adblocked;
|
# ExecStart = lib.getExe spotify-adblocked;
|
||||||
Restart = "on-failure";
|
# Restart = "on-failure";
|
||||||
RestartSec = 3;
|
# RestartSec = 3;
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
"amule"
|
"amule"
|
||||||
"adguard-home"
|
"adguard-home"
|
||||||
"garmin-grafana"
|
"garmin-grafana"
|
||||||
|
# "dump1090"
|
||||||
|
"arbi"
|
||||||
]
|
]
|
||||||
++ [
|
++ [
|
||||||
./disko.nix
|
./disko.nix
|
||||||
|
|
|
@ -1,34 +1,46 @@
|
||||||
{ config, lib, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
rev = "966199fe1dccc9c6c7016bdb1d9582f27797bc02";
|
||||||
|
amule-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
||||||
|
inherit (amule-flake.legacyPackages.${pkgs.system}) amule-daemon amule-web;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
users.users.amule = {
|
disabledModules = [ "services/networking/amuled.nix" ];
|
||||||
isSystemUser = true;
|
documentation.nixos.enable = false;
|
||||||
group = "amule";
|
|
||||||
extraGroups = [ "amule" ];
|
imports = [ "${amule-flake}/nixos/modules/services/networking/amuled.nix" ];
|
||||||
home = config.services.amule.dataDir;
|
|
||||||
};
|
|
||||||
|
|
||||||
users.groups.amule = { };
|
|
||||||
services.amule = {
|
services.amule = {
|
||||||
dataDir = "/mnt/hd/amule";
|
|
||||||
enable = true;
|
enable = true;
|
||||||
user = "amule";
|
package = amule-daemon;
|
||||||
|
amuleWebPackage = amule-web;
|
||||||
|
openPeerPorts = true;
|
||||||
|
openWebServerPort = true;
|
||||||
|
# TODO the service is accessible only from the VPN
|
||||||
|
# however better using agenix
|
||||||
|
ExternalConnectPasswordFile = pkgs.writeText "password" "pippo";
|
||||||
|
WebServerPasswordFile = pkgs.writeText "password" "pippo";
|
||||||
|
settings = {
|
||||||
|
eMule = {
|
||||||
|
IncomingDir = "/mnt/hd/amule";
|
||||||
|
TempDir = "/mnt/hd/amule/Temp";
|
||||||
|
};
|
||||||
|
WebServer = {
|
||||||
|
Enabled = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# sometimes the service crashes with a segfeault without any reason...
|
|
||||||
systemd.services.amuled.serviceConfig.Restart = lib.mkForce "always";
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
config.services.amule.dataDir
|
config.services.amule.dataDir
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.firewall = {
|
services.nginx.virtualHosts."amule.sisko.wg.aciceri.dev" = {
|
||||||
allowedTCPPorts = [ 4662 ];
|
forceSSL = true;
|
||||||
allowedUDPPortRanges = [
|
useACMEHost = "aciceri.dev";
|
||||||
{
|
locations."/" = {
|
||||||
from = 4665;
|
proxyPass = "http://localhost:${builtins.toString config.services.amule.settings.WebServer.Port}";
|
||||||
to = 4672;
|
};
|
||||||
}
|
serverAliases = [ "amule.sisko.zt.aciceri.dev" ];
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
22
modules/arbi/default.nix
Normal file
22
modules/arbi/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
rev = "d531730d9640160f0519ef4b3640f8da49dd96f8";
|
||||||
|
arbi-flake = builtins.getFlake "git+ssh://git@github.com/aciceri/arbi.git?rev=${rev}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ arbi-flake.nixosModules.arbi ];
|
||||||
|
|
||||||
|
services.arbi = {
|
||||||
|
enable = true;
|
||||||
|
log_level = "debug";
|
||||||
|
configFile = pkgs.writeText "arbi-config.kdl" ''
|
||||||
|
endpoint "wss://eth-mainnet.g.alchemy.com/v2/<REDACTED>"
|
||||||
|
pairs_file "pairs.json"
|
||||||
|
concurrency 4
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.persistence."/persist".directories = [
|
||||||
|
config.services.arbi.dataDir
|
||||||
|
];
|
||||||
|
}
|
31
modules/dump1090/default.nix
Normal file
31
modules/dump1090/default.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
dump1090-flake = builtins.getFlake "github:NixOS/nixpkgs/541f05042033467730fb8cedb08355dc91b94c74";
|
||||||
|
inherit (dump1090-flake.legacyPackages.${pkgs.system}) dump1090-fa;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ "${dump1090-flake}/nixos/modules/services/misc/dump1090-fa.nix" ];
|
||||||
|
|
||||||
|
hardware.rtl-sdr.enable = true;
|
||||||
|
|
||||||
|
disabledModules = [ "services/misc/dump10190-fa.nix" ];
|
||||||
|
documentation.nixos.enable = false;
|
||||||
|
|
||||||
|
services.dump1090-fa = {
|
||||||
|
enable = true;
|
||||||
|
package = dump1090-fa;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."dump1090.sisko.wg.aciceri.dev" = {
|
||||||
|
forceSSL = true;
|
||||||
|
useACMEHost = "aciceri.dev";
|
||||||
|
locations = {
|
||||||
|
"/".alias = "${dump1090-fa}/share/dump1090/";
|
||||||
|
"/data/".alias = "/run/dump1090-fa/";
|
||||||
|
};
|
||||||
|
serverAliases = [ "dump1090.sisko.zt.aciceri.dev" ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -5,7 +5,8 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
garmin-grafana-flake = builtins.getFlake "github:NixOS/nixpkgs/1f03fefb44665cd2377912033de22ffaba2be48d";
|
rev = "f24579d13ee035af96d4a68b765af2aa4b1018b6";
|
||||||
|
garmin-grafana-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
||||||
inherit (garmin-grafana-flake.legacyPackages.${pkgs.system}) garmin-grafana;
|
inherit (garmin-grafana-flake.legacyPackages.${pkgs.system}) garmin-grafana;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
|
@ -206,6 +206,7 @@ let
|
||||||
mixed-pitch
|
mixed-pitch
|
||||||
visual-replace
|
visual-replace
|
||||||
org-super-agenda
|
org-super-agenda
|
||||||
|
tidal
|
||||||
# org-re-reveal # FIXME very not nice hash mismatch when building
|
# org-re-reveal # FIXME very not nice hash mismatch when building
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -222,6 +223,9 @@ let
|
||||||
eat
|
eat
|
||||||
corfu-terminal
|
corfu-terminal
|
||||||
haskell-ts-mode
|
haskell-ts-mode
|
||||||
|
])
|
||||||
|
++ (with epkgs; [
|
||||||
|
typst-ts-mode # why this doesn't seem to be in elpaPackages?
|
||||||
]);
|
]);
|
||||||
in
|
in
|
||||||
mainPackages ++ (builtins.attrValues extraPackages)
|
mainPackages ++ (builtins.attrValues extraPackages)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue