diff options
Diffstat (limited to 'parts/users/seth/programs')
| -rw-r--r-- | parts/users/seth/programs/chromium.nix | 27 | ||||
| -rw-r--r-- | parts/users/seth/programs/default.nix | 60 | ||||
| -rw-r--r-- | parts/users/seth/programs/firefox/arkenfox.nix | 71 | ||||
| -rw-r--r-- | parts/users/seth/programs/firefox/default.nix | 50 | ||||
| -rw-r--r-- | parts/users/seth/programs/git.nix | 51 | ||||
| -rw-r--r-- | parts/users/seth/programs/gpg.nix | 29 | ||||
| -rw-r--r-- | parts/users/seth/programs/mangohud.nix | 29 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/.luarc.json | 3 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/init.lua | 17 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/keybinds.lua | 49 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/plugins/general.lua | 107 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/plugins/init.lua | 3 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/plugins/lsp.lua | 170 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/config/plugins/ui.lua | 40 | ||||
| -rw-r--r-- | parts/users/seth/programs/neovim/default.nix | 93 | ||||
| -rw-r--r-- | parts/users/seth/programs/ssh.nix | 50 | ||||
| -rw-r--r-- | parts/users/seth/programs/vim.nix | 43 |
17 files changed, 892 insertions, 0 deletions
diff --git a/parts/users/seth/programs/chromium.nix b/parts/users/seth/programs/chromium.nix new file mode 100644 index 0000000..e313235 --- /dev/null +++ b/parts/users/seth/programs/chromium.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + ... +}: let + cfg = config.getchoo.programs.chromium; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.chromium.enable = mkEnableOption "chromium" // {default = config.getchoo.desktop.enable;}; + + config = mkIf cfg.enable { + programs.chromium = { + enable = true; + # hw accel support + commandLineArgs = [ + "--ignore-gpu-blocklist" + "--enable-gpu-rasterization" + "--enable-gpu-compositing" + #"--enable-native-gpu-memory-buffers" + "--enable-zero-copy" + "--enable-features=VaapiVideoDecoder,VaapiVideoEncoder,CanvasOopRasterization,RawDraw,WebRTCPipeWireCapturer,Vulkan,WaylandWindowDecorations,WebUIDarkMode" + "--enable-features=WebRTCPipeWireCapturer,WaylandWindowDecorations,WebUIDarkMode" + "--force-dark-mode" + ]; + }; + }; +} diff --git a/parts/users/seth/programs/default.nix b/parts/users/seth/programs/default.nix new file mode 100644 index 0000000..93ba8f5 --- /dev/null +++ b/parts/users/seth/programs/default.nix @@ -0,0 +1,60 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.getchoo.programs.defaultPrograms; + inherit (lib) mkDefault mkEnableOption mkIf; +in { + options.getchoo.programs.defaultPrograms.enable = mkEnableOption "default programs" // {default = true;}; + + imports = [ + ./chromium.nix + ./firefox + ./git.nix + ./gpg.nix + ./mangohud.nix + ./neovim + ./ssh.nix + ./vim.nix + ]; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ + fd + nix-your-shell + nurl + rclone + restic + ]; + + programs = { + btop.enable = mkDefault true; + + direnv = { + enable = mkDefault true; + nix-direnv.enable = mkDefault true; + }; + + ripgrep.enable = mkDefault true; + + nix-index-database.comma.enable = mkDefault true; + }; + + xdg = + { + enable = mkDefault true; + } + // (mkIf config.programs.btop.enable { + configFile."btop/themes/catppuccin_mocha.theme".source = + pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "btop"; + rev = "ecb8562bb6181bb9f2285c360bbafeb383249ec3"; + sha256 = "sha256-ovVtupO5jWUw6cwA3xEzRe1juUB8ykfarMRVTglx3mk="; + } + + "/catppuccin_mocha.theme"; + }); + }; +} diff --git a/parts/users/seth/programs/firefox/arkenfox.nix b/parts/users/seth/programs/firefox/arkenfox.nix new file mode 100644 index 0000000..3da3a25 --- /dev/null +++ b/parts/users/seth/programs/firefox/arkenfox.nix @@ -0,0 +1,71 @@ +{ + config, + lib, + ... +}: let + cfg = config.getchoo.programs.firefox; + inherit (lib) genAttrs mkEnableOption mkIf recursiveUpdate; + + enableSections = sections: genAttrs sections (_: {enable = true;}); +in { + options.getchoo.programs.firefox.arkenfoxConfig.enable = + mkEnableOption "default arkenfox config" // {default = true;}; + + config.programs.firefox = mkIf (cfg.enable && cfg.arkenfoxConfig.enable) { + arkenfox = { + enable = true; + version = "115.1"; + }; + + profiles.arkenfox.arkenfox = + recursiveUpdate { + enable = true; + + # enable safe browsing + "0400"."0403"."browser.safebrowsing.downloads.remote.enabled".value = true; + + # fix hulu + "1200"."1201"."security.ssl.require_safe_negotiation".value = false; + + "2600"."2651"."browser.download.useDownloadDir" = { + enable = true; + value = true; + }; + + # disable rfp letterboxing + "4500"."4504"."privacy.resistFingerprinting.letterboxing".value = false; + + "5000" = { + "5003"."signon.rememberSignons".enable = true; + # enable search autocomplete + "5021"."keyword.enabled".value = true; + }; + + # enable drm + "5500"."5508"."media.eme.enabled" = { + enable = true; + value = true; + }; + } (enableSections [ + "0100" + "0200" + "0300" + "0400" + "0600" + "0700" + "0800" + "0900" + "1000" + "1200" + "1400" + "1600" + "1700" + "2000" + "2400" + "2600" + "2700" + "2800" + "4500" + ]); + }; +} diff --git a/parts/users/seth/programs/firefox/default.nix b/parts/users/seth/programs/firefox/default.nix new file mode 100644 index 0000000..82ba80d --- /dev/null +++ b/parts/users/seth/programs/firefox/default.nix @@ -0,0 +1,50 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.getchoo.programs.firefox; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.firefox.enable = mkEnableOption "firefox" // {default = config.getchoo.desktop.enable;}; + + imports = [ + ./arkenfox.nix + ]; + + config = mkIf cfg.enable { + home.sessionVariables = { + MOZ_ENABLE_WAYLAND = "1"; + }; + + programs.firefox = { + enable = true; + profiles.arkenfox = { + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + floccus + private-relay + ublock-origin + ]; + + isDefault = true; + + settings = { + # disable firefox accounts & pocket + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + + "gfx.webrender.all" = true; + "fission.autostart" = true; + + # hw accel + "media.ffmpeg.vaapi.enabled" = true; + + # widevine drm + "media.gmp-widevinecdm.enabled" = true; + }; + }; + }; + }; +} diff --git a/parts/users/seth/programs/git.nix b/parts/users/seth/programs/git.nix new file mode 100644 index 0000000..ec92f8d --- /dev/null +++ b/parts/users/seth/programs/git.nix @@ -0,0 +1,51 @@ +{ + config, + lib, + ... +}: let + cfg = config.getchoo.programs.git; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.git.enable = mkEnableOption "git" // {default = true;}; + + config = mkIf cfg.enable { + programs = { + gh = { + enable = true; + settings = { + git_protocol = "https"; + editor = "nvim"; + prompt = "enabled"; + }; + + gitCredentialHelper = { + enable = true; + hosts = ["https://github.com" "https://github.example.com"]; + }; + }; + + git = { + enable = true; + + delta = { + enable = true; + options = { + syntax-theme = "catppuccin"; + }; + }; + + extraConfig = { + init = {defaultBranch = "main";}; + }; + + signing = { + key = "D31BD0D494BBEE86"; + signByDefault = true; + }; + + userEmail = "[email protected]"; + userName = "seth"; + }; + }; + }; +} diff --git a/parts/users/seth/programs/gpg.nix b/parts/users/seth/programs/gpg.nix new file mode 100644 index 0000000..f4f1a33 --- /dev/null +++ b/parts/users/seth/programs/gpg.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: let + cfg = config.getchoo.programs.gpg; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.gpg.enable = mkEnableOption "gpg" // {default = true;}; + + config = mkIf cfg.enable { + programs.gpg.enable = true; + + services.gpg-agent = lib.mkIf pkgs.stdenv.isLinux { + enable = true; + + enableBashIntegration = config.programs.bash.enable; + enableFishIntegration = config.programs.fish.enable; + enableZshIntegration = config.programs.zsh.enable; + + pinentryFlavor = + if osConfig ? programs + then osConfig.programs.gnupg.agent.pinentryFlavor or "curses" + else "curses"; + }; + }; +} diff --git a/parts/users/seth/programs/mangohud.nix b/parts/users/seth/programs/mangohud.nix new file mode 100644 index 0000000..1ab8bb0 --- /dev/null +++ b/parts/users/seth/programs/mangohud.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + ... +}: let + cfg = config.getchoo.programs.mangohud; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.mangohud.enable = + mkEnableOption "mangohud" + // {default = config.getchoo.desktop.enable;}; + + config = mkIf cfg.enable { + programs.mangohud = { + enable = true; + settings = { + legacy_layout = false; + cpu_stats = true; + cpu_temp = true; + gpu_stats = true; + gpu_temp = true; + fps = true; + frametime = true; + media_player = true; + media_player_name = "spotify"; + }; + }; + }; +} diff --git a/parts/users/seth/programs/neovim/.luarc.json b/parts/users/seth/programs/neovim/.luarc.json new file mode 100644 index 0000000..23b9ee2 --- /dev/null +++ b/parts/users/seth/programs/neovim/.luarc.json @@ -0,0 +1,3 @@ +{ + "workspace.checkThirdParty": false +}
\ No newline at end of file diff --git a/parts/users/seth/programs/neovim/config/init.lua b/parts/users/seth/programs/neovim/config/init.lua new file mode 100644 index 0000000..854f26c --- /dev/null +++ b/parts/users/seth/programs/neovim/config/init.lua @@ -0,0 +1,17 @@ +local cmd = vim.cmd +local opt = vim.opt + +-- text options +opt.tabstop = 2 +opt.shiftwidth = 2 +opt.expandtab = false +opt.smartindent = true +opt.wrap = true + +-- appearance +opt.syntax = "on" +cmd("filetype plugin indent on") +opt.termguicolors = true + +require("getchoo.keybinds") +require("getchoo.plugins") diff --git a/parts/users/seth/programs/neovim/config/keybinds.lua b/parts/users/seth/programs/neovim/config/keybinds.lua new file mode 100644 index 0000000..7dab12e --- /dev/null +++ b/parts/users/seth/programs/neovim/config/keybinds.lua @@ -0,0 +1,49 @@ +vim.g.mapleader = "," + +local opts = { noremap = true, silent = true } +local set = function(mode, key, vimcmd) + vim.keymap.set(mode, key, vimcmd, opts) +end + +if pcall(require, "neo-tree.command") then + set("n", "<leader>t", function() + require("neo-tree.command").execute({ + toggle = true, + dir = vim.loop.cwd(), + }) + end) +end + +if pcall(require, "flash") then + set({ "n", "o", "x" }, "s", function() + require("flash").jump() + end) +end + +for i = 1, 9 do + set("n", "<leader>" .. i, function() + local vimcmd = "BufferLineGoToBuffer " .. i + vim.cmd(vimcmd) + end) +end + +set("n", "<leader>q", function() + vim.cmd("BufferLinePickClose") +end) + +set("n", "<leader>e", vim.diagnostic.open_float) +set("n", "[d", vim.diagnostic.goto_prev) +set("n", "]d", vim.diagnostic.goto_next) +set("n", "<leader>u", vim.diagnostic.setloclist) + +set("n", "<leader>f", function() + vim.cmd("Telescope") +end) + +set("n", "<leader>p", function() + vim.cmd("TroubleToggle") +end) + +set("n", "<leader>z", function() + vim.api.nvim_clear_autocmds({ group = "LspFormatting" }) +end) diff --git a/parts/users/seth/programs/neovim/config/plugins/general.lua b/parts/users/seth/programs/neovim/config/plugins/general.lua new file mode 100644 index 0000000..f9a0c2c --- /dev/null +++ b/parts/users/seth/programs/neovim/config/plugins/general.lua @@ -0,0 +1,107 @@ +---- catppuccin +local compile_path = vim.fn.stdpath("cache") .. "/catppuccin-nvim" +vim.fn.mkdir(compile_path, "p") +vim.opt.runtimepath:append(compile_path) + +require("catppuccin").setup({ + compile_path = compile_path, + flavour = "mocha", -- mocha, macchiato, frappe, latte + integrations = { + cmp = true, + flash = true, + gitsigns = true, + native_lsp = { + enabled = true, + }, + neotree = true, + treesitter_context = true, + treesitter = true, + telescope = true, + lsp_trouble = true, + }, + no_italic = true, +}) +vim.api.nvim_command("colorscheme catppuccin") + +---- bufferline +require("bufferline").setup({ + options = { + always_show_bufferline = false, + highlights = require("catppuccin.groups.integrations.bufferline").get(), + diagnostics = "nvim_lsp", + mode = "buffers", + numbers = "ordinal", + separator_style = "slant", + offsets = { + { + filetype = "neo-tree", + text = "neo-tree", + highlight = "Directory", + text_align = "left", + }, + }, + }, +}) + +---- gitsigns +require("gitsigns").setup() + +---- indent-blankline.nvim +require("indent_blankline").setup({ + filetype_exclude = { + "help", + "neo-tree", + "Trouble", + "lazy", + "mason", + "notify", + "toggleterm", + }, + show_trailing_blankline_indent = false, + show_current_context = false, +}) + +---- lualine +require("lualine").setup({ + options = { + theme = "catppuccin", + }, + extensions = { "neo-tree", "trouble" }, +}) + +---- mini.nvim +require("mini.pairs").setup({}) +require("mini.indentscope").setup({ + options = { try_as_border = true }, +}) + +vim.api.nvim_create_autocmd("FileType", { + pattern = { + "help", + "neo-tree", + "Trouble", + "lazy", + "mason", + "notify", + "toggleterm", + }, + callback = function() + vim.b.miniindentscope_disable = true + end, +}) + +---- nvim-tree +require("neo-tree").setup({ + sources = { "filesystem", "buffers", "git_status", "document_symbols" }, + open_files_do_not_replace_types = { "terminal", "Trouble", "qf", "Outline" }, + filesystem = { + bind_to_cwd = false, + follow_current_file = { enabled = true }, + use_libuv_file_watcher = true, + }, +}) + +---- which-key +require("which-key").setup({ + plugins = { spelling = true }, +}) diff --git a/parts/users/seth/programs/neovim/config/plugins/init.lua b/parts/users/seth/programs/neovim/config/plugins/init.lua new file mode 100644 index 0000000..95883c7 --- /dev/null +++ b/parts/users/seth/programs/neovim/config/plugins/init.lua @@ -0,0 +1,3 @@ +require("getchoo.plugins.general") +require("getchoo.plugins.lsp") +require("getchoo.plugins.ui") diff --git a/parts/users/seth/programs/neovim/config/plugins/lsp.lua b/parts/users/seth/programs/neovim/config/plugins/lsp.lua new file mode 100644 index 0000000..e776ed4 --- /dev/null +++ b/parts/users/seth/programs/neovim/config/plugins/lsp.lua @@ -0,0 +1,170 @@ +---- cmp +local cmp = require("cmp") +local luasnip = require("luasnip") +local mapping = cmp.mapping + +require("cmp").setup({ + completion = { + completeopt = "menu,menuone,noinsert", + }, + + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + + mapping = mapping.preset.insert({ + ["<C-n>"] = mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), + ["<C-p>"] = mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), + ["<C-b>"] = mapping.scroll_docs(-4), + ["<C-f>"] = mapping.scroll_docs(4), + ["<C-Space>"] = mapping.complete(), + ["<C-e>"] = mapping.abort(), + ["<CR>"] = mapping.confirm({ select = true }), + ["<S-CR>"] = mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), + }), + + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "async_path" }, + { name = "buffer" }, + }), +}) + +---- gitsigns +require("gitsigns").setup() + +---- fidget +require("fidget").setup() + +---- lsp sources +local null_ls = require("null-ls") +local diagnostics = null_ls.builtins.diagnostics +local formatting = null_ls.builtins.formatting + +local sources = { + lsp_servers = { + ["bashls"] = "bash-language-server", + ["clangd"] = "clangd", + ["eslint"] = "eslint", + ["nil_ls"] = "nil", + ["pyright"] = "pyright-langserver", + ["rust_analyzer"] = "rust-analyzer", + ["tsserver"] = "typescript-language-server", + }, + null_ls = { + diagnostics.actionlint, + diagnostics.alex, + diagnostics.codespell, + diagnostics.deadnix, + diagnostics.pylint, + diagnostics.shellcheck, + diagnostics.statix, + formatting.alejandra, + formatting.beautysh, + formatting.codespell, + formatting.just, + formatting.nimpretty, + formatting.prettier, + formatting.rustfmt, + formatting.shellharden, + formatting.stylua, + formatting.yapf, + }, +} + +--- lsp config +local capabilities = vim.tbl_deep_extend( + "force", + require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()), + { workspace = { didChangeWatchedFiles = { dynamicRegistration = true } } } +) + +local all_config = { + capabilities = capabilities, +} + +local servers = {} +for server, binary in pairs(sources.lsp_servers) do + if vim.fn.executable(binary) == 1 then + servers[server] = all_config + end +end + +servers["lua_ls"] = { + capabilities = capabilities, + settings = { + Lua = { + runtime = { + version = "LuaJIT", + }, + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = vim.api.nvim_get_runtime_file("", true), + }, + }, + }, +} + +for server, settings in pairs(servers) do + require("lspconfig")[server].setup(settings) +end + +---- null-ls +-- auto-format +local lsp_formatting = function(bufnr) + vim.lsp.buf.format({ + filter = function(client) + return client.name == "null-ls" + end, + bufnr = bufnr, + }) +end + +local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) +local formatting_on_attach = function(client, bufnr) + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + lsp_formatting(bufnr) + end, + }) + end +end + +require("mini.comment").setup({ + options = { + custom_commentstring = function() + return require("ts_context_commentstring.internal").calculate_commentstring() + or vim.bo.context_commentstring + end, + }, +}) + +require("null-ls").setup({ + on_attach = formatting_on_attach, + sources = sources.null_ls, +}) + +require("nvim-treesitter.configs").setup({ + auto_install = false, + highlight = { enable = true }, + indent = { enable = true }, + context_commentstring = { + enable = true, + enable_autocmd = false, + }, +}) + +---- trouble +require("trouble").setup() diff --git a/parts/users/seth/programs/neovim/config/plugins/ui.lua b/parts/users/seth/programs/neovim/config/plugins/ui.lua new file mode 100644 index 0000000..3a0cc2e --- /dev/null +++ b/parts/users/seth/programs/neovim/config/plugins/ui.lua @@ -0,0 +1,40 @@ +require("dressing") + +vim.notify = require("notify") + +vim.ui.select = function(...) + return vim.ui.select(...) +end + +vim.ui.input = function(...) + return vim.ui.input(...) +end + +require("noice").setup({ + lsp = { + override = { + ["vim.lsp.util.convert_input_to_markdown_lines"] = true, + ["vim.lsp.util.stylize_markdown"] = true, + ["cmp.entry.get_documentation"] = true, + }, + }, + routes = { + { + filter = { + event = "msg_show", + any = { + { find = "%d+L, %d+B" }, + { find = "; after #%d+" }, + { find = "; before #%d+" }, + }, + }, + view = "mini", + }, + }, + presets = { + bottom_search = true, + command_palette = true, + long_message_to_split = true, + inc_rename = true, + }, +}) diff --git a/parts/users/seth/programs/neovim/default.nix b/parts/users/seth/programs/neovim/default.nix new file mode 100644 index 0000000..2a186ac --- /dev/null +++ b/parts/users/seth/programs/neovim/default.nix @@ -0,0 +1,93 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.getchoo.programs.neovim; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.neovim.enable = mkEnableOption "neovim" // {default = true;}; + + config = mkIf cfg.enable { + programs.neovim = { + enable = true; + defaultEditor = true; + extraPackages = with pkgs; [ + actionlint + alejandra + beautysh + codespell + deadnix + just + nil + nodePackages.alex + shellcheck + statix + stylua + sumneko-lua-language-server + ]; + plugins = with pkgs.vimPlugins; [ + # general + catppuccin-nvim + + # TODO: don't pin when deprecation notice + # is no longer in nixpkgs + (fidget-nvim.overrideAttrs (_: { + src = pkgs.fetchFromGitHub { + owner = "j-hui"; + repo = "fidget.nvim"; + rev = "41f327b53c7977d47aee56f05e0bdbb4b994c5eb"; + hash = "sha256-v9qARsW8Gozit4Z3+igiemjI467QgRhwM+crqwO9r6U="; + }; + })) + + flash-nvim + gitsigns-nvim + indent-blankline-nvim + lualine-nvim + neo-tree-nvim + nvim-web-devicons + mini-nvim + + # completion + nvim-cmp + cmp-nvim-lsp + cmp-buffer + cmp_luasnip + cmp-async-path + luasnip + + # ui + dressing-nvim + noice-nvim + nui-nvim + nvim-notify + + # lsp + nvim-lspconfig + null-ls-nvim + pkgs.vim-just + + ## utils + bufferline-nvim + plenary-nvim + telescope-nvim + trouble-nvim + which-key-nvim + + # treesitter + nvim-treesitter.withAllGrammars + nvim-ts-context-commentstring + ]; + extraLuaConfig = '' + require("getchoo") + ''; + }; + + xdg.configFile."nvim/lua/getchoo" = { + source = ./config; + recursive = true; + }; + }; +} diff --git a/parts/users/seth/programs/ssh.nix b/parts/users/seth/programs/ssh.nix new file mode 100644 index 0000000..080a60e --- /dev/null +++ b/parts/users/seth/programs/ssh.nix @@ -0,0 +1,50 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.getchoo.programs.ssh; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.ssh.enable = mkEnableOption "ssh" // {default = true;}; + + config = mkIf cfg.enable { + programs.ssh = { + enable = true; + package = pkgs.openssh; + + matchBlocks = let + sshDir = "${config.home.homeDirectory}/.ssh"; + in { + # git forges + "codeberg.org" = { + identityFile = "${sshDir}/codeberg"; + user = "git"; + }; + + # linux packaging + "aur.archlinux.org" = { + identityFile = "${sshDir}/aur"; + user = "aur"; + }; + + "pagure.io" = { + identityFile = "${sshDir}/copr"; + user = "git"; + }; + + # router + "192.168.1.1" = { + identityFile = "${sshDir}/openwrt"; + user = "root"; + }; + + # servers + "atlas".user = "atlas"; + }; + }; + + services.ssh-agent.enable = pkgs.stdenv.isLinux; + }; +} diff --git a/parts/users/seth/programs/vim.nix b/parts/users/seth/programs/vim.nix new file mode 100644 index 0000000..0f81cfb --- /dev/null +++ b/parts/users/seth/programs/vim.nix @@ -0,0 +1,43 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.getchoo.programs.vim; + inherit (lib) mkEnableOption mkIf; +in { + options.getchoo.programs.vim.enable = mkEnableOption "vim" // {default = true;}; + + config = mkIf cfg.enable { + programs.vim = { + enable = true; + packageConfigurable = pkgs.vim; + settings = { + expandtab = false; + shiftwidth = 2; + tabstop = 2; + }; + extraConfig = '' + " https://wiki.archlinux.org/title/XDG_Base_Directory + set runtimepath^=$XDG_CONFIG_HOME/vim + set runtimepath+=$XDG_DATA_HOME/vim + set runtimepath+=$XDG_CONFIG_HOME/vim/after + + set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim + set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after + set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim + set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after + + let g:netrw_home = $XDG_DATA_HOME."/vim" + call mkdir($XDG_DATA_HOME."/vim/spell", 'p') + + set backupdir=$XDG_STATE_HOME/vim/backup | call mkdir(&backupdir, 'p') + set directory=$XDG_STATE_HOME/vim/swap | call mkdir(&directory, 'p') + set undodir=$XDG_STATE_HOME/vim/undo | call mkdir(&undodir, 'p') + set viewdir=$XDG_STATE_HOME/vim/view | call mkdir(&viewdir, 'p') + set viminfofile=$XDG_STATE_HOME/vim/viminfo + ''; + }; + }; +} |
