got a bunch of shit fixed
This commit is contained in:
parent
4049df5724
commit
01c65f54af
22
flake.lock
22
flake.lock
|
@ -270,16 +270,16 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1736373539,
|
||||
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=",
|
||||
"lastModified": 1751810233,
|
||||
"narHash": "sha256-kllkNbIqQi3VplgTMeGzuh1t8Gk8TauvkTRt93Km+tQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56",
|
||||
"rev": "9b0873b46c9f9e4b7aa01eb634952c206af53068",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-24.11",
|
||||
"ref": "release-25.05",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
|
@ -354,16 +354,16 @@
|
|||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1738277201,
|
||||
"narHash": "sha256-6L+WXKCw5mqnUIExvqkD99pJQ41xgyCk6z/H9snClwk=",
|
||||
"lastModified": 1755274400,
|
||||
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "666e1b3f09c267afd66addebe80fb05a5ef2b554",
|
||||
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-24.11",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
@ -534,11 +534,11 @@
|
|||
},
|
||||
"unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1744932701,
|
||||
"narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=",
|
||||
"lastModified": 1752687322,
|
||||
"narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef",
|
||||
"rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
inputs = {
|
||||
# Nixpkgs
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
|||
# ngipkgs-local.url = "path:/home/anish/usr/ngipkgs";
|
||||
|
||||
# Home manager
|
||||
home-manager.url = "github:nix-community/home-manager/release-24.11";
|
||||
home-manager.url = "github:nix-community/home-manager/release-25.05";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
hardware.url = "github:nixos/nixos-hardware";
|
||||
|
||||
|
@ -95,7 +95,7 @@
|
|||
tidalcycles.overlays.default
|
||||
agenix.overlays.default
|
||||
nur.overlay
|
||||
nix-matrix-appservices.overlay
|
||||
# nix-matrix-appservices.overlay # nixpkgs has these packages and newer ones at that
|
||||
unstableOverlay
|
||||
vimwikiOverlay
|
||||
self.overlays.additions
|
||||
|
@ -251,7 +251,7 @@
|
|||
};
|
||||
lituus = {
|
||||
hostname = "sealight.xyz";
|
||||
# autoRollback = false;
|
||||
autoRollback = false;
|
||||
profiles.system = {
|
||||
user = "root";
|
||||
path = deploy-rs.lib.x86_64-linux.activate.nixos
|
||||
|
|
|
@ -11,4 +11,22 @@
|
|||
../profiles/ssh
|
||||
../profiles/task
|
||||
];
|
||||
|
||||
# GPG configuration for user session
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
pinentry.package = pkgs.pinentry-rofi; # Use rofi for consistency with desktop theme
|
||||
enableSshSupport = true;
|
||||
defaultCacheTtl = 28800; # 8 hours
|
||||
maxCacheTtl = 86400; # 24 hours
|
||||
extraConfig = ''
|
||||
pinentry-program ${pkgs.writeShellScript "pinentry-rofi-themed" ''
|
||||
exec ${pkgs.pinentry-rofi}/bin/pinentry-rofi -theme ~/.config/rofi/theme/passmenu.rasi "$@"
|
||||
''}
|
||||
'';
|
||||
};
|
||||
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@
|
|||
enableCompletion = true;
|
||||
autosuggestion.enable = false;
|
||||
|
||||
initExtra = ''
|
||||
initContent = ''
|
||||
bindkey -v
|
||||
autopair-init
|
||||
'';
|
||||
|
|
|
@ -31,8 +31,9 @@ in
|
|||
inotify-tools
|
||||
offpunk
|
||||
termpdfpy
|
||||
libsForQt5.kontact
|
||||
# libsForQt5.kontact
|
||||
thunderbird
|
||||
libsecret # For secret-tool to manage keyring
|
||||
];
|
||||
|
||||
# GTK4 color scheme?
|
||||
|
|
|
@ -8,6 +8,10 @@ open_url_with default
|
|||
mouse_map left click ungrabbed mouse_click_url_or_select
|
||||
confirm_os_window_close 0
|
||||
enable_audio_bell no
|
||||
|
||||
# Ctrl+V for paste
|
||||
map ctrl+v paste_from_clipboard
|
||||
|
||||
-- Allows zen-mode.nvim to increase font size
|
||||
-- allow_remote_control socket-only
|
||||
-- listen_on unix:/tmp/kitty
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
isDefault = true;
|
||||
name = "anish";
|
||||
userChrome = (builtins.readFile ./userChrome.css);
|
||||
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
# Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
|
||||
ublock-origin
|
||||
# wallabagger
|
||||
|
|
|
@ -53,10 +53,11 @@
|
|||
height: 28px !important;
|
||||
}
|
||||
|
||||
/* hides the sidebar header */
|
||||
/* hides the sidebar header
|
||||
#sidebar-header {
|
||||
display: none !important;
|
||||
}
|
||||
*/
|
||||
|
||||
.tab[selected="true"] {
|
||||
visibility: collapse;
|
||||
|
@ -72,12 +73,28 @@
|
|||
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0
|
||||
See the above repository for updates as well as full license text. */
|
||||
|
||||
/* Show sidebar only when the cursor is over it */
|
||||
/* The border controlling sidebar width will be removed so you'll need to modify these values to change width */
|
||||
/* Show sidebar only when the cursor is over it.
|
||||
The border controlling sidebar width will be removed so you'll need to modify
|
||||
these values to change width.
|
||||
By default the internal layout of sidebar changes when hovered, but this can
|
||||
be changed by setting pref "userchrome.autohide-sidebar.static-layout.enabled" to true
|
||||
*/
|
||||
|
||||
#sidebar-box{
|
||||
--uc-sidebar-width: 40px;
|
||||
/* Note: If you want only *some* sidebar to be auto-hidden, then you can use [sidebarcommand] attribute selector.
|
||||
For example, to only affect Sidebery's sidebar replace all instances of #sidebar-box with
|
||||
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"].
|
||||
To find the sidebarcommand value for any other sidebar, open that sidebar and use Browser Toolbox to inspect it.
|
||||
See: https://firefox-source-docs.mozilla.org/devtools-user/browser_toolbox/index.html
|
||||
*/
|
||||
/* The whole thing
|
||||
:where(#main-window) #browser{
|
||||
--uc-sidebar-width: 240px;
|
||||
--uc-sidebar-hover-width: 210px;
|
||||
}
|
||||
#main-window[sizemode="fullscreen"] #browser{
|
||||
--uc-sidebar-width: 1px;
|
||||
}
|
||||
#sidebar-box{
|
||||
--uc-autohide-sidebar-delay: 600ms; /* Wait 0.6s before hiding sidebar */
|
||||
--uc-autohide-transition-duration: 115ms;
|
||||
--uc-autohide-transition-type: linear;
|
||||
|
@ -87,14 +104,17 @@ See the above repository for updates as well as full license text. */
|
|||
width: var(--uc-sidebar-width) !important;
|
||||
max-width: var(--uc-sidebar-width) !important;
|
||||
z-index: var(--browser-area-z-index-sidebar,3);
|
||||
background-color: inherit;
|
||||
/* This directionality flipper is played so that sidebar "grows" into the right direction */
|
||||
direction: ltr;
|
||||
&:is([positionend],[sidebar-positionend]):not(:-moz-locale-dir(rtl)){
|
||||
direction: rtl;
|
||||
}
|
||||
}
|
||||
#sidebar-box[positionend]{ direction: rtl }
|
||||
#sidebar-box[positionend] > *{ direction: ltr }
|
||||
|
||||
#sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr }
|
||||
#sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl }
|
||||
|
||||
#main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; }
|
||||
.sidebar-browser-stack{
|
||||
background: inherit;
|
||||
}
|
||||
#main-window[sizemode="fullscreen"] #browser{ --uc-sidebar-width: 1px; }
|
||||
|
||||
#sidebar-splitter{ display: none }
|
||||
|
||||
|
@ -116,9 +136,14 @@ See the above repository for updates as well as full license text. */
|
|||
transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important;
|
||||
min-width: var(--uc-sidebar-width) !important;
|
||||
will-change: min-width;
|
||||
direction: ltr;
|
||||
&:-moz-locale-dir(rtl){
|
||||
direction: rtl;
|
||||
}
|
||||
}
|
||||
#sidebar-box:hover > #sidebar-header,
|
||||
#sidebar-box:hover > #sidebar{
|
||||
#sidebar-box:hover > #sidebar,
|
||||
#sidebar-box:hover > .sidebar-browser-stack > #sidebar{
|
||||
min-width: var(--uc-sidebar-hover-width) !important;
|
||||
transition-delay: 0ms !important;
|
||||
}
|
||||
|
@ -143,18 +168,55 @@ See the above repository for updates as well as full license text. */
|
|||
border-inline-width: 0px 1px;
|
||||
}
|
||||
|
||||
#sidebar-box:not([positionend]) > :-moz-locale-dir(rtl),
|
||||
#sidebar-box[positionend] > *{
|
||||
#sidebar-box:not([positionend],[sidebar-positionend]) > :-moz-locale-dir(rtl),
|
||||
#sidebar-box:is([positionend],[sidebar-positionend]) > *{
|
||||
border-inline-width: 1px 0px;
|
||||
}
|
||||
|
||||
@media -moz-pref("sidebar.revamp") {
|
||||
#sidebar, #sidebar-header{ border-style: none }
|
||||
#sidebar-box{ padding: 0 !important; }
|
||||
}
|
||||
/* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */
|
||||
|
||||
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel{
|
||||
#sidebar-box:not([positionend],[sidebar-positionend]):hover ~ #appcontent #statuspanel{
|
||||
inset-inline: auto 0px !important;
|
||||
}
|
||||
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel-label{
|
||||
#sidebar-box:not([positionend],[sidebar-positionend]):hover ~ #appcontent #statuspanel-label{
|
||||
margin-inline: 0px !important;
|
||||
border-left-style: solid !important;
|
||||
}
|
||||
|
||||
@media -moz-pref("userchrome.autohide-sidebar.static-layout.enabled"){
|
||||
#sidebar-box{
|
||||
min-width: var(--uc-sidebar-width) !important;
|
||||
contain: size;
|
||||
box-shadow: var(--content-area-shadow);
|
||||
}
|
||||
#sidebar{
|
||||
min-width: var(--uc-sidebar-hover-width) !important;
|
||||
}
|
||||
.sidebar-browser-stack{
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
transition: width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay);
|
||||
direction: ltr;
|
||||
&:hover{
|
||||
transition-delay: 0ms;
|
||||
width: var(--uc-sidebar-hover-width);
|
||||
}
|
||||
&:-moz-locale-dir(rtl){
|
||||
transition-property: transform,width !important;
|
||||
}
|
||||
}
|
||||
#sidebar-box[sidebar-positionend]:hover :is(#sidebar-header,#sidebar):-moz-locale-dir(ltr){
|
||||
transform: translateX(0);
|
||||
transition-delay: 0ms !important;
|
||||
}
|
||||
#sidebar-box:not([sidebar-positionend]):hover .sidebar-browser-stack:-moz-locale-dir(rtl){
|
||||
transform: translateX(calc(-1 * var(--uc-sidebar-hover-width) + var(--uc-sidebar-width)));
|
||||
}
|
||||
#sidebar-box[sidebar-positionend]:hover > .sidebar-browser-stack:-moz-locale-dir(rtl){
|
||||
transform: translateX(calc(var(--uc-sidebar-hover-width) - var(--uc-sidebar-width)));
|
||||
transition-delay: 0ms !important;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -10,15 +10,7 @@ let
|
|||
sha256 = "1fzKmknfVlEYwqeXgbKITbb2/PJ023iJyMz6vak3qh4=";
|
||||
};
|
||||
};
|
||||
lsp-format = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "lsp-format";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "lukas-reineke";
|
||||
repo = "lsp-format.nvim";
|
||||
rev = "84e117b99bb2bc0d0c8122e2b256046f046f8aff";
|
||||
sha256 = "rs3NTZwWdsmBGXnrgUeVxUiNjbN/ULxJHifPYJD9mT4=";
|
||||
};
|
||||
};
|
||||
|
||||
my-lspsaga = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "lspsaga.nvim";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
|
@ -66,16 +58,6 @@ let
|
|||
};
|
||||
meta.homepage = "https://github.com/folke/which-key.nvim/";
|
||||
};
|
||||
scnvim = pkgs.vimUtils.buildVimPlugin {
|
||||
pname = "scnvim";
|
||||
version = "2022-06-04";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "davidgranstrom";
|
||||
repo = "scnvim";
|
||||
rev = "746cc0db820d02a9c36b8f9ba2eac9725fa73107";
|
||||
sha256 = "kvSwS6FNUY2Ue84NhWLLcm0ldLMSp4WqQ7s6TUoX6Cc=";
|
||||
};
|
||||
};
|
||||
yuck-vim = pkgs.vimUtils.buildVimPlugin {
|
||||
pname = "yuck.vim";
|
||||
version = "2021-08-09";
|
||||
|
@ -132,11 +114,6 @@ let
|
|||
tasklib
|
||||
pynvim
|
||||
six
|
||||
pylsp-mypy
|
||||
#pyls-isort
|
||||
#pyls-black
|
||||
black
|
||||
isort
|
||||
# other python packages you want
|
||||
];
|
||||
python-with-my-packages = pkgs.python3.withPackages my-python-packages;
|
||||
|
@ -205,7 +182,7 @@ in
|
|||
set nobackup
|
||||
set nowritebackup
|
||||
" Better display for messages
|
||||
set cmdheight=2
|
||||
set cmdheight=0
|
||||
" You will have bad experience for diagnostic messages when it's default 4000.
|
||||
set updatetime=300
|
||||
" don't give |ins-completion-menu| messages.
|
||||
|
@ -214,6 +191,7 @@ in
|
|||
set signcolumn=yes
|
||||
" highlight row
|
||||
set cursorline
|
||||
set autoread
|
||||
|
||||
let mapleader = "\<Space>"
|
||||
let maplocalleader = ","
|
||||
|
@ -228,19 +206,7 @@ in
|
|||
nmap <leader>rt :retab!<CR>
|
||||
vmap <leader>rt :retab!<CR>
|
||||
|
||||
" moving splits with vim movements.
|
||||
:tnoremap <A-h> <C-\><C-N><C-w>h
|
||||
:tnoremap <A-j> <C-\><C-N><C-w>j
|
||||
:tnoremap <A-k> <C-\><C-N><C-w>k
|
||||
:tnoremap <A-l> <C-\><C-N><C-w>l
|
||||
:inoremap <A-h> <C-\><C-N><C-w>h
|
||||
:inoremap <A-j> <C-\><C-N><C-w>j
|
||||
:inoremap <A-k> <C-\><C-N><C-w>k
|
||||
:inoremap <A-l> <C-\><C-N><C-w>l
|
||||
:nnoremap <A-h> <leader>h
|
||||
:nnoremap <A-j> <leader>j
|
||||
:nnoremap <A-k> <leader>k
|
||||
:nnoremap <A-l> <leader>l
|
||||
" Alt+hjkl navigation now handled by Navigator.nvim plugin
|
||||
:nnoremap <F5> "=strftime("%Y-%m-%d %H:%M")<CR>
|
||||
:inoremap <F5> <C-R>=strftime("%Y-%m-%d %H:%M")<CR>
|
||||
:inoremap <F4> <C-R>=strftime("%H:%M")<CR>
|
||||
|
@ -278,11 +244,11 @@ in
|
|||
autocmd BufReadPost,BufNewFile c,clj,cljs RainbowParenthesesToggleAll
|
||||
|
||||
" general commands
|
||||
map <leader>t :NERDTreeToggle<CR>
|
||||
map <leader>e :Neotree toggle<CR>
|
||||
map <leader>s :w<CR>
|
||||
map <leader>q :q<CR>
|
||||
map <leader>r :RainbowParenthesesToggleAll<CR>
|
||||
nnoremap <BS> :noh<CR>
|
||||
nnoremap <Esc> :noh<CR>
|
||||
map Q <Nop>
|
||||
nnoremap Y y$
|
||||
nnoremap <leader>n :vnew<CR>
|
||||
|
@ -313,11 +279,11 @@ in
|
|||
:vmap <leader>sy "*y
|
||||
:map <leader>sp :r!xclip -o<CR>
|
||||
|
||||
" barbar
|
||||
nnoremap <silent> gT :BufferPrevious<CR>
|
||||
nnoremap <silent> gt :BufferNext<CR>
|
||||
nnoremap <silent> gj :BufferPick<CR>
|
||||
nnoremap <silent> gq :BufferClose<CR>
|
||||
" buffer navigation (using built-in commands)
|
||||
nnoremap <silent> gT :bprevious<CR>
|
||||
nnoremap <silent> gt :bnext<CR>
|
||||
nnoremap <silent> gj :buffers<CR>
|
||||
nnoremap <silent> gq :bdelete<CR>
|
||||
|
||||
" git
|
||||
nnoremap <leader>ga :G fetch --all
|
||||
|
@ -332,7 +298,7 @@ in
|
|||
" kitaab
|
||||
"map <leader>cz :VimwikiIndex<CR>:ZettelNew
|
||||
"map <leader>zs :ZettelSearch<CR>
|
||||
"map <leader>zn :ZettelNew<CR>
|
||||
map <leader>zn :ZettelNew<CR>
|
||||
"map <leader>zo :ZettelOpen<CR>
|
||||
"map <leader>zf :Telescope oldfiles only_cwd=true<CR>
|
||||
"map <leader>wt :VimwikiMakeTomorrowDiaryNote
|
||||
|
@ -368,7 +334,22 @@ in
|
|||
nnoremap <leader>vsd :Lspsaga show_line_diagnostics<CR>
|
||||
nnoremap <leader>vs :Dasht<Space>
|
||||
nnoremap <leader>vn :Lspsaga diagnostic_jump_prev<CR>
|
||||
nnoremap <leader>vo :LSoutlineToggle<CR>
|
||||
nnoremap <leader>co :Outline<CR>
|
||||
" Trouble keybindings
|
||||
nnoremap <leader>xx :Trouble diagnostics<CR>
|
||||
nnoremap <leader>xw :Trouble workspace_diagnostics<CR>
|
||||
nnoremap <leader>xd :Trouble document_diagnostics<CR>
|
||||
nnoremap <leader>xl :Trouble loclist<CR>
|
||||
nnoremap <leader>xq :Trouble quickfix<CR>
|
||||
nnoremap <leader>xr :Trouble lsp_references<CR>
|
||||
|
||||
" Yank to system clipboard (y operations only, not d)
|
||||
nnoremap y "+y
|
||||
vnoremap y "+y
|
||||
nnoremap Y "+Y
|
||||
|
||||
" Note-taking keybindings
|
||||
nnoremap <leader>zz :ZkNew { title = vim.fn.input('Title: ') }<CR>
|
||||
|
||||
" dashboard
|
||||
let g:dashboard_custom_header = [
|
||||
|
@ -427,7 +408,7 @@ in
|
|||
|
||||
" lua config
|
||||
lua <<EOF
|
||||
local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
|
||||
local signs = { Error = "⮾ ", Warn = "⚠ ", Hint = "💡", Info = " " }
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = "DiagnosticSign" .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
||||
|
@ -567,28 +548,110 @@ in
|
|||
cmp.event:on( 'confirm_done', cmp_autopairs.on_confirm_done({ map_char = { tex = ' ' } }))
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
|
||||
-- null-ls
|
||||
-- being very janky
|
||||
local null_ls = require("null-ls")
|
||||
null_ls.setup({
|
||||
sources = {
|
||||
null_ls.builtins.diagnostics.shellcheck,
|
||||
null_ls.builtins.diagnostics.proselint.with({ filetypes = { "vimwiki", "mail", }, }),
|
||||
null_ls.builtins.diagnostics.commitlint,
|
||||
null_ls.builtins.diagnostics.jsonlint,
|
||||
-- null_ls.builtins.code_actions.statix,
|
||||
-- null_ls.builtins.diagnostics.clj_kondo,
|
||||
-- null_ls.builtins.formatting.isort,
|
||||
-- null_ls.builtins.formatting.black,
|
||||
-- lsp-format removed, using conform.nvim instead
|
||||
require("nvim-navic").setup {
|
||||
icons = {
|
||||
Constant = "π ",
|
||||
Function = "ƒ "
|
||||
}
|
||||
}
|
||||
|
||||
-- Setup neo-tree
|
||||
require("neo-tree").setup {}
|
||||
|
||||
-- Setup outline
|
||||
require("outline").setup {}
|
||||
|
||||
-- Setup trouble
|
||||
require("trouble").setup {}
|
||||
|
||||
-- Setup noice for floating command palette and notifications
|
||||
require("noice").setup({
|
||||
cmdline = {
|
||||
enabled = true,
|
||||
view = "cmdline_popup",
|
||||
},
|
||||
messages = {
|
||||
enabled = true,
|
||||
},
|
||||
popupmenu = {
|
||||
enabled = true,
|
||||
},
|
||||
notify = {
|
||||
enabled = true,
|
||||
view = "notify",
|
||||
},
|
||||
lsp = {
|
||||
progress = {
|
||||
enabled = true,
|
||||
format = "lsp_progress",
|
||||
format_done = "lsp_progress_done",
|
||||
throttle = 1000 / 30, -- frequency to update lsp progress message
|
||||
view = "mini",
|
||||
},
|
||||
override = {
|
||||
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
|
||||
["vim.lsp.util.stylize_markdown"] = true,
|
||||
["cmp.entry.get_documentation"] = true,
|
||||
},
|
||||
},
|
||||
presets = {
|
||||
command_palette = true,
|
||||
long_message_to_split = true,
|
||||
inc_rename = false,
|
||||
lsp_doc_border = false,
|
||||
},
|
||||
views = {
|
||||
cmdline_popup = {
|
||||
border = {
|
||||
style = "rounded",
|
||||
padding = { 0, 1 },
|
||||
},
|
||||
filter_options = {},
|
||||
win_options = {
|
||||
winhighlight = "NormalFloat:NormalFloat,FloatBorder:FloatBorder",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Setup lspconfig
|
||||
require("lsp-format").setup {}
|
||||
require("nvim-navic").setup {}
|
||||
local format = require("lsp-format")
|
||||
-- Setup barbar (tabline with icons)
|
||||
require'barbar'.setup {
|
||||
icons = {
|
||||
filetype = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
local navic = require("nvim-navic")
|
||||
|
||||
-- Setup conform.nvim for formatting
|
||||
require("conform").setup({
|
||||
formatters_by_ft = {
|
||||
javascript = { "prettier", "lsp" },
|
||||
typescript = { "prettier", "lsp" },
|
||||
javascriptreact = { "prettier", "lsp" },
|
||||
typescriptreact = { "prettier", "lsp" },
|
||||
json = { "prettier", "lsp" },
|
||||
html = { "prettier", "lsp" },
|
||||
css = { "prettier", "lsp" },
|
||||
yaml = { "prettier", "lsp" },
|
||||
rust = { "lsp" },
|
||||
go = { "lsp" },
|
||||
lua = { "lsp" },
|
||||
nix = { "nixfmt-rfc-style" },
|
||||
clojure = { "lsp" },
|
||||
fennel = { "lsp" },
|
||||
terraform = { "lsp" },
|
||||
bash = { "shfmt" },
|
||||
sh = { "shfmt" },
|
||||
},
|
||||
format_on_save = {
|
||||
timeout_ms = 500,
|
||||
lsp_fallback = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- lspsaga, code_action lightbulb is annoying
|
||||
local saga = require('lspsaga')
|
||||
saga.init_lsp_saga({
|
||||
|
@ -635,21 +698,20 @@ in
|
|||
}
|
||||
}
|
||||
|
||||
local servers = { 'clojure_lsp', 'terraform_lsp', 'zls', 'pyright', 'rust_analyzer', 'tsserver', 'lua_ls', 'nil_ls', 'gopls'}
|
||||
local servers = { 'clojure_lsp', 'terraform_lsp', 'zls', 'pyright', 'rust_analyzer', 'ts_ls', 'lua_ls', 'nil_ls', 'gopls', 'bashls'}
|
||||
for _, lsp in ipairs(servers) do
|
||||
lspconfig[lsp].setup {
|
||||
on_attach = function(client, bufnr)
|
||||
format.on_attach(client)
|
||||
navic.attach(client, bufnr)
|
||||
end,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end
|
||||
|
||||
-- fennel-ls doesn't support gps
|
||||
-- fennel-ls doesn't support navic
|
||||
lspconfig['fennel-ls'].setup {
|
||||
on_attach = function(client, bufnr)
|
||||
format.on_attach(client)
|
||||
-- fennel-ls setup without navic
|
||||
end,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
|
@ -702,7 +764,7 @@ in
|
|||
function()
|
||||
local msg = 'No Active Lsp'
|
||||
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
|
||||
local clients = vim.lsp.get_active_clients()
|
||||
local clients = vim.lsp.get_clients()
|
||||
if next(clients) == nil then
|
||||
return msg
|
||||
end
|
||||
|
@ -728,7 +790,7 @@ in
|
|||
local map = vim.api.nvim_set_keymap
|
||||
local opts = { noremap = true, silent = true }
|
||||
map('n', '<TAB>', '<CMD>lua require("FTerm").toggle()<CR>', opts)
|
||||
map('t', '<A-i>', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>', opts)
|
||||
map('t', '<TAB>', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>', opts)
|
||||
|
||||
-- Custom functions
|
||||
function update_date()
|
||||
|
@ -765,11 +827,17 @@ in
|
|||
)
|
||||
|
||||
-- auto session
|
||||
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
|
||||
require('auto-session').setup {
|
||||
log_level = 'info',
|
||||
auto_session_suppress_dirs = {'~/'}
|
||||
log_level = 'error',
|
||||
auto_session_suppress_dirs = {'~/', '/tmp', '/'},
|
||||
auto_session_enable_last_session = false,
|
||||
auto_session_root_dir = vim.fn.stdpath('data').."/sessions/",
|
||||
auto_session_enabled = true,
|
||||
auto_save_enabled = nil,
|
||||
auto_restore_enabled = nil,
|
||||
auto_session_create_enabled = nil,
|
||||
}
|
||||
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal"
|
||||
|
||||
require("which-key").setup{}
|
||||
require('leap').set_default_keymaps()
|
||||
|
@ -802,7 +870,7 @@ in
|
|||
|
||||
-- zk
|
||||
require("zk").setup()
|
||||
vim.api.nvim_set_keymap("n", "<leader>zn", "<Cmd>ZkNew { title = vim.fn.input('Title: ') }<CR>", opts)
|
||||
-- vim.api.nvim_set_keymap("n", "<leader>zn", "<Cmd>ZkNew { title = vim.fn.input('Title: ') }<CR>", opts)
|
||||
|
||||
-- Open notes.
|
||||
vim.api.nvim_set_keymap("n", "<leader>zo", "<Cmd>ZkNotes { sort = { 'modified' } }<CR>", opts)
|
||||
|
@ -818,9 +886,9 @@ in
|
|||
|
||||
-- Create a new note after asking for its title.
|
||||
-- This overrides the global `<leader>zn` mapping to create the note in the same directory as the current buffer.
|
||||
map("n", "<leader>zn", "<Cmd>ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", opts)
|
||||
-- map("n", "<leader>zn", "<Cmd>ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", opts)
|
||||
-- Create a new note in the same directory as the current buffer, using the current selection for title.
|
||||
map("v", "<leader>znt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }<CR>", opts)
|
||||
-- map("v", "<leader>znt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }<CR>", opts)
|
||||
-- Create a new note in the same directory as the current buffer, using the current selection for note content and asking for its title.
|
||||
map("v", "<leader>znc", ":'<,'>ZkNewFromContentSelection { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", opts)
|
||||
|
||||
|
@ -886,6 +954,27 @@ in
|
|||
auto_display = false -- WIP automatic markdown image display, may be prone to breaking
|
||||
}
|
||||
|
||||
-- Setup Navigator.nvim
|
||||
require('Navigator').setup {
|
||||
disable_on_zoom = true,
|
||||
mux = 'auto', -- auto-detect tmux
|
||||
}
|
||||
|
||||
-- Set up Navigator.nvim keybindings
|
||||
vim.keymap.set({'n', 't'}, '<M-h>', '<CMD>NavigatorLeft<CR>')
|
||||
vim.keymap.set({'n', 't'}, '<M-j>', '<CMD>NavigatorDown<CR>')
|
||||
vim.keymap.set({'n', 't'}, '<M-k>', '<CMD>NavigatorUp<CR>')
|
||||
vim.keymap.set({'n', 't'}, '<M-l>', '<CMD>NavigatorRight<CR>')
|
||||
|
||||
-- Disable Ctrl+V in nvim so Kitty can handle paste
|
||||
vim.keymap.set({'n', 'v', 'i'}, '<C-v>', '<Nop>', {noremap = true, silent = true})
|
||||
|
||||
-- Pane resizing with Alt+Shift+hjkl (to match tmux)
|
||||
vim.keymap.set('n', '<M-S-h>', '<Cmd>vertical resize -2<CR>', {silent = true})
|
||||
vim.keymap.set('n', '<M-S-j>', '<Cmd>resize -2<CR>', {silent = true})
|
||||
vim.keymap.set('n', '<M-S-k>', '<Cmd>resize +2<CR>', {silent = true})
|
||||
vim.keymap.set('n', '<M-S-l>', '<Cmd>vertical resize +2<CR>', {silent = true})
|
||||
|
||||
EOF
|
||||
|
||||
'';
|
||||
|
@ -908,8 +997,11 @@ in
|
|||
statix
|
||||
nodePackages.typescript
|
||||
nodePackages.typescript-language-server
|
||||
nodePackages.bash-language-server
|
||||
luajitPackages.lua-lsp
|
||||
fennel-ls
|
||||
nixfmt-rfc-style
|
||||
shfmt
|
||||
zk
|
||||
];
|
||||
|
||||
|
@ -917,7 +1009,11 @@ in
|
|||
# ui
|
||||
lualine-nvim
|
||||
fzf-vim
|
||||
nerdtree
|
||||
neo-tree-nvim
|
||||
outline-nvim
|
||||
noice-nvim
|
||||
nui-nvim
|
||||
trouble-nvim
|
||||
neovim-ayu
|
||||
rainbow_parentheses-vim
|
||||
vim-surround
|
||||
|
@ -958,7 +1054,6 @@ in
|
|||
|
||||
# lsp stuff
|
||||
# nvim-lint
|
||||
null-ls-nvim
|
||||
nvim-lspconfig
|
||||
nvim-cmp
|
||||
cmp-nvim-lsp
|
||||
|
@ -971,7 +1066,7 @@ in
|
|||
nvim-autopairs
|
||||
cmp_luasnip
|
||||
luasnip
|
||||
lsp-format
|
||||
conform-nvim
|
||||
friendly-snippets
|
||||
lspkind-nvim
|
||||
|
||||
|
@ -991,6 +1086,7 @@ in
|
|||
nvim-luapad
|
||||
scnvim
|
||||
leap
|
||||
Navigator-nvim
|
||||
vim-beancount
|
||||
# vimtex
|
||||
# custom
|
||||
|
@ -999,7 +1095,7 @@ in
|
|||
# vim-processing
|
||||
];
|
||||
withPython3 = true;
|
||||
extraPython3Packages = pkgs: with pkgs; [ tasklib six ];
|
||||
extraPython3Packages = pkgs: with pkgs; [ tasklib six packaging ];
|
||||
vimAlias = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -57,3 +57,29 @@ setw -g window-status-bell-style 'fg=yellow bg=green bold'
|
|||
|
||||
# messages
|
||||
set -g message-style 'fg=yellow bg=green bold'
|
||||
|
||||
# Unbind Ctrl+V so it passes through to Kitty for paste
|
||||
unbind C-v
|
||||
|
||||
# Vim-aware pane navigation with Alt+hjkl
|
||||
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
||||
bind-key -n M-h if-shell "$is_vim" "send-keys M-h" "select-pane -L"
|
||||
bind-key -n M-j if-shell "$is_vim" "send-keys M-j" "select-pane -D"
|
||||
bind-key -n M-k if-shell "$is_vim" "send-keys M-k" "select-pane -U"
|
||||
bind-key -n M-l if-shell "$is_vim" "send-keys M-l" "select-pane -R"
|
||||
|
||||
# Window navigation with Alt+n/p
|
||||
bind-key -n M-n next-window
|
||||
bind-key -n M-p previous-window
|
||||
|
||||
# Pane resizing with Alt+Shift+hjkl
|
||||
bind-key -n M-S-h resize-pane -L 2
|
||||
bind-key -n M-S-j resize-pane -D 2
|
||||
bind-key -n M-S-k resize-pane -U 2
|
||||
bind-key -n M-S-l resize-pane -R 2
|
||||
|
||||
# Copy mode setup
|
||||
bind v copy-mode
|
||||
setw -g mode-keys vi
|
||||
bind-key -T copy-mode-vi 'v' send -X begin-selection
|
||||
bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
|
||||
|
|
|
@ -66,6 +66,10 @@
|
|||
address = "192.168.1.240";
|
||||
prefixLength = 24;
|
||||
}];
|
||||
ipv6.addresses = [{
|
||||
address = "fd7d:587a:4300:1::240";
|
||||
prefixLength = 64;
|
||||
}];
|
||||
ipv4.routes = [{ address = "192.168.1.0"; prefixLength = 24; via = "192.168.1.1"; }];
|
||||
useDHCP = false;
|
||||
};
|
||||
|
|
|
@ -56,17 +56,10 @@
|
|||
# seafile
|
||||
};
|
||||
|
||||
|
||||
services.nginx.virtualHosts."mast.mossnet.lan" = {
|
||||
enableACME = false;
|
||||
forceSSL = false;
|
||||
|
||||
locations."/" = {
|
||||
extraConfig = ''
|
||||
proxy_pass http://localhost:5731/;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
'';
|
||||
};
|
||||
environment.systemPackages = with pkgs; [ lm_sensors ];
|
||||
hardware.fancontrol = {
|
||||
enable = false;
|
||||
config = '''';
|
||||
};
|
||||
|
||||
age.secrets.box-wg.file = "${self}/secrets/box-wg.age";
|
||||
|
|
|
@ -38,8 +38,7 @@
|
|||
pkgs.lib.mkForce [ ]; # Normally ["network-online.target"]
|
||||
};
|
||||
|
||||
programs.gnupg.agent.enable = true;
|
||||
programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gnome3;
|
||||
|
||||
|
||||
fileSystems."/mnt/ftp" = {
|
||||
device = "192.168.1.240:/home/ftp";
|
||||
|
|
|
@ -220,6 +220,8 @@ in {
|
|||
siji
|
||||
font-awesome
|
||||
proggyfonts
|
||||
(nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; })
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.droid-sans-mono
|
||||
nerd-fonts.iosevka
|
||||
];
|
||||
}
|
||||
|
|
|
@ -53,9 +53,9 @@ in {
|
|||
# private-address = "192.168.1.0/24";
|
||||
cache-min-ttl = 0;
|
||||
serve-expired = "yes";
|
||||
interface = [ "0.0.0.0" ];
|
||||
interface = [ "0.0.0.0" "::" ];
|
||||
access-control =
|
||||
[ "127.0.0.0/8 allow" "192.168.1.0/24 allow" "10.0.69.0/24 allow" ];
|
||||
[ "127.0.0.0/8 allow" "192.168.1.0/24 allow" "10.0.69.0/24 allow" "::1 allow" "fd7d:587a:4300:1::/64 allow" ];
|
||||
access-control-view = "10.0.69.0/24 wireguard";
|
||||
# so-reuseport = "yes";
|
||||
tls-upstream = "yes";
|
||||
|
|
|
@ -47,9 +47,9 @@
|
|||
# The registration file is automatically generated after starting the appservice for the first time.
|
||||
# cp /var/lib/matrix-appservice-discord/discord-registration.yaml /var/lib/matrix-synapse/
|
||||
# chown matrix-synapse:matrix-synapse /var/lib/matrix-synapse/discord-registration.yaml
|
||||
"/var/lib/matrix-synapse/telegram-registration.yaml"
|
||||
# "/var/lib/matrix-synapse/telegram-registration.yaml"
|
||||
"/var/lib/matrix-synapse/signal-registration.yaml"
|
||||
"/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml"
|
||||
#"/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml"
|
||||
"/var/lib/matrix-as-discord/discord-registration.yaml"
|
||||
# "/var/lib/matrix-synapse/slack-registration.yaml"
|
||||
# "/var/lib/matrix-synapse/discord-registration.yaml"
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
{
|
||||
# Mautrix-signal settings
|
||||
services.signald.enable = true;
|
||||
systemd.services.matrix-as-signal = {
|
||||
requires = [ "signald.service" ];
|
||||
after = [ "signald.service" ];
|
||||
unitConfig = {
|
||||
JoinsNamespaceOf = "signald.service";
|
||||
};
|
||||
path = [
|
||||
pkgs.ffmpeg # voice messages need `ffmpeg`
|
||||
];
|
||||
};
|
||||
# services.signald.enable = true;
|
||||
# systemd.services.matrix-as-signal = {
|
||||
# requires = [ "signald.service" ];
|
||||
# after = [ "signald.service" ];
|
||||
# unitConfig = {
|
||||
# JoinsNamespaceOf = "signald.service";
|
||||
# };
|
||||
# path = [
|
||||
# pkgs.ffmpeg # voice messages need `ffmpeg`
|
||||
# ];
|
||||
# };
|
||||
|
||||
services.matrix-appservices = {
|
||||
addRegistrationFiles = false;
|
||||
|
@ -25,28 +25,28 @@
|
|||
# package = pkgs.mautrix-whatsapp;
|
||||
# };
|
||||
|
||||
# discord = {
|
||||
# port = 29188;
|
||||
# format = "mautrix-go";
|
||||
# package = pkgs.unstable.mautrix-discord;
|
||||
# };
|
||||
|
||||
signal = {
|
||||
port = 29184;
|
||||
format = "mautrix-python";
|
||||
package = pkgs.mautrix-signal;
|
||||
serviceConfig = {
|
||||
StateDirectory = [ "matrix-as-signal" "signald" ];
|
||||
SupplementaryGroups = [ "signald" ];
|
||||
TimeoutStopSec = 1; # work around the service ignoring SIGTERM, see https://gitlab.com/coffeetables/nix-matrix-appservices/-/issues/12
|
||||
User = lib.mkForce config.services.signald.user;
|
||||
Group = lib.mkForce config.services.signald.group;
|
||||
};
|
||||
settings.signal = {
|
||||
socket_path = config.services.signald.socketPath;
|
||||
outgoing_attachment_dir = "/var/lib/signald/tmp";
|
||||
};
|
||||
discord = {
|
||||
port = 29188;
|
||||
format = "mautrix-go";
|
||||
package = pkgs.mautrix-discord;
|
||||
};
|
||||
|
||||
# signal = {
|
||||
# port = 29184;
|
||||
# format = "mautrix-python";
|
||||
# package = pkgs.mautrix-signal;
|
||||
# serviceConfig = {
|
||||
# # StateDirectory = [ "matrix-as-signal" "signald" ];
|
||||
# # SupplementaryGroups = [ "signald" ];
|
||||
# TimeoutStopSec = 1; # work around the service ignoring SIGTERM, see https://gitlab.com/coffeetables/nix-matrix-appservices/-/issues/12
|
||||
# # User = lib.mkForce config.services.signald.user;
|
||||
# # Group = lib.mkForce config.services.signald.group;
|
||||
# };
|
||||
# # settings.signal = {
|
||||
# # socket_path = config.services.signald.socketPath;
|
||||
# # outgoing_attachment_dir = "/var/lib/signald/tmp";
|
||||
# # };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
bespokesynth
|
||||
lsp-plugins
|
||||
helio-workstation
|
||||
projectm # milkdrop visualizer
|
||||
# projectm # milkdrop visualizer
|
||||
# i think it's projectm-sdl-cpp now
|
||||
|
||||
# DAWs
|
||||
# ardour
|
||||
|
@ -30,7 +31,7 @@
|
|||
# renoise
|
||||
];
|
||||
|
||||
hardware.pulseaudio.enable = lib.mkForce false;
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = false;
|
||||
|
||||
services.pipewire = {
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
package = pkgs.radicale;
|
||||
settings = {
|
||||
server.hosts = [ "0.0.0.0:5252" ];
|
||||
auth.type = "none";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -36,6 +36,10 @@
|
|||
knownVulnerabilities = [];
|
||||
});
|
||||
|
||||
mautrix-discord = prev.mautrix-discord.overrideAttrs (attrs: rec {
|
||||
license = "";
|
||||
});
|
||||
|
||||
# Need to do server and agent too, maybe
|
||||
# woodpecker-cli-next =
|
||||
# let
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
{ lib, buildGoModule, fetchFromGitHub, olm }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "mautrix-discord";
|
||||
version = "unstable-2022-11-04";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mautrix";
|
||||
repo = "discord";
|
||||
rev = "f53975cc91e3c643a722adf0d3e0dfb98d0127a2";
|
||||
hash = "sha256-xUALcN5oQfwC6gmOeygCkOAXJrJzNitBxHRFAKKgFvE=";
|
||||
};
|
||||
|
||||
buildInputs = [ olm ];
|
||||
|
||||
vendorHash = "sha256-yday2mSnPwuhXWkCG4XY7qoBl3DXHcSvzBoZbjgYz/c=";
|
||||
|
||||
ldflags = [ "-s" "-w" ]; # https://github.com/NixOS/nixpkgs/issues/177698
|
||||
|
||||
doCheck = false; # No tests available
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://go.mau.fi/mautrix-discord";
|
||||
description = "Matrix to Discord hybrid puppeting/relaybot bridge";
|
||||
license = licenses.agpl3Plus;
|
||||
maintainers = with maintainers; [ robin ];
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in a new issue