From 01c65f54af71d9af7f6c762d7a620bd27b709687 Mon Sep 17 00:00:00 2001 From: Anish Lakhwara Date: Fri, 12 Sep 2025 00:29:37 -0700 Subject: [PATCH] got a bunch of shit fixed --- flake.lock | 22 +- flake.nix | 8 +- home/gui/default.nix | 18 ++ home/profiles/cli/default.nix | 2 +- home/profiles/desktop/default.nix | 3 +- home/profiles/desktop/kitty.conf | 4 + home/profiles/firefox/default.nix | 2 +- home/profiles/firefox/userChrome.css | 100 ++++++-- home/profiles/nvim/default.nix | 262 ++++++++++++++------- home/profiles/tmux/tmux.conf | 26 ++ hosts/box/configuration.nix | 4 + hosts/box/default.nix | 15 +- hosts/curve/default.nix | 3 +- hosts/profiles/desktop/default.nix | 4 +- hosts/profiles/dns/default.nix | 4 +- hosts/profiles/matrix/default.nix | 4 +- hosts/profiles/matrix/mautrix-services.nix | 64 ++--- hosts/profiles/music/default.nix | 5 +- hosts/profiles/radicale/default.nix | 1 + overlays/default.nix | 4 + pkgs/mautrix-discord.nix | 29 --- 21 files changed, 383 insertions(+), 201 deletions(-) delete mode 100644 pkgs/mautrix-discord.nix diff --git a/flake.lock b/flake.lock index fa36f71b..6607a28f 100644 --- a/flake.lock +++ b/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": { diff --git a/flake.nix b/flake.nix index 49b054c8..e8df696d 100644 --- a/flake.nix +++ b/flake.nix @@ -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 diff --git a/home/gui/default.nix b/home/gui/default.nix index f085974a..6ee60a53 100644 --- a/home/gui/default.nix +++ b/home/gui/default.nix @@ -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; + }; } diff --git a/home/profiles/cli/default.nix b/home/profiles/cli/default.nix index 2c919a13..8a99cc12 100644 --- a/home/profiles/cli/default.nix +++ b/home/profiles/cli/default.nix @@ -154,7 +154,7 @@ enableCompletion = true; autosuggestion.enable = false; - initExtra = '' + initContent = '' bindkey -v autopair-init ''; diff --git a/home/profiles/desktop/default.nix b/home/profiles/desktop/default.nix index a54734b1..4f599b15 100644 --- a/home/profiles/desktop/default.nix +++ b/home/profiles/desktop/default.nix @@ -31,8 +31,9 @@ in inotify-tools offpunk termpdfpy - libsForQt5.kontact + # libsForQt5.kontact thunderbird + libsecret # For secret-tool to manage keyring ]; # GTK4 color scheme? diff --git a/home/profiles/desktop/kitty.conf b/home/profiles/desktop/kitty.conf index 388f4ed2..2122ff7c 100644 --- a/home/profiles/desktop/kitty.conf +++ b/home/profiles/desktop/kitty.conf @@ -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 diff --git a/home/profiles/firefox/default.nix b/home/profiles/firefox/default.nix index 73facd70..5002ae22 100644 --- a/home/profiles/firefox/default.nix +++ b/home/profiles/firefox/default.nix @@ -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 diff --git a/home/profiles/firefox/userChrome.css b/home/profiles/firefox/userChrome.css index 44e5368e..23419e8b 100644 --- a/home/profiles/firefox/userChrome.css +++ b/home/profiles/firefox/userChrome.css @@ -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; + } +} +*/ diff --git a/home/profiles/nvim/default.nix b/home/profiles/nvim/default.nix index 6b2cb913..e34501d6 100644 --- a/home/profiles/nvim/default.nix +++ b/home/profiles/nvim/default.nix @@ -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 = "\" let maplocalleader = "," @@ -228,19 +206,7 @@ in nmap rt :retab! vmap rt :retab! - " moving splits with vim movements. - :tnoremap h - :tnoremap j - :tnoremap k - :tnoremap l - :inoremap h - :inoremap j - :inoremap k - :inoremap l - :nnoremap h - :nnoremap j - :nnoremap k - :nnoremap l + " Alt+hjkl navigation now handled by Navigator.nvim plugin :nnoremap "=strftime("%Y-%m-%d %H:%M") :inoremap =strftime("%Y-%m-%d %H:%M") :inoremap =strftime("%H:%M") @@ -278,11 +244,11 @@ in autocmd BufReadPost,BufNewFile c,clj,cljs RainbowParenthesesToggleAll " general commands - map t :NERDTreeToggle + map e :Neotree toggle map s :w map q :q map r :RainbowParenthesesToggleAll - nnoremap :noh + nnoremap :noh map Q nnoremap Y y$ nnoremap n :vnew @@ -313,11 +279,11 @@ in :vmap sy "*y :map sp :r!xclip -o - " barbar - nnoremap gT :BufferPrevious - nnoremap gt :BufferNext - nnoremap gj :BufferPick - nnoremap gq :BufferClose + " buffer navigation (using built-in commands) + nnoremap gT :bprevious + nnoremap gt :bnext + nnoremap gj :buffers + nnoremap gq :bdelete " git nnoremap ga :G fetch --all @@ -332,7 +298,7 @@ in " kitaab "map cz :VimwikiIndex:ZettelNew "map zs :ZettelSearch - "map zn :ZettelNew + map zn :ZettelNew "map zo :ZettelOpen "map zf :Telescope oldfiles only_cwd=true "map wt :VimwikiMakeTomorrowDiaryNote @@ -368,7 +334,22 @@ in nnoremap vsd :Lspsaga show_line_diagnostics nnoremap vs :Dasht nnoremap vn :Lspsaga diagnostic_jump_prev - nnoremap vo :LSoutlineToggle + nnoremap co :Outline + " Trouble keybindings + nnoremap xx :Trouble diagnostics + nnoremap xw :Trouble workspace_diagnostics + nnoremap xd :Trouble document_diagnostics + nnoremap xl :Trouble loclist + nnoremap xq :Trouble quickfix + nnoremap xr :Trouble lsp_references + + " Yank to system clipboard (y operations only, not d) + nnoremap y "+y + vnoremap y "+y + nnoremap Y "+Y + + " Note-taking keybindings + nnoremap zz :ZkNew { title = vim.fn.input('Title: ') } " dashboard let g:dashboard_custom_header = [ @@ -427,7 +408,7 @@ in " lua config lua <vt', ':call v:lua.toggle_diagnostics()', {noremap = true, silent = true}) - + -- autopairs require('nvim-autopairs').setup{} @@ -567,27 +548,109 @@ 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') @@ -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', '', 'lua require("FTerm").toggle()', opts) - map('t', '', 'lua require("FTerm").toggle()', opts) + map('t', '', 'lua require("FTerm").toggle()', 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", "zn", "ZkNew { title = vim.fn.input('Title: ') }", opts) + -- vim.api.nvim_set_keymap("n", "zn", "ZkNew { title = vim.fn.input('Title: ') }", opts) -- Open notes. vim.api.nvim_set_keymap("n", "zo", "ZkNotes { sort = { 'modified' } }", opts) @@ -818,9 +886,9 @@ in -- Create a new note after asking for its title. -- This overrides the global `zn` mapping to create the note in the same directory as the current buffer. - map("n", "zn", "ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }", opts) + -- map("n", "zn", "ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }", opts) -- Create a new note in the same directory as the current buffer, using the current selection for title. - map("v", "znt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }", opts) + -- map("v", "znt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }", 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", "znc", ":'<,'>ZkNewFromContentSelection { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }", 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'}, '', 'NavigatorLeft') + vim.keymap.set({'n', 't'}, '', 'NavigatorDown') + vim.keymap.set({'n', 't'}, '', 'NavigatorUp') + vim.keymap.set({'n', 't'}, '', 'NavigatorRight') + + -- Disable Ctrl+V in nvim so Kitty can handle paste + vim.keymap.set({'n', 'v', 'i'}, '', '', {noremap = true, silent = true}) + + -- Pane resizing with Alt+Shift+hjkl (to match tmux) + vim.keymap.set('n', '', 'vertical resize -2', {silent = true}) + vim.keymap.set('n', '', 'resize -2', {silent = true}) + vim.keymap.set('n', '', 'resize +2', {silent = true}) + vim.keymap.set('n', '', 'vertical resize +2', {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; }; } diff --git a/home/profiles/tmux/tmux.conf b/home/profiles/tmux/tmux.conf index 67544f83..2eaf48fd 100644 --- a/home/profiles/tmux/tmux.conf +++ b/home/profiles/tmux/tmux.conf @@ -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' diff --git a/hosts/box/configuration.nix b/hosts/box/configuration.nix index 083023fa..11acfd0e 100644 --- a/hosts/box/configuration.nix +++ b/hosts/box/configuration.nix @@ -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; }; diff --git a/hosts/box/default.nix b/hosts/box/default.nix index af1ea004..2c651928 100644 --- a/hosts/box/default.nix +++ b/hosts/box/default.nix @@ -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"; diff --git a/hosts/curve/default.nix b/hosts/curve/default.nix index 8aaf7da3..b166ef52 100644 --- a/hosts/curve/default.nix +++ b/hosts/curve/default.nix @@ -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"; diff --git a/hosts/profiles/desktop/default.nix b/hosts/profiles/desktop/default.nix index 56549230..6c17ce3b 100644 --- a/hosts/profiles/desktop/default.nix +++ b/hosts/profiles/desktop/default.nix @@ -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 ]; } diff --git a/hosts/profiles/dns/default.nix b/hosts/profiles/dns/default.nix index 14960141..a5eb6621 100644 --- a/hosts/profiles/dns/default.nix +++ b/hosts/profiles/dns/default.nix @@ -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"; diff --git a/hosts/profiles/matrix/default.nix b/hosts/profiles/matrix/default.nix index a296e09e..9698f6b9 100644 --- a/hosts/profiles/matrix/default.nix +++ b/hosts/profiles/matrix/default.nix @@ -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" diff --git a/hosts/profiles/matrix/mautrix-services.nix b/hosts/profiles/matrix/mautrix-services.nix index fa637cce..58aa3556 100644 --- a/hosts/profiles/matrix/mautrix-services.nix +++ b/hosts/profiles/matrix/mautrix-services.nix @@ -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"; + # # }; + # }; }; }; } diff --git a/hosts/profiles/music/default.nix b/hosts/profiles/music/default.nix index 9f01a346..5e0d4225 100644 --- a/hosts/profiles/music/default.nix +++ b/hosts/profiles/music/default.nix @@ -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 = { diff --git a/hosts/profiles/radicale/default.nix b/hosts/profiles/radicale/default.nix index e08af459..bab422c2 100644 --- a/hosts/profiles/radicale/default.nix +++ b/hosts/profiles/radicale/default.nix @@ -5,6 +5,7 @@ package = pkgs.radicale; settings = { server.hosts = [ "0.0.0.0:5252" ]; + auth.type = "none"; }; }; diff --git a/overlays/default.nix b/overlays/default.nix index 33009165..397ccb08 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -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 diff --git a/pkgs/mautrix-discord.nix b/pkgs/mautrix-discord.nix deleted file mode 100644 index 01aee5ea..00000000 --- a/pkgs/mautrix-discord.nix +++ /dev/null @@ -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 ]; - }; -} -