Compare commits

..

2 commits

Author SHA1 Message Date
aae9a0f31f dark mode experiment 2023-03-02 14:18:25 +01:00
da75a7c00c nvim: config 2023-03-01 15:04:05 +01:00
130 changed files with 2964 additions and 5101 deletions

View file

@ -0,0 +1,77 @@
window:
decorations: none
startup_mode: Maximized
font:
normal:
family: Iosevka Term SS09
style: Regular
bold:
family: Iosevka Term SS09
style: Semibold
italic:
family: Iosevka Term Curly Slab
style: Light Italic
bold_italic:
family: Iosevka SS15
style: Extralight Italic
size: 10
offset:
x: 0
y: 3
glyph_offset:
x: 0
y: 2
cursor:
# Values for `style`:
# - ▇ Block
# - _ Underline
# - | Beam
style: Block
vi_mode_style: Beam
unfocused_hollow: true
thickness: 0.15
mouse:
hide_when_typing: true
# url:
# launcher:
# program: /home/dln/bin/url-copy
colors:
primary:
background: '#fcfcfc'
foreground: '#000000'
normal:
black: '#212121'
red: '#b7141e'
green: '#457b23'
yellow: '#f5971d'
blue: '#134eb2'
magenta: '#550087'
cyan: '#0e707c'
white: '#eeeeee'
bright:
black: '#424242'
red: '#e83a3f'
green: '#7aba39'
yellow: '#fee92e'
blue: '#53a4f3'
magenta: '#a94dbb'
cyan: '#26bad1'
white: '#d8d8d8'
key_bindings:
- { key: V, mods: Alt, action: Paste }
- { key: C, mods: Alt, action: Copy }
- { key: V, mods: Shift|Alt, action: Paste }
- { key: C, mods: Shift|Alt, action: Copy }
- { key: Return, mods: Alt, action: ToggleFullscreen }

3
.config/bat/config Normal file
View file

@ -0,0 +1,3 @@
--italic-text=always
--plain
--theme=ansi

View file

@ -0,0 +1 @@
--enable-features=OzonePlatform --ozone-platform=wayland

View file

@ -0,0 +1,14 @@
version: 2
root-markers:
- .git/
tools:
clang-format: &clang-format
format-command: 'clang-format -style="{BasedOnStyle: Google, IndentWidth: 2, AlignConsecutiveDeclarations: true, AlignConsecutiveAssignments: true, ColumnLimit: 0}"'
format-stdin: true
languages:
proto:
- <<: *clang-format

View file

@ -0,0 +1 @@
DFT_BACKGROUND=light

View file

@ -0,0 +1 @@
DOCKER_HOST=unix://${XDG_RUNTIME_DIR}/podman/podman.sock

View file

@ -0,0 +1 @@
GOPROXY=https://athens.aarn.shelman.io

View file

@ -0,0 +1,2 @@
MOZ_ENABLE_WAYLAND=1
MOZ_DISABLE_RDD_SANDBOX=1

View file

@ -0,0 +1,35 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<!--
<dir>~/.fonts</dir>
<match target="font">
<edit mode="assign" name="hinting">
<bool>true</bool>
</edit>
</match>
<match target="font">
<edit mode="assign" name="hintstyle">
<const>hintmedium</const>
</edit>
</match>
-->
</fontconfig>

23
.config/gitui/theme.ron Normal file
View file

@ -0,0 +1,23 @@
(
selected_tab: Reset,
command_fg: Rgb(2, 119, 189),
selection_bg: Rgb(225, 245, 254),
selection_fg: Reset,
cmdbar_extra_lines_bg: Rgb(2, 136, 209),
cmdbar_bg: Reset,
disabled_fg: Rgb(109, 76, 65),
diff_line_add: Rgb(56, 142, 60),
diff_line_delete: Rgb(230, 74, 25),
diff_file_added: Rgb(56, 142, 60),
diff_file_removed: Rgb(230, 74, 25),
diff_file_moved: Rgb(156, 39, 176),
diff_file_modified: Rgb(255, 111, 0),
commit_hash: Magenta,
commit_time: Rgb(0, 131, 143),
commit_author: Green,
danger_fg: Red,
push_gauge_bg: Blue,
push_gauge_fg: Reset,
tag_fg: LightMagenta,
branch_fg: LightBlue
)

100
.config/k9s/skin.yml Normal file
View file

@ -0,0 +1,100 @@
# K9s Gruvbox Light Skin Contributed by [@indiebrain](https://github.com/indiebrain)
foreground: &foreground default
background: &background default
current_line: &current_line "#ebdbb2"
selection: &selection "#3c3735"
comment: &comment "#bdad93"
cyan: &cyan "#78ad79"
green: &green "#989719"
orange: &orange "#d79920"
magenta: &magenta "#b16185"
blue: &blue "#448488"
red: &red "#cc231c"
k9s:
body:
fgColor: *foreground
bgColor: *background
logoColor: *blue
prompt:
fgColor: *foreground
bgColor: *background
suggestColor: *orange
info:
fgColor: *magenta
sectionColor: *foreground
help:
fgColor: *foreground
bgColor: *background
keyColor: *magenta
numKeyColor: *blue
sectionColor: *green
dialog:
fgColor: *foreground
bgColor: *background
buttonFgColor: *foreground
buttonBgColor: *magenta
buttonFocusFgColor: white
buttonFocusBgColor: *cyan
labelFgColor: *orange
fieldFgColor: *foreground
frame:
border:
fgColor: *selection
focusColor: *current_line
menu:
fgColor: *foreground
keyColor: *magenta
numKeyColor: *magenta
crumbs:
fgColor: *foreground
bgColor: *comment
activeColor: *blue
status:
newColor: *cyan
modifyColor: *blue
addColor: *green
errorColor: *red
highlightColor: *orange
killColor: *comment
completedColor: *comment
title:
fgColor: *foreground
bgColor: *background
highlightColor: *orange
counterColor: *blue
filterColor: *magenta
views:
charts:
bgColor: background
defaultDialColors:
- *blue
- *red
defaultChartColors:
- *blue
- *red
table:
fgColor: *foreground
bgColor: *background
cursorFgColor: *foreground
cursorBgColor: *current_line
header:
fgColor: *foreground
bgColor: *background
sorterColor: *selection
xray:
fgColor: *foreground
bgColor: *background
cursorColor: *current_line
graphicColor: *blue
showIcons: false
yaml:
keyColor: *magenta
colonColor: *blue
valueColor: *foreground
logs:
fgColor: *foreground
bgColor: *background
indicator:
fgColor: *foreground
bgColor: *background

12
.config/nvim/.netrwhist Normal file
View file

@ -0,0 +1,12 @@
let g:netrw_dirhistmax =10
let g:netrw_dirhistcnt =4
let g:netrw_dirhist_4='/home/dln/src/github.com/tocaboca/Toca-Days/Infrastructure/Helm'
let g:netrw_dirhist_3='/home/dln/src/github.com/tocaboca/Toca-Days/Infrastructure/Helm/days'
let g:netrw_dirhist_2='/home/dln/src/github.com/tocaboca/toca-days-prod/blessings'
let g:netrw_dirhist_1='/home/dln/src/github.com/tocaboca/toca-infrastructure/flux/k8s/infra/tenants/toca-studio/clusters/studio'
let g:netrw_dirhist_0='/home/dln/src/github.com/tocaboca/toca-infrastructure/linkerd/gateway'
let g:netrw_dirhist_9='/home/dln/src/github.com/tocaboca/toca-infrastructure/cluster/terraform'
let g:netrw_dirhist_8='/home/dln/src/github.com/shelmangroup/tf-infra/lab001/vms/modules/fcos_vault_agent'
let g:netrw_dirhist_7='/tmp/squid/etc'
let g:netrw_dirhist_6='/tmp/squid'
let g:netrw_dirhist_5='/tmp/squid/etc'

2
.config/nvim/init.lua Normal file
View file

@ -0,0 +1,2 @@
require("config.options")
require("config.lazy")

View file

@ -0,0 +1,56 @@
{
"Comment.nvim": { "branch": "master", "commit": "6821b3ae27a57f1f3cf8ed030e4a55d70d0c4e43" },
"catppuccin": { "branch": "main", "commit": "7c392fb5f27daa6addee050f7b7522718e8d9357" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-cmdline": { "branch": "main", "commit": "8fcc934a52af96120fe26358985c10c035984b53" },
"cmp-emoji": { "branch": "main", "commit": "19075c36d5820253d32e2478b6aaf3734aeaafa0" },
"cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" },
"cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "3d8912ebeb56e5ae08ef0906e3a54de1c66b92f1" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp-tmux": { "branch": "main", "commit": "984772716f66d8ee88535a6bf3f94c4b4e1301f5" },
"colorbuddy.vim": { "branch": "master", "commit": "cdb5b0654d3cafe61d2a845e15b2b4b0e78e752a" },
"copilot-cmp": { "branch": "master", "commit": "92535dfd9c430b49ca7d9a7da336c5db65826b65" },
"copilot.lua": { "branch": "master", "commit": "b41d4c9c7d4f5e0272bcf94061b88e244904c56f" },
"gitsigns.nvim": { "branch": "main", "commit": "76b71f74ce002119fce322df13bd21cc52c1d112" },
"go.nvim": { "branch": "master", "commit": "7d7b081bf3d3113d1d487d83a5436bd1e7215ff5" },
"hlargs.nvim": { "branch": "main", "commit": "2a7f9878326cdfd0eb8c91ad543c07680c976227" },
"inc-rename.nvim": { "branch": "main", "commit": "21c23c379342a731a0c90f226601ec0434627b26" },
"indent-blankline.nvim": { "branch": "master", "commit": "018bd04d80c9a73d399c1061fa0c3b14a7614399" },
"kanagawa": { "branch": "master", "commit": "4c8d48726621a7f3998c7ed35b2c2535abc22def" },
"lazy.nvim": { "branch": "main", "commit": "26d121ea13bee96b079403cee6598f04969d4983" },
"lspkind-nvim": { "branch": "master", "commit": "c68b3a003483cf382428a43035079f78474cd11e" },
"lualine.nvim": { "branch": "master", "commit": "e99d733e0213ceb8f548ae6551b04ae32e590c80" },
"lush.nvim": { "branch": "main", "commit": "b1e8eb1da3fee95ef31515a73c9eff9bf251088d" },
"marks.nvim": { "branch": "master", "commit": "76aca5069c5ce5c0099e30168649e6393e494f26" },
"neogen": { "branch": "main", "commit": "93d997dbddfe084e77ba4541c54a7b8bfd754fb1" },
"noice.nvim": { "branch": "main", "commit": "d8a1f3056ad713b5d471048f8d029264828e22c0" },
"nui.nvim": { "branch": "main", "commit": "0dc148c6ec06577fcf06cbab3b7dac96d48ba6be" },
"null-ls.nvim": { "branch": "main", "commit": "689cdd78f70af20a37b5309ebc287ac645ae4f76" },
"nvim-cmp": { "branch": "main", "commit": "01f697a68905f9dcae70960a9eb013695a17f9a2" },
"nvim-dap": { "branch": "master", "commit": "5b986edc95cf7b37da1db91a5c149daa3ac008d2" },
"nvim-dap-go": { "branch": "main", "commit": "b4ded7de579b4e2a85c203388233b54bf1028816" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "8db23ea51203b5f00ad107a0cef7e0b2d7a0476c" },
"nvim-lsp-ts-utils": { "branch": "main", "commit": "0a6a16ef292c9b61eac6dad00d52666c7f84b0e7" },
"nvim-lspconfig": { "branch": "master", "commit": "3b08f2edc461314b9051edf26348f8af3fe33e63" },
"nvim-navic": { "branch": "master", "commit": "7e9d2b2b601149fecdccd11b516acb721e571fe6" },
"nvim-osc52": { "branch": "main", "commit": "0abf3267090905accf348d19951640e3b95755c3" },
"nvim-treesitter": { "branch": "master", "commit": "9dd1b9c09707bf1cdd565b999c79ac6461602591" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "4b30081d2736e09f90c890a8a7adfe4df36f5b36" },
"nvim-ts-autotag": { "branch": "main", "commit": "fdefe46c6807441460f11f11a167a2baf8e4534b" },
"nvim-ts-context-commentstring": { "branch": "main", "commit": "a0f89563ba36b3bacd62cf967b46beb4c2c29e52" },
"nvim-web-devicons": { "branch": "master", "commit": "c2c2317f356c8b7da0252f5da758f71bb60bb6b2" },
"packer.nvim": { "branch": "master", "commit": "1d0cf98a561f7fd654c970c49f917d74fafe1530" },
"playground": { "branch": "master", "commit": "4044b53c4d4fcd7a78eae20b8627f78ce7dc6f56" },
"plenary.nvim": { "branch": "master", "commit": "253d34830709d690f013daf2853a9d21ad7accab" },
"popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" },
"stylua-nvim": { "branch": "main", "commit": "ce59a353f02938cba3e0285e662fcd3901cd270f" },
"telescope-dap.nvim": { "branch": "master", "commit": "313d2ea12ae59a1ca51b62bf01fc941a983d9c9c" },
"telescope-fzy-native.nvim": { "branch": "master", "commit": "282f069504515eec762ab6d6c89903377252bf5b" },
"telescope-github.nvim": { "branch": "master", "commit": "ee95c509901c3357679e9f2f9eaac3561c811736" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "62ea5e58c7bbe191297b983a9e7e89420f581369" },
"telescope.nvim": { "branch": "master", "commit": "a3f17d3baf70df58b9d3544ea30abe52a7a832c2" },
"trouble.nvim": { "branch": "main", "commit": "67337644e38144b444d026b0df2dc5fa0038930f" },
"vim-cue": { "branch": "master", "commit": "bd1a62303d096aa24fe4160a475645087f8770b3" },
"vim-illuminate": { "branch": "master", "commit": "49062ab1dd8fec91833a69f0a1344223dd59d643" },
"zenbones.nvim": { "branch": "main", "commit": "910b8c240c6aaf5263db038db81c538602c766c3" }
}

View file

@ -0,0 +1,35 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath })
vim.fn.system({ "git", "-C", lazypath, "checkout", "tags/stable" }) -- last stable release
end
vim.opt.runtimepath:prepend(lazypath)
require("lazy").setup({
import = "plugins",
defaults = { lazy = true },
checker = { enabled = true },
install = {
missing = true,
colorscheme = { "zenbones" },
},
performance = {
cache = {
enabled = true,
},
rtp = {
disabled_plugins = {
"gzip",
"matchit",
"matchparen",
"netrwPlugin",
"rplugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
debug = false,
})

View file

@ -0,0 +1,71 @@
vim.cmd([[set undofile]])
vim.cmd([[set completeopt-=preview]])
vim.cmd([[set viewoptions-=options]])
vim.g.mapleader = ","
vim.o.hidden = true
vim.o.mouse = "a"
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.ttimeout = true
vim.o.ttimeoutlen = 50
vim.o.updatetime = 100
vim.o.autochdir = false
vim.o.backupdir = "/home/dln/.local/share/nvim/backup/"
vim.o.backup = true
vim.g.netrw_dirhistmax = 0
vim.o.clipboard = "unnamedplus"
vim.g.do_filetype_lua = 1
vim.o.spell = false
vim.o.spelllang = "en_us"
vim.opt.winbar = nil
--- Indent
vim.o.autoindent = true
vim.o.breakindent = true
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.joinspaces = false
vim.o.listchars = "extends:,precedes:,nbsp:·,tab:→ ,trail:·"
vim.wo.foldlevel = 99
vim.wo.linebreak = true
vim.wo.list = true
vim.o.shiftwidth = 2
vim.o.tabstop = 2
vim.o.softtabstop = 2
--- Search
vim.cmd("set path+=**")
vim.cmd("set wildignore+=/var/*,*.so,*.swp,*.zip,*.tar,*.pyc")
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.wildmode = "longest:full,full"
if vim.fn.executable("rg") then
vim.o.grepprg = "rg --vimgrep --no-heading --smart-case"
end
--- Completion
vim.cmd("set shortmess+=c")
vim.o.completeopt = "menuone,noinsert,noselect"
--- Appearance
vim.o.scrolloff = 7
vim.o.showmode = false
vim.o.sidescrolloff = 5
vim.o.termguicolors = true
vim.wo.cursorline = true
vim.wo.number = true
vim.wo.signcolumn = "yes"
vim.o.laststatus = 3
vim.o.cmdheight = 1
-- vim.o.statusline = "═"
-- vim.o.title = true
-- vim.o.titlestring = "%F%m %r %y"
vim.o.fillchars = "stl: ,stlnc: ,eob:🮙"
-- vim.wo.foldmethod = "expr"
-- vim.wo.foldexpr = "nvim_treesitter#foldexpr()"
vim.g.netrw_dirhistmax = 0
--- Key mappings
vim.keymap.set("n", "<C-l>", ':let @/=""<CR>') -- clear search
vim.keymap.set("n", ",L", ":luafile %<CR>") -- Reload lua file

View file

@ -0,0 +1,83 @@
local M = {
"hrsh7th/nvim-cmp",
dependencies = {
"andersevenrud/cmp-tmux",
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-emoji",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"hrsh7th/cmp-nvim-lsp-signature-help",
"onsails/lspkind-nvim",
},
event = "InsertEnter",
}
function M.config()
local cmp = require("cmp")
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
vim.o.completeopt = "menuone,noselect"
cmp.setup({
completion = {
completeopt = "menu,menuone,noinsert",
},
formatting = {
format = require("lspkind").cmp_format(),
},
window = {
completion = cmp.config.window.bordered({
winhighlight = "Normal:PMenu,FloatBorder:PMenuBorder,CursorLine:PMenuSel,Search:None",
}),
documentation = cmp.config.window.bordered({
winhighlight = "Normal:PMenu,FloatBorder:PMenu,CursorLine:PMenuSel,Search:None",
}),
},
mapping = {
["<Up>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "c" }),
["<Down>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "c" }),
["<C-d>"] = cmp.mapping.scroll_docs(-2),
["<C-u>"] = cmp.mapping.scroll_docs(2),
["<C-e>"] = cmp.mapping({
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
}),
-- ["<CR>"] = cmp.mapping(cmp.mapping.confirm({ select = false }), { "i", "c" }),
-- ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
["<CR>"] = cmp.mapping(cmp.mapping.confirm({ select = true })),
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), {}),
},
-- experimental = {
-- ghost_text = {
-- hl_group = "LspCodeLens",
-- },
-- },
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "nvim_lsp_signature_help" },
{ name = "buffer" },
{ name = "copilot" },
{
name = "tmux",
priority = 2,
option = {
all_panes = true,
trigger_characters = {},
},
},
{ name = "emoji" },
}),
})
end
return M

View file

@ -0,0 +1,54 @@
local M = {
"zbirenbaum/copilot.lua",
event = { "VeryLazy" },
dependencies = {
{
"zbirenbaum/copilot-cmp",
config = function()
require("copilot_cmp").setup()
end,
},
},
}
function M.config()
require("copilot").setup({
panel = {
enabled = true,
auto_refresh = false,
keymap = {
jump_prev = "[[",
jump_next = "]]",
accept = "<CR>",
refresh = "gr",
open = "<M-CR>",
},
},
suggestion = {
enabled = true,
auto_trigger = true,
debounce = 75,
keymap = {
accept = "<C-j>",
next = "<M-]>",
prev = "<M-[>",
dismiss = "<C-]>",
},
},
filetypes = {
yaml = false,
markdown = false,
help = false,
gitcommit = false,
gitrebase = false,
hgcommit = false,
svn = false,
cvs = false,
["."] = false,
},
copilot_node_command = "node", -- Node version must be < 18
server_opts_overrides = {},
})
end
return M

View file

@ -0,0 +1,53 @@
return {
"mfussenegger/nvim-dap",
dependencies = {
{
"theHamsta/nvim-dap-virtual-text",
config = function()
require("nvim-dap-virtual-text").setup({
commented = true,
})
end,
},
{
"leoluz/nvim-dap-go",
config = function()
require("dap-go").setup()
end,
},
},
keys = {
{ "DD", ":lua require'dap'.toggle_breakpoint()<cr>", desc = "Toggle Breakpoint" },
{ "Dc", ":lua require'dap'.continue()<cr>", desc = "Continue" },
{ "Di", ":lua require'dap'.step_into()<cr>", desc = "Step Into" },
{ "Do", ":lua require'dap'.step_over()<cr>", desc = "Step Over" },
{ "DO", ":lua require'dap'.step_out()<cr>", desc = "Step Out" },
{ "Dh", ":lua require'dap.ui.widgets'.hover()<cr>", desc = "Hover" },
{ "Dr", ":lua require'dap'.repl.toggle({height = 5})<cr>", desc = "Toogle Repl" },
},
config = function()
require("dap")
require("dap.ext.vscode").load_launchjs()
vim.fn.sign_define(
"DapBreakpoint",
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
)
vim.fn.sign_define(
"DapBreakpointCondition",
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
)
vim.fn.sign_define(
"DapBreakpointRejected",
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
)
vim.fn.sign_define(
"DapLogPoint",
{ text = "", texthl = "DapLogPoint", linehl = "DapLogPoint", numhl = "DapLogPoint" }
)
vim.fn.sign_define(
"DapStopped",
{ text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" }
)
end,
}

View file

@ -0,0 +1,38 @@
local M = {
"lewis6991/gitsigns.nvim",
}
function M.config()
require("gitsigns").setup({
numhl = true,
signs = {
add = { hl = "GitSignsAdd", text = "", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" },
change = {
hl = "GitSignsChange",
text = "",
numhl = "GitSignsChangeNr",
linehl = "GitSignsChangeLn",
},
delete = {
hl = "GitSignsDelete",
text = "",
numhl = "GitSignsDeleteNr",
linehl = "GitSignsDeleteLn",
},
topdelete = {
hl = "GitSignsDelete",
text = "",
numhl = "GitSignsDeleteNr",
linehl = "GitSignsDeleteLn",
},
changedelete = {
hl = "GitSignsChange",
text = "~",
numhl = "GitSignsChangeNr",
linehl = "GitSignsChangeLn",
},
},
})
end
return M

View file

@ -0,0 +1,9 @@
local M = {
"RRethy/vim-illuminate",
event = "BufReadPost",
config = function()
require("illuminate").configure({ delay = 200 })
end,
}
return M

View file

@ -0,0 +1,44 @@
local M = {
"lukas-reineke/indent-blankline.nvim",
event = "BufReadPre",
config = {
buftype_exclude = { "terminal", "nofile" },
filetype_exclude = {
"help",
"neogitstatus",
"NvimTree",
"neo-tree",
"Trouble",
},
char = "",
-- char = "┊",
char_highlight_list = { "Indent1", "Indent2", "Indent3", "Indent4", "Indent5", "Indent6" },
use_treesitter_scope = false,
show_trailing_blankline_indent = false,
show_current_context = true,
context_patterns = {
"class",
"return",
"function",
"method",
"^if",
"^while",
"jsx_element",
"^for",
"^object",
"^table",
"block",
"arguments",
"if_statement",
"else_clause",
"jsx_element",
"jsx_self_closing_element",
"try_statement",
"catch_clause",
"import_statement",
"operation_type",
},
},
}
return M

View file

@ -0,0 +1,241 @@
local M = {
"neovim/nvim-lspconfig",
event = "VeryLazy",
}
function M.config()
local lspconfig = require("lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()
vim.keymap.set("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>")
vim.keymap.set("i", "<C-k>", "<Cmd>lua vim.lsp.buf.signature_help()<CR>")
vim.keymap.set("n", "1gd", "<Cmd>lua vim.lsp.buf.type_definition()<CR>")
vim.keymap.set("n", "gf", "<Cmd>lua vim.lsp.buf.format()<CR>")
vim.keymap.set("n", "[d", "<Cmd>lua vim.lsp.diagnostic.goto_prev()<CR>")
vim.keymap.set("n", "]d", "<Cmd>lua vim.lsp.diagnostic.goto_next()<CR>")
vim.keymap.set("n", "gwa", "<Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
vim.keymap.set("n", "gwr", "<Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
vim.keymap.set("n", "gwl", "<Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
vim.cmd([[autocmd BufWritePre * lua vim.lsp.buf.format({sync = true})]])
local border = {
{ "🭽", "FloatBorder" },
{ "", "FloatBorder" },
{ "🭾", "FloatBorder" },
{ "", "FloatBorder" },
{ "🭿", "FloatBorder" },
{ "", "FloatBorder" },
{ "🭼", "FloatBorder" },
{ "", "FloatBorder" },
}
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border })
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border })
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
update_in_insert = false,
virtual_text = false,
})
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 })
end
local function on_attach(client, bufnr)
require("nvim-navic").attach(client, bufnr)
end
-- simple setups --
local servers = {
"bashls",
"bufls",
"dockerls",
"gopls",
"jsonls",
-- "sql",
"pyright",
"lua_ls",
"terraformls",
"yamlls",
}
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup({ on_attach = on_attach })
end
local efm_prettier = {
formatCommand = "prettier --stdin-filepath ${INPUT}",
formatStdin = true,
}
lspconfig.gopls.setup({
on_attach = on_attach,
settings = {
gopls = {
directoryFilters = {
"-bazel-bin",
"-bazel-out",
"-bazel-testlogs",
"-proto",
},
},
},
})
lspconfig.lua_ls.setup({
on_attach = function(client, bufnr)
on_attach(client, bufnr)
vim.cmd([[autocmd BufWritePre <buffer> lua require'stylua-nvim'.format_file()]])
end,
settings = {
Lua = {
completion = { kewordSnippet = "Disable" },
diagnostics = {
enable = true,
globals = { "renoise", "use", "vim" },
},
runtime = {
version = "LuaJIT",
path = { "?.lua", "?/init.lua", "?/?.lua" },
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true),
maxPreload = 2000,
preloadFileSize = 1000,
checkThirdParty = false,
},
},
},
})
lspconfig.terraformls.setup({})
local yaml_is_k8s = function(bufnr)
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, 50, false) -- Stop after the first 50 lines
for _, l in pairs(lines) do
if string.find(l, "apiVersion") ~= nil then
return true
end
end
return false
end
lspconfig.cssls.setup({
cmd = { "vscode-css-languageserver", "--stdio" },
capabilities = capabilities,
})
lspconfig.cssmodules_ls.setup({})
lspconfig.html.setup({
cmd = { "vscode-html-languageserver", "--stdio" },
filetypes = { "html" },
init_options = {
configurationSection = { "html", "css", "javascript" },
embeddedLanguages = {
css = true,
javascript = true,
},
},
settings = {},
})
lspconfig.yamlls.setup({
settings = {
yaml = {
format = { enable = true, singleQuote = true },
schemaStore = { enable = true, url = "https://json.schemastore.org" },
schemas = {
-- ["https://json.schemastore.org/github-workflow"] = "*.github/workflows/*",
["https://json.schemastore.org/kustomization.json"] = "kustomization.yaml",
-- ["https://json.schemastore.org/ansible-role-2.9.json"] = "*/tasks/*.y*ml",
kubernetes = {
"clusterrolebinding.yaml",
"clusterrole-contour.yaml",
"clusterrole.yaml",
"configmap.yaml",
"cronjob.yaml",
"daemonset.yaml",
"deployment-*.yaml",
"deployment.yaml",
"*-deployment.yaml",
"hpa.yaml",
"ingress.yaml",
"job.yaml",
"namespace.yaml",
"pvc.yaml",
"rbac.yaml",
"rolebinding.yaml",
"role.yaml",
"sa.yaml",
"secret.yaml",
"serviceaccounts.yaml",
"service-account.yaml",
"serviceaccount.yaml",
"service-*.yaml",
"service.yaml",
"*-service.yaml",
"statefulset.yaml",
},
},
validate = true,
},
},
})
require("lspconfig").tsserver.setup({
root_dir = vim.loop.cwd,
})
-- npm install -g typescript typescript-language-server
-- require("lspconfig").tsserver.setup({
-- on_attach = function(client, bufnr)
-- client.resolved_capabilities.document_formatting = false
-- on_attach(client)
-- local ts_utils = require("nvim-lsp-ts-utils")
-- ts_utils.setup({
-- debug = false,
-- disable_commands = false,
-- enable_import_on_completion = false,
-- import_all_timeout = 5000, -- ms
-- -- eslint
-- eslint_enable_code_actions = true,
-- eslint_enable_disable_comments = true,
-- eslint_bin = "eslint_d",
-- eslint_config_fallback = nil,
-- eslint_enable_diagnostics = true,
-- -- formatting
-- enable_formatting = true,
-- formatter = "prettier",
-- formatter_config_fallback = nil,
-- -- parentheses completion
-- complete_parens = false,
-- signature_help_in_parens = false,
-- -- update imports on file move
-- update_imports_on_move = true,
-- require_confirmation_on_move = true,
-- watch_dir = nil,
-- })
-- ts_utils.setup_client(client)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<Leader>co", ":TSLspOrganize<CR>", { silent = true })
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "qq", ":TSLspFixCurrent<CR>", { silent = true })
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<Leader>cR", ":TSLspRenameFile<CR>", { silent = true })
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<Leader>ci", ":TSLspImportAll<CR>", { silent = true })
-- end,
-- })
--
end
return M

View file

@ -0,0 +1,50 @@
local M = {
"nvim-lualine/lualine.nvim",
dependencies = { "kyazdani42/nvim-web-devicons" },
event = "VeryLazy",
}
local function clock()
return os.date("%H:%M")
end
function M.config()
local lualine = require("lualine")
lualine.setup({
options = {
globalstatus = true,
theme = "onedark",
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
},
sections = {
lualine_c = {
{
"filename",
path = 1,
file_status = true,
},
{
function()
local navic = require("nvim-navic")
local ret = navic.get_location()
return ret:len() > 2000 and "navic error" or ret
end,
cond = function()
if package.loaded["nvim-navic"] then
local navic = require("nvim-navic")
return navic.is_available()
end
end,
color = { fg = "#ff8f00" },
},
},
lualine_x = { "filetype" },
lualine_y = { "location" },
lualine_z = { clock },
},
})
end
return M

View file

@ -0,0 +1,37 @@
local M = {
"chentoast/marks.nvim",
event = "VeryLazy",
}
function M.config()
local marks = require("marks")
marks.setup({
default_mappings = true,
-- which builtin marks to show. default {}
-- builtin_marks = { ".", "<", ">", "^" },
cyclic = true,
force_write_shada = false,
-- marks, and bookmarks.
-- can be either a table with all/none of the keys, or a single number, in which case
-- the priority applies to all marks.
-- default 10.
-- sign_priority = { lower=10, upper=15, builtin=8, bookmark=20 },
--
-- disables mark tracking for specific filetypes. default {}
excluded_filetypes = {},
-- marks.nvim allows you to configure up to 10 bookmark groups, each with its own
-- sign/virttext. Bookmarks can be used to group together positions and quickly move
-- across multiple buffers. default sign is '!@#$%^&*()' (from 0 to 9), and
-- default virt_text is "".
bookmark_1 = {
sign = "",
virt_text = "",
},
})
end
return M

View file

@ -0,0 +1,116 @@
return {
"tjdevries/colorbuddy.vim",
"wbthomason/packer.nvim",
"jose-elias-alvarez/nvim-lsp-ts-utils",
"jjo/vim-cue",
"ckipp01/stylua-nvim",
{
"m-demare/hlargs.nvim",
event = "VeryLazy",
enabled = true,
config = {
excluded_argnames = {
usages = {
lua = { "self", "use" },
},
},
},
},
{
"folke/trouble.nvim",
cmd = { "TroubleToggle", "Trouble" },
config = {
auto_open = false,
use_diagnostic_signs = true,
},
keys = {
{ "<leader>xx", "<cmd>TroubleToggle<cr>" },
{ "<leader>xw", "<cmd>TroubleToggle workspace_diagnostics<cr>" },
{ "<leader>xd", "<cmd>TroubleToggle document_diagnostics<cr>" },
{ "<leader>xl", "<cmd>TroubleToggle loclist<cr>" },
{ "<leader>xq", "<cmd>TroubleToggle quickfix<cr>" },
{ "gR", "<cmd>TroubleToggle lsp_references<cr>" },
},
},
{
"danymat/neogen",
keys = {
{
"<leader>cc",
function()
require("neogen").generate({})
end,
desc = "Neogen Comment",
},
},
opts = { snippet_engine = "luasnip" },
},
{
"smjonas/inc-rename.nvim",
cmd = "IncRename",
config = true,
keys = {
{ "<Leader>rn", ":IncRename " },
},
},
{
"SmiteshP/nvim-navic",
config = function()
vim.g.navic_silence = true
require("nvim-navic").setup({ separator = " ", highlight = true, depth_limit = 5 })
end,
},
{
"numToStr/Comment.nvim",
keys = {
{ "<C-_>", "<Plug>(comment_toggle_linewise_current)" },
{ "<C-_>", "<Plug>(comment_toggle_linewise_visual)", mode = "v" },
},
dependencies = {
"JoosepAlviste/nvim-ts-context-commentstring",
},
config = function()
require("Comment").setup({
pre_hook = require("ts_context_commentstring.integrations.comment_nvim").create_pre_hook(),
})
end,
},
{
"ray-x/go.nvim",
config = function()
require("go").setup({
comment_placeholder = "",
icons = { breakpoint = "🧘", currentpos = "🏃" },
dap_debug_gui = false,
})
vim.cmd("autocmd FileType go nmap <Leader>c :lua require('go.comment').gen()<cr>")
vim.cmd("autocmd BufWritePre *.go :silent! lua require('go.format').gofmt()")
vim.cmd("autocmd BufWritePre (InsertLeave?) <buffer> lua vim.lsp.buf.formatting_sync(nil,500)")
end,
},
{
"onsails/lspkind-nvim",
config = function()
require("lspkind").init({})
end,
},
-- {
-- url = "https://git.sr.ht/~whynothugo/lsp_lines.nvim",
-- config = function()
-- require("lsp_lines").setup()
-- vim.diagnostic.config({
-- virtual_text = false,
-- })
-- end,
-- },
}

View file

@ -0,0 +1,19 @@
local M = {
"folke/noice.nvim",
event = "VeryLazy",
dependencies = {
"MunifTanjim/nui.nvim",
},
}
function M.config()
require("noice").setup({
presets = {
inc_rename = true,
long_message_to_split = true,
lsp_doc_border = true,
},
})
end
return M

View file

@ -0,0 +1,40 @@
local M = {
"jose-elias-alvarez/null-ls.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
}
function M.config()
local null_ls = require("null-ls")
local builtins = require("null-ls.builtins")
null_ls.setup({
sources = {
builtins.formatting.black,
builtins.formatting.buf,
builtins.formatting.cue_fmt,
builtins.formatting.shfmt,
builtins.formatting.sqlfluff,
builtins.formatting.buildifier,
builtins.formatting.prettierd,
builtins.completion.spell,
builtins.code_actions.eslint_d,
builtins.diagnostics.buf.with({
args = { "lint", "--disable-symlinks", "--path", "$FILENAME" },
cwd = function()
local file_dir = vim.fn.expand("%:p:h") .. ";"
local buf_yaml = vim.fn.findfile("buf.yaml", file_dir)
if buf_yaml then
return vim.fn.fnamemodify(buf_yaml, ":h")
end
end,
}),
builtins.diagnostics.buildifier,
builtins.diagnostics.cue_fmt,
builtins.diagnostics.golangci_lint,
builtins.diagnostics.eslint_d,
},
debug = true,
})
end
return M

View file

@ -0,0 +1,18 @@
local M = {
"ojroques/nvim-osc52",
}
function M.config()
local osc52 = require("osc52")
osc52.setup({
max_length = 0, -- Maximum length of selection (0 for no limit)
silent = false, -- Disable message on successful copy
trim = false, -- Trim text before copy
})
vim.keymap.set("n", "<leader>c", require("osc52").copy_operator, { expr = true })
vim.keymap.set("n", "<leader>cc", "<leader>c_", { remap = true })
vim.keymap.set("x", "<leader>c", require("osc52").copy_visual)
end
return M

View file

@ -0,0 +1,110 @@
local function project_files()
require("telescope.builtin").find_files({
cwd = require("lspconfig.util").root_pattern(".git")(vim.fn.expand("%:p")),
})
end
local M = {
"nvim-telescope/telescope.nvim",
lazy = false,
dependencies = {
"nvim-lua/popup.nvim",
"nvim-lua/plenary.nvim",
"nvim-telescope/telescope-fzy-native.nvim",
"nvim-telescope/telescope-github.nvim",
"nvim-telescope/telescope-dap.nvim",
"nvim-telescope/telescope-ui-select.nvim",
},
}
function M.config()
local telescope = require("telescope")
local actions = require("telescope.actions")
local previewers = require("telescope.previewers")
vim.keymap.set("n", "<leader>b", '<cmd>lua require("telescope.builtin").buffers()<CR>')
vim.keymap.set("n", "<leader>f", '<cmd>lua require("telescope.builtin").oldfiles()<CR>')
vim.keymap.set("n", "<space>", '<cmd>lua require("telescope.builtin").oldfiles({cwd_only=true})<CR>')
vim.keymap.set("n", "<leader><space>", '<cmd>lua require("telescope.builtin").oldfiles()<CR>')
vim.keymap.set("n", "<leader>d", '<cmd>lua require("telescope.builtin").diagnostics({bufnr=0})<CR>')
vim.keymap.set("n", "<leader>e", '<cmd>lua require("telescope.builtin").git_files()<CR>')
vim.keymap.set("n", "<leader>g", '<cmd>lua require("telescope.builtin").git_status()<CR>')
vim.keymap.set("n", "<leader>a", '<cmd>lua require("telescope.builtin").lsp_code_actions()<CR>')
vim.keymap.set("n", "<leader>m", '<cmd>lua require("telescope.builtin").marks()<CR>')
vim.keymap.set("n", "<leader>s", '<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>')
vim.keymap.set("n", "<leader>t", '<cmd>lua require("telescope.builtin").treesitter()<CR>')
vim.keymap.set("n", "<leader>/", '<cmd>lua require("telescope.builtin").live_grep()<CR>')
vim.keymap.set("n", "<leader>.", '<cmd>lua require("telescope.builtin").file_browser()<CR>')
vim.keymap.set("n", "<leader>p", '<cmd>lua require("telescope.builtin").registers()<CR>')
vim.keymap.set("n", "ga", "<cmd>lua vim.lsp.buf.code_action()<CR>")
vim.keymap.set("n", "gr", '<cmd>lua require("telescope.builtin").lsp_references()<CR>')
vim.keymap.set("n", "gd", '<cmd>lua require("telescope.builtin").lsp_definitions()<CR>')
vim.keymap.set("n", "g/", '<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>')
vim.keymap.set(
"n",
"g?",
'<cmd>lua require("telescope.builtin").lsp_workspace_symbols({query=(vim.bo.filetype == "go" and "\'" or "")})<CR>'
)
vim.keymap.set("n", "ge", '<cmd>lua require("telescope.builtin").lsp_document_diagnostics()<CR>')
vim.keymap.set("n", "Db", '<cmd>lua require("telescope").extensions.dap.list_breakpoints()<CR>')
vim.keymap.set("n", "Dcc", '<cmd>lua require("telescope").extensions.dap.commands()<CR>')
vim.keymap.set("n", "Df", '<cmd>lua require("telescope").extensions.dap.frames()<CR>')
vim.keymap.set("n", "Dv", '<cmd>lua require("telescope").extensions.dap.variables()<CR>')
-- Setup
telescope.setup({
defaults = {
layout_strategy = "flex",
-- layout_defaults = {flip_columns = 160},
layout_config = {
preview_cutoff = 10,
prompt_position = "bottom",
mirror = true,
},
mappings = {
i = {
["<CR>"] = actions.select_default + actions.center,
["<esc>"] = actions.close,
["<tab>"] = actions.add_selection,
},
},
color_devicons = true,
file_previewer = previewers.vim_buffer_cat.new,
grep_previewer = previewers.vim_buffer_vimgrep.new,
qflist_previewer = previewers.vim_buffer_qflist.new,
},
extensions = {
["ui-select"] = {
require("telescope.themes").get_dropdown({
-- even more opts
}),
},
},
})
local layout_strategies = require("telescope.pickers.layout_strategies")
local config = require("telescope.config")
layout_strategies.flex = function(self, max_columns, max_lines)
local layout_config = self.layout_config or {}
local flip_columns = layout_config.flip_columns or 160 -- Here's why.
local flip_lines = layout_config.flip_lines or 20
if max_columns < flip_columns and max_lines > flip_lines then
self.layout_config = (config.values.layout_defaults or {})["vertical"]
return layout_strategies.vertical(self, max_columns, max_lines)
else
self.layout_config = (config.values.layout_defaults or {})["horizontal"]
return layout_strategies.horizontal(self, max_columns, max_lines)
end
end
-- Extensions
telescope.load_extension("dap")
telescope.load_extension("fzy_native")
telescope.load_extension("gh")
telescope.load_extension("ui-select")
end
return M

View file

@ -0,0 +1,124 @@
return {
{ "nvim-treesitter/playground", cmd = "TSPlaygroundToggle" },
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
event = "BufReadPost",
dependencies = {
"nvim-treesitter/nvim-treesitter-textobjects",
"windwp/nvim-ts-autotag",
},
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = {
"bash",
"c",
"cmake",
"cpp",
"css",
"diff",
"dockerfile",
"gdscript",
"git_rebase",
"gitcommit",
"gitignore",
"go",
"gomod",
"graphql",
"help",
"hcl",
"html",
"http",
"java",
"javascript",
"jsdoc",
"json",
"jsonc",
"kotlin",
"latex",
"lua",
"make",
"markdown",
"markdown_inline",
"meson",
"ninja",
"php",
"proto",
"python",
"query",
"regex",
"rego",
"rust",
"scss",
"sql",
"svelte",
"teal",
"toml",
"tsx",
"typescript",
"vhs",
"vim",
"vue",
"wgsl",
"yaml",
"zig",
},
highlight = {
enable = true,
use_languagetree = true,
},
indent = {
enable = false,
},
context_commentstring = { enable = true, enable_autocmd = false },
playground = {
enable = true,
disable = {},
updatetime = 25,
persist_queries = false,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "ss",
node_incremental = "sq",
scope_incremental = "sd",
node_decremental = "sa",
},
},
query_linter = {
enable = true,
use_virtual_text = true,
lint_events = { "BufWrite", "CursorHold" },
},
textobjects = {
move = {
enable = true,
goto_next_start = {
["]]"] = "@function.outer",
["]m"] = "@class.outer",
},
goto_next_end = {
["]["] = "@function.outer",
["]M"] = "@class.outer",
},
goto_previous_start = {
["[["] = "@function.outer",
["[m"] = "@class.outer",
},
goto_previous_end = {
["[]"] = "@function.outer",
["[M"] = "@class.outer",
},
},
},
--- nvim-ts-autotag ---
autotag = {
enable = true,
filetypes = { "html", "javascriptreact", "xml" },
},
})
end,
},
}

10
.config/rg/rg.conf Normal file
View file

@ -0,0 +1,10 @@
--glob=!/.git/
--glob=!/.terraform/
--pretty
--colors=column:fg:100,181,246
--colors=line:fg:100,181,246
--colors=path:fg:26,35,126
--colors=path:style:bold
--colors=match:style:nobold
--colors=match:bg:255,235,59
--colors=match:fg:0,0,0

View file

@ -0,0 +1,22 @@
[ui]
username =Daniel Lundin <daniel@arity.se>
[alias]
sw = switch
switch = !sl sl -M -T ':\033[31m{node|short} \033[1;33m{bookmarks}{if(bookmarks, " ")}{remotenames} {if(github_pull_request_number, "\033[1;37;41m PR #{github_pull_request_number} ")}\033[0;3;32m {date|age} \033[35;1;3mby {author|user} - \033[0;34;3m{desc|firstline}\033[0m' | sed -E -e '/31m[0-9abcdef]{12}/!d' -e 's/.+ ://' | fzf-tmux -p 90%,50% -y 0 --ansi --color=light | sed "s/ .*//" | xargs -r -n1 sl go && sl log -r . -T status
l = ll
ll = log -G -T '\033[31m{node|short} \033[3;32m{date|age} \033[35;1;3mby {author|person}\n \033[0;34;3m{desc|firstline}\033[0m\n\n'
[pager]
pager = delta --hunk-header-style "line-number file" --line-numbers --max-line-distance 0.9 --syntax-theme GitHub --inspect-raw-lines=false
[color]
sl.public = color70 bold
sl.draft = color208 bold
sl.current = color99 bold
sl.diff = red bold
[committemplate]
emptymsg = ""

61
.config/starship.toml Normal file
View file

@ -0,0 +1,61 @@
add_newline = false
format = """\
$hostname\
$directory\
$git_branch\
$git_commit\
$git_state\
$git_status\
${custom.sl_status}\
($character)\
"""
right_format = """\
"""
[custom.sl_status]
command = '''~/bin/starship-sl-status'''
when = true
style = "italic fg:#79AE6F"
format = '[(🌱 $output )]($style)'
[character]
success_symbol = "%"
error_symbol = "[%](bold red)"
[line_break]
disabled = true
[directory]
fish_style_pwd_dir_length = 1
truncation_length = 1
truncate_to_repo = false
style = "italic bold"
[git_branch]
format = "[$symbol$branch]($style)"
style = "fg:#559955"
symbol = " "
truncation_length = 16
truncation_symbol = ""
[git_commit]
format = "[ $hash$tag]($style) "
style = "fg:#559955"
[git_state]
style = ""
[git_status]
format = '([\[$all_status$ahead_behind\]]($style))'
style = "dimmed"
[hostname]
ssh_only = false
format = "[$hostname](bold italic):"
disabled = false
[kubernetes]
disabled = false
style = ""

View file

@ -0,0 +1,9 @@
[Unit]
Description=dbus proxy for desktop notifications
[Service]
ExecStart=/usr/bin/xdg-dbus-proxy "$DBUS_SESSION_BUS_ADDRESS" %t/bus-notification --filter --talk=org.freedesktop.Notifications
Restart=always
[Install]
WantedBy=default.target

View file

@ -0,0 +1,10 @@
[Unit]
Description=Run tmux server
[Service]
Restart=always
StartLimitIntervalSec=0
ExecStart=/usr/bin/tmux -D -u
[Install]
WantedBy=default.target

View file

@ -0,0 +1,3 @@
include "linux-with-two-alt-keys"
keycode 58 = Control

158
.config/wezterm/wezterm.lua Normal file
View file

@ -0,0 +1,158 @@
local wezterm = require("wezterm")
function font_with_fallback(name, params)
local names = { name, "Noto Color Emoji", "Iosevka Nerd Font Mono" }
return wezterm.font_with_fallback(names, params)
end
local themeShelmanDark = {
colors = {
foreground = "#ded9ce",
background = "#171a23",
cursor_bg = "#FB8C00",
cursor_border = "#FB8C00",
split = "#444444",
ansi = { "#000000", "#ff605a", "#b1e869", "#ead89c", "#5da9f6", "#e86aff", "#82fff6", "#ded9ce" },
brights = { "#313131", "#f58b7f", "#dcf88f", "#eee5b2", "#a5c7ff", "#ddaaff", "#b6fff9", "#fefffe" },
tab_bar = {
background = "#000000",
active_tab = { bg_color = "#171a23", fg_color = "#c0b070", intensity = "Normal" },
inactive_tab = { bg_color = "#000000", fg_color = "#c0c0c0", intensity = "Half" },
inactive_tab_hover = { bg_color = "#333333", fg_color = "#909090", italic = true },
},
},
tab_bar_style = {
active_tab_left = wezterm.format({
{ Background = { Color = "#171a23" } },
{ Foreground = { Color = "#000000" } },
{ Text = " " },
}),
active_tab_right = wezterm.format({
{ Background = { Color = "#171a23" } },
{ Foreground = { Color = "#000000" } },
{ Text = " " },
}),
inactive_tab_left = wezterm.format({
{ Background = { Color = "#000000" } },
{ Foreground = { Color = "#171a23" } },
{ Text = " " },
}),
inactive_tab_right = wezterm.format({
{ Background = { Color = "#000000" } },
{ Foreground = { Color = "#171a23" } },
{ Text = "" },
}),
inactive_tab_hover_left = wezterm.format({
{ Background = { Color = "#333333" } },
{ Foreground = { Color = "#ffffff" } },
{ Text = " " },
}),
inactive_tab_hover_right = wezterm.format({
{ Background = { Color = "#333333" } },
{ Foreground = { Color = "#ffffff" } },
{ Text = " " },
}),
},
}
local themeShelmanLight = {
colors = {
foreground = "#000000",
background = "#fcfcfc",
cursor_bg = "#EA526F",
cursor_fg = "#ffffff",
cursor_border = "#cc0000",
split = "#444444",
selection_bg = "#FFCA28",
ansi = { "#212121", "#b7141e", "#457b23", "#f5971d", "#134eb2", "#550087", "#0e707c", "#eeeeee" },
brights = { "#424242", "#e83a3f", "#7aba39", "#fee92e", "#53a4f3", "#a94dbb", "#26bad1", "#d8d8d8" },
},
}
return {
colors = themeShelmanLight.colors,
font = font_with_fallback("Iosevka Shelman SS09", { weight = "Regular" }),
font_rules = {
{
italic = false,
intensity = "Half",
font = font_with_fallback("Iosevka Shelman SS09", { weight = "Thin" }),
},
{
italic = true,
intensity = "Normal",
font = font_with_fallback("Iosevka Shelman Curly Slab", { weight = "Light", italic = true }),
},
{
italic = true,
intensity = "Bold",
font = font_with_fallback("Iosevka Shelman SS15", { weight = "ExtraLight", italic = true }),
},
{
intensity = "Bold",
font = font_with_fallback("Iosevka Shelman SS09", { weight = "DemiBold" }),
},
},
freetype_load_target = "Light",
freetype_render_target = "HorizontalLcd",
--freetype_load_flags = "NO_HINTING",
--custom_block_glyphs = false,
warn_about_missing_glyphs = false,
bold_brightens_ansi_colors = false,
allow_square_glyphs_to_overflow_width = "Always",
font_size = 10.5,
line_height = 1.0,
cell_width = 0.9,
initial_cols = 128,
initial_rows = 45,
use_resize_increments = false,
window_background_opacity = 0.93,
window_padding = {
left = "0",
right = "0",
top = "0",
bottom = "0",
},
window_decorations = "RESIZE",
window_frame = {
border_left_width = "2px",
border_right_width = "2px",
border_bottom_height = "2px",
border_top_height = "2px",
border_left_color = "#cccccc",
border_right_color = "#cccccc",
border_bottom_color = "#cccccc",
border_top_color = "#cccccc",
},
default_cursor_style = "SteadyBlock",
cursor_thickness = "3px",
cursor_blink_rate = 300,
enable_wayland = true,
enable_tab_bar = false,
tab_bar_at_bottom = true,
show_tab_index_in_tab_bar = true,
enable_scroll_bar = false,
scrollback_lines = 5000,
alternate_buffer_wheel_scroll_speed = 2,
check_for_updates = false,
status_update_interval = 100,
audible_bell = "Disabled",
term = "wezterm",
disable_default_key_bindings = true,
keys = {
{ key = "c", mods = "ALT|SHIFT", action = wezterm.action({ CopyTo = "ClipboardAndPrimarySelection" }) },
{ key = "v", mods = "ALT|SHIFT", action = "Paste" },
{ key = "0", mods = "CTRL", action = "ResetFontSize" },
{ key = "-", mods = "CTRL", action = "DecreaseFontSize" },
{ key = "=", mods = "CTRL", action = "IncreaseFontSize" },
{ key = "Enter", mods = "ALT", action = "ToggleFullScreen" },
},
}

2
.envrc
View file

@ -1,2 +0,0 @@
# shellcheck shell=bash
use flake

123
.gitconfig Normal file
View file

@ -0,0 +1,123 @@
[core]
excludesfile = "~/.gitignore"
pager = delta --line-numbers --max-line-distance 0.9
compression = 0
looseCompression = 0
[user]
useConfigOnly = true
[column]
ui = auto
[push]
default = tracking
[branch "main"]
rebase = true
[branch "master"]
rebase = true
[alias]
b = branch -va
cl = clone --filter=blob:none
d = diff --stat -p -C
ds = diff --staged --stat -p -C
dt = difftool
patch = !git --no-pager diff --no-color
co = checkout
st = status -sb
pullr = pull --rebase
sl = branchless smartlog
sync = branchless sync
sw = branchless switch
gerrit-new = !git fetch origin main && git checkout --detach origin/main
gerrit-push = !git push origin HEAD:refs/for/main
gerrit-push-wip = !git push origin HEAD:refs/for/main%wip
gerrit-push-ready = !git push origin HEAD:refs/for/main%ready
gerrit-replace = !git commit --amend -a && git push origin HEAD:refs/for/main
gerrit-config = !git fetch origin refs/meta/config:refs/remotes/origin/meta/config && git checkout FETCH_HEAD
gerrit-config-push = !git push origin HEAD:refs/meta/config
gp = gerrit-push
gpw = gerrit-push-wip
gpr = gerrit-push-ready
ll = log --graph --date=relative --topo-order --pretty='format:%C(yellow)%h%C(yellow)%d %Cblue%ar %Cgreenby %an%Creset -- %s'
lla = log --graph --date=relative --topo-order --pretty='format:%Cgreen%h %Cblue%ar %Credby %an%Creset -- %s' --all
guilt = "!f(){ git log --pretty='format:%an <%ae>' $@ | sort | uniq -c | sort -rn; }; f"
serve = daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/
identity = "! git config user.name \"$(git config user.$1.name)\"; git config user.email \"$(git config user.$1.email)\"; git config user.signingkey \"$(git config user.$1.signingkey)\"; :"
[color]
ui = auto
branch = auto
diff = auto
status = auto
[apply]
whitespace = nowarn
[pack]
threads = 0
[blame]
date = relative
[delta]
syntax-theme = GitHub
hunk-header-style = line-number syntax
[hub]
protocol = git
[http]
cookiefile = /home/dln/.gitcookies
[interactive]
diffFilter = delta --color-only --features=interactive
[credential]
helper = store
[commit]
gpgsign = false
[user]
name = Daniel Lundin
email = daniel@arity.se
[init]
defaultBranch = main
; [url "git@github.com:"]
; insteadOf = https://github.com/
[lfs]
concurrenttransfers = 32
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[diff]
tool = difft
# external = difft
[difftool]
prompt = false
[difftool "difft"]
cmd = difft --display inline "$LOCAL" "$REMOTE"
[scalar]
repo = /tmp/k2/src
[maintenance]
repo = /tmp/k2/src
[fetch]
showForcedUpdates = true

15
.gitignore vendored
View file

@ -1 +1,14 @@
/result *~
*.a
*.class
/.idea
*.iml
*.ipr
*.iwr
*.iws
*.la
*.o
*.pyc
*.so
*.swp

4
.gnupg/gpg-agent.conf Normal file
View file

@ -0,0 +1,4 @@
enable-ssh-support
default-cache-ttl 3600
max-cache-ttl 3600
extra-socket /run/user/1000/gnupg/S.gpg-agent.extra

2
.gnupg/gpg.conf Normal file
View file

@ -0,0 +1,2 @@
#use-agent
keyid-format LONG

11
.inputrc Normal file
View file

@ -0,0 +1,11 @@
set meta-flag on
set convert-meta off
set output-meta on
set completion-ignore-case on
set visible-stats on
set show-all-if-ambiguous on
set completion-query-items 150
#"\C-p": history-search-backward
#"\C-n": history-search-forward

View file

@ -0,0 +1,13 @@
[Desktop Entry]
Version=1.0
Name=Firefox (Arity)
GenericName=Web Browser
Comment=Browse the Web
Exec=firefox %u -P Arity --name firefox-arity
Icon=firefox
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=firefox-arity
Categories=Network;WebBrowser;
Keywords=web;browser;internet;

View file

@ -0,0 +1,13 @@
[Desktop Entry]
Version=1.0
Name=Firefox (Work)
GenericName=Web Browser
Comment=Browse the Web
Exec=firefox %u -P Work --new-instance --name firefox-work
Icon=firefox
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=firefox-work
Categories=Network;WebBrowser;
Keywords=web;browser;internet;

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Version=1.0
Name=Client Chrome
StartupWMClass=Google-chrome-beta-client
Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-client --class=Google-chrome-beta-client
StartupNotify=true
Terminal=false
Icon=google-chrome-beta
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Version=1.0
Name=Private Chrome
StartupWMClass=Google-chrome-beta-private
Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-private --class=Google-chrome-beta-private
StartupNotify=true
Terminal=false
Icon=google-chrome-beta
Type=Application
Categories=Netprivate;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Version=1.0
Name=Work Chrome
StartupWMClass=Google-chrome-beta-work
Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-work --class=Google-chrome-beta-work
StartupNotify=true
Terminal=false
Icon=google-chrome-beta
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=Google Meet
StartupWMClass=meet.google.com
Exec=/usr/bin/google-chrome-stable --profile-directory='Profile 1' --app=https://meet.google.com
Terminal=false
Icon=camera-video
Type=Application
Categories=Network;Office

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=plex
StartupWMClass=plex.aarn.shelman.io
Exec=/usr/bin/google-chrome-stable --profile-directory='Profile 2' --app=https://plex.home:32400/web/index.html
Terminal=false
Icon=google-chrome
Type=Application
Categories=Audio;

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Music Player
Icon=spotify-client
TryExec=spotify
Exec=spotify --force-device-scale-factor=2 %U
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;Player;AudioVideo;
StartupWMClass=spotify

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Name=wezterm-dln-dev-secondary
GenericName=wezterm-dln-dev-secondary
StartupWMClass=org.wezfurlong.wezterm
Type=Application
TryExec=/usr/bin/wezterm
Icon=org.wezfurlong.wezterm
Terminal=false
Categories=System;TerminalEmulator;
Exec=/usr/bin/wezterm --config 'default_prog={"ssh", "-q", "dln-dev", "--", "tmux", "-u", "new-session", "-As1", "-t0"}' --config font_size=9 --config=window_background_opacity=0.4 start --class=wezterm-dln-dev-secondary

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Name=wezterm-dln-dev
GenericName=wezterm-dln-dev
StartupWMClass=org.wezfurlong.wezterm
Type=Application
TryExec=/usr/bin/wezterm
Icon=org.wezfurlong.wezterm
Terminal=false
Categories=System;TerminalEmulator;
Exec=/usr/bin/wezterm --config 'default_prog={"ssh", "-q", "dln-dev", "--", "tmux", "-u", "new", "-As0"}' start --class=wezterm-dln-dev
#Exec=/usr/bin/wezterm --config 'default_prog={"ssh", "-q", "dln-dev"}' start --class=wezterm-dln-dev

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Name=wezterm-local
GenericName=wezterm-local
StartupWMClass=wezterm-local
Type=Application
TryExec=/usr/bin/wezterm
Icon=org.wezfurlong.wezterm
Terminal=false
Categories=System;TerminalEmulator;
Exec=/usr/bin/wezterm start --class=wezterm-local

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=YouTube Music (provar)
StartupWMClass=music.youtube.com
Exec=/usr/bin/google-chrome-stable --user-data-dir=$HOME/.config/google-chrome --profile-directory='Profile 2' --app=https://music.youtube.com --class=music.youtube.com
Terminal=false
Icon=google-chrome
Type=Application
Categories=Audio;

31
.ssh/config Normal file
View file

@ -0,0 +1,31 @@
ForwardAgent yes
ServerAliveInterval 15
ServerAliveCountMax 3
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
ControlPersist 1200
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
AddressFamily inet
RequestTty yes
PreferredAuthentications=publickey
Host gitlab.com
IdentityAgent /dev/null
PKCS11Provider /usr/lib/pkcs11/libtpm2_pkcs11.so
Host 10.1.100.16
Host dln-dev
Hostname 10.1.100.16
IdentityAgent ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh
ForwardAgent yes
ForwardX11 no
ExitOnForwardFailure yes
Compression yes
LocalForward 127.0.0.1:3000 127.0.0.1:3000
LocalForward 127.0.0.1:3011 127.0.0.1:3011
LocalForward 127.0.0.1:8000 127.0.0.1:8000
LocalForward 127.0.0.1:8080 127.0.0.1:8080
# RemoteForward ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.extra
RemoteForward ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh
# RemoteForward ${XDG_RUNTIME_DIR}/gnupg/S.scdaemon ${XDG_RUNTIME_DIR}/gnupg/S.scdaemon
RemoteForward ${XDG_RUNTIME_DIR}/bus-notification ${XDG_RUNTIME_DIR}/bus-notification

3
.ssh/rc Executable file
View file

@ -0,0 +1,3 @@
if [[ -S "$SSH_AUTH_SOCK" && ! -h "$SSH_AUTH_SOCK" ]]; then
ln -sf "$SSH_AUTH_SOCK" $HOME/.ssh/ssh_auth_sock;
fi

84
.tmux.conf Normal file
View file

@ -0,0 +1,84 @@
set -g prefix ^o
set -g base-index 1
set -g display-panes-time 3000
set -s escape-time 10
set -g status on
set -g status-interval 30
set -g focus-events on
set -g allow-passthrough on
setw -g alternate-screen on
setw -g aggressive-resize on
setw -g automatic-rename off
setw -g mode-keys vi
set-option -g mouse on
# clipboard
set -g set-clipboard on
bind-key ] paste-buffer -p
set -g update-environment "BUILDCOMMAND GOPACKAGESDRIVER XAUTHORITY DISPLAY WINDOWID SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION"
set -g default-command zsh
set -g history-limit 10000
set -g default-terminal "wezterm"
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # Underline color
# Key bindings
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
bind -n M-1 select-window -t nvim
bind -n M-2 select-window -t 2
bind -n M-3 select-window -t 3
bind -n M-4 select-window -t 4
bind -n M-5 select-window -t 5
bind -n M-6 select-window -t 6
bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9
bind -n M-0 select-window -t 10
bind -n M-m send-keys -t 9 q C-u "clear; tmux clear-history -t 9" C-m C-p C-p C-p C-m
bind C-o send-keys C-o
bind r source-file ~/.tmux.conf
bind -n C-Right next-window
bind -n C-Left previous-window
bind C-s set-option -g status
bind K confirm kill-server
bind C-k clear-history
bind -n C-l send-keys C-l \; clear-history
bind-key -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 1 scroll-up
bind-key -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 1 scroll-down
bind-key / copy-mode \; send-key ?
bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer
bind-key -n C-\\ copy-mode \; send -X search-backward " % "\; send -X search-again
bind -n M-g display-popup -S 'bg=#F1F8E9,fg=#689F38' -s 'bg=#F1F8E9' -h '90%' -w '90%' -b rounded -d '#{pane_current_path}' -E "gitui"
bind -n M-e display-popup -S 'bg=#E3F2FD,fg=#0288D1' -s 'bg=#E3F2FD' -h '40%' -w '90%' -y 0 -b rounded -d '#{pane_current_path}' -e FZF=fzf -E "~/bin/tmux-edit-helper"
bind -n M-m display-popup -S 'bg=#FFF8E1,fg=#FF6F00' -s 'bg=#FFF8E1' -h '90%' -w '90%' -b rounded -d '#{pane_current_path}' -E "~/bin/tmux-build-helper"
setw -g window-status-format ""
setw -g window-status-current-format ""
setw -g window-status-separator ""
set -g status-style "fg=#cc0000,dotted-underscore,italics"
set -g status-position top
set -g status-left-length 0
set -g status-right-length 0
set -g status-left '[#I] #{pane_current_path}'
set -g status-right '%F | %R'
set -g status off
set -g set-titles on
set -g set-titles-string "#H - #T"
new -s0 -n 1 nvim --listen $XDG_RUNTIME_DIR/nvim.sock
new-window -n 2
new-window -n 3
new-window -n 4
new-window -n 5
new-window -n 6
new-window -n 7
new-window -n 8
new-window -n 9
new-window -n 0
# vim:set ft=tmux:

2
.vault Normal file
View file

@ -0,0 +1,2 @@
#token_helper = "/home/dln/bin/vault-token-helper"

247
.zshrc Normal file
View file

@ -0,0 +1,247 @@
if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then
print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit"
command git clone --depth=1 https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \
print -P "%F{33} %F{34}Installation successful.%f%b" || \
print -P "%F{160} The clone has failed.%f%b"
fi
source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
zi ice wait lucid
zi load zsh-users/zsh-completions
zi ice wait lucid
zi load zsh-users/zsh-syntax-highlighting
zi ice wait lucid
zi load zsh-users/zsh-history-substring-search
## History
HISTSIZE=50000
SAVEHIST=50000
HISTFILE=~/.zsh_history
setopt append_history
setopt extended_history
setopt hist_expire_dups_first
setopt hist_fcntl_lock
setopt hist_ignore_all_dups
setopt hist_ignore_space
setopt HIST_IGNORE_SPACE
setopt hist_lex_words
setopt hist_reduce_blanks
setopt hist_save_no_dups
setopt hist_subst_pattern
setopt hist_verify
setopt share_history
export HISTORY_IGNORE="(ls *|cd *|rm *|pwd|reboot|exit|e *|*AWS*|*SECRET*|*PASSWORD*|*TOKEN*|*API*|*KEY*|*PASS*|*SECRETS*|*SECRET_KEY*|*SECRET_TOKEN*|*SECRET_KEY_BASE*|*SECRET_TOKEN_BASE*)"
## zsh settings
setopt pipe_fail
setopt auto_pushd
setopt no_beep
setopt no_rm_star_silent
setopt extended_glob
setopt ksh_glob
setopt null_glob
## Autosuggest
# ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#D7CCC8,italic"
# ZSH_AUTOSUGGEST_USE_ASYNC=1
# ZSH_AUTOSUGGEST_STRATEGY=(history completion)
export PATH=$HOME/bin:$PATH
redraw-prompt() {
local precmd
for precmd in $precmd_functions; do
$precmd
done
zle reset-prompt
}
zle -N redraw-prompt
_jump() {
_dir=$(fre --sorted | fzf-tmux --no-sort -p 90%,40% -y 0)
[ -n "$_dir" ] && pushd $_dir >>/dev/null
zle && zle redraw-prompt
}
zle -N _jump
fre_chpwd() {
fre --add "$(pwd)"
}
typeset -gaU chpwd_functions
chpwd_functions+=fre_chpwd
_cwd_gitroot() {
_gitroot=$(git rev-parse --show-toplevel 2>/dev/null || sl root 2>/dev/null || pwd)
_dir=$((echo "$_gitroot" && fd -td . "$_gitroot") | fzf-tmux -p 90%,40% -y 0)
[ -n "$_dir" ] && cd $_dir
zle && zle redraw-prompt
}
zle -N _cwd_gitroot
## Keybindings
bindkey -e
bindkey '^[[A' history-beginning-search-backward
bindkey '^[[B' history-beginning-search-forward
bindkey '^P' history-beginning-search-backward
bindkey '^N' history-beginning-search-forward
bindkey '^g' _jump
bindkey '^_' _cwd_gitroot
## Gnupg / gpg / ssh / yubikey
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
## Pager
export LESS="--mouse --wheel-lines=1 -nRXF"
## Clipboard OSC 52
function clip { echo -en "\x1b]52;c;$(base64 -w0)\x07" }
## Aliases
alias c='cut -c-${COLUMNS}'
alias e='tmux-edit-helper'
alias dotgit='git --work-tree $HOME --git-dir $HOME/.dot_git'
alias l=bat
alias lw='bat --wrap=never'
alias ls=exa
alias tail='tail -n $LINES'
alias timestamp='TZ=Z date "+%Y%m%dT%H%M%SZ"'
alias tree='exa --tree'
alias v=vgrep
alias ve='env EDITOR= vgrep -s'
alias xc=clip
alias w="history -1 | sed -e 's/[0-9]* //' | xargs viddy -n1"
## ripgrep
export RIPGREP_CONFIG_PATH=${HOME}/.config/rg/rg.conf
# "auto paging"
rg() {
/usr/bin/rg -p "$@" | bat
}
fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(fix_cursor)
## Prompt
eval "$(starship init zsh)"
## vim
export EDITOR=nvim
## fzf
export FZF_TMUX=1
export FZF_COMPLETION_TRIGGER=";"
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
. /usr/share/fzf/completion.zsh
. /usr/share/fzf/key-bindings.zsh
## direnv
eval "$(direnv hook zsh)"
## pyenv
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
export PATH="/home/dln/.pyenv/shims:${PATH}"
export PYENV_SHELL=zsh
# command pyenv rehash 2>/dev/null # this is slow
pyenv() {
local command
command="${1:-}"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
activate|deactivate|rehash|shell)
eval "$(pyenv "sh-$command" "$@")"
;;
*)
command pyenv "$command" "$@"
;;
esac
}
## eksctl
if [ ! -f "${fpath[1]}/_eksctl" ]; then
command -v eksctl >/dev/null 2>&1 && eksctl completion zsh > "${fpath[1]}/_eksctl"
fi
## Kubernetes
if [ ! -f "${fpath[1]}/_kubectl" ]; then
command -v kubectl >/dev/null 2>&1 && kubectl completion zsh > "${fpath[1]}/_kubectl"
fi
export PATH=$HOME/.krew/bin:$PATH
## bazel
if [ ! -f "${fpath[1]}/_bazel" ]; then
curl -sLo "${fpath[1]}/_bazel" https://raw.githubusercontent.com/bazelbuild/bazel/master/scripts/zsh_completion/_bazel
fi
## sapling
if [ ! -f "${fpath[1]}/_sl" ]; then
# See: https://github.com/facebook/sapling/pull/369
curl -sLo "${fpath[1]}/_sl" https://github.com/facebook/sapling/raw/d6157db1ebc0868cf70805756e32541bd681bac2/eden/scm/contrib/zsh_completion_sl
fi
## Tekton cli
if [ ! -f "${fpath[1]}/_tkn" ]; then
command -v tkn >/dev/null 2>&1 && tkn completion zsh > "${fpath[1]}/_tkn"
fi
## kapp
if [ ! -f "${fpath[1]}/_kapp" ]; then
command -v kapp >/dev/null 2>&1 && kapp completion zsh --tty=false > "${fpath[1]}/_kapp"
fi
## kn
if [ ! -f "${fpath[1]}/_kn" ]; then
command -v kn >/dev/null 2>&1 && kn completion zsh > "${fpath[1]}/_kn"
fi
## talos cli
if [ ! -f "${fpath[1]}/_talosctl" ]; then
command -v talosctl >/dev/null 2>&1 && talosctl completion zsh > "${fpath[1]}/_talosctl"
fi
## Google Cloud
[ -f /opt/google-cloud-sdk/completion.zsh.inc ] && source /opt/google-cloud-sdk/completion.zsh.inc
## Golang
export PATH=$HOME/go/bin:$PATH
GOPROXY=https://athens.aarn.shelman.io
## Ansible
export ANSIBLE_NOCOWS=1
## Docker
export DOCKER_BUILDKIT=1
autoload -Uz compinit
compinit
autoload -Uz compdef
PROG=tea _CLI_ZSH_AUTOCOMPLETE_HACK=1 source "/home/dln/.config/tea/autocomplete.zsh"
## AWS
autoload -U +X bashcompinit && bashcompinit
complete -o nospace -C /usr/bin/mcli mcli
complete -C '/usr/bin/aws_completer' aws
# The next line updates PATH for the Google Cloud SDK.
if [ -f '/home/dln/google-cloud-sdk/path.zsh.inc' ]; then . '/home/dln/google-cloud-sdk/path.zsh.inc'; fi
# The next line enables shell command completion for gcloud.
if [ -f '/home/dln/google-cloud-sdk/completion.zsh.inc' ]; then . '/home/dln/google-cloud-sdk/completion.zsh.inc'; fi

View file

@ -1,3 +0,0 @@
# Configuration and various sundries
IT in a box.

364
bin/git-wtf Executable file
View file

@ -0,0 +1,364 @@
#!/usr/bin/env ruby
HELP = <<EOS
git-wtf displays the state of your repository in a readable, easy-to-scan
format. It's useful for getting a summary of how a branch relates to a remote
server, and for wrangling many topic branches.
git-wtf can show you:
- How a branch relates to the remote repo, if it's a tracking branch.
- How a branch relates to integration branches, if it's a feature branch.
- How a branch relates to the feature branches, if it's an integration
branch.
git-wtf is best used before a git push, or between a git fetch and a git
merge. Be sure to set color.ui to auto or yes for maximum viewing pleasure.
EOS
KEY = <<EOS
KEY:
() branch only exists locally
{} branch only exists on a remote repo
[] branch exists locally and remotely
x merge occurs both locally and remotely
~ merge occurs only locally
(space) branch isn't merged in
(It's possible for merges to occur remotely and not locally, of course, but
that's a less common case and git-wtf currently doesn't display anything
special for it.)
EOS
USAGE = <<EOS
Usage: git wtf [branch+] [options]
If [branch] is not specified, git-wtf will use the current branch. The possible
[options] are:
-l, --long include author info and date for each commit
-a, --all show all branches across all remote repos, not just
those from origin
-A, --all-commits show all commits, not just the first 5
-s, --short don't show commits
-k, --key show key
-r, --relations show relation to features / integration branches
--dump-config print out current configuration and exit
git-wtf uses some heuristics to determine which branches are integration
branches, and which are feature branches. (Specifically, it assumes the
integration branches are named "master", "next" and "edge".) If it guesses
incorrectly, you will have to create a .git-wtfrc file.
To start building a configuration file, run "git-wtf --dump-config >
.git-wtfrc" and edit it. The config file is a YAML file that specifies the
integration branches, any branches to ignore, and the max number of commits to
display when --all-commits isn't used. git-wtf will look for a .git-wtfrc file
starting in the current directory, and recursively up to the root.
IMPORTANT NOTE: all local branches referenced in .git-wtfrc must be prefixed
with heads/, e.g. "heads/master". Remote branches must be of the form
remotes/<remote>/<branch>.
EOS
COPYRIGHT = <<EOS
git-wtf Copyright 2008--2009 William Morgan <wmorgan at the masanjin dot nets>.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You can find the GNU General Public License at: http://www.gnu.org/licenses/
EOS
require 'yaml'
CONFIG_FN = ".git-wtfrc"
class Numeric; def pluralize s; "#{to_s} #{s}" + (self != 1 ? "s" : "") end end
if ARGV.delete("--help") || ARGV.delete("-h")
puts USAGE
exit
end
## poor man's trollop
$long = ARGV.delete("--long") || ARGV.delete("-l")
$short = ARGV.delete("--short") || ARGV.delete("-s")
$all = ARGV.delete("--all") || ARGV.delete("-a")
$all_commits = ARGV.delete("--all-commits") || ARGV.delete("-A")
$dump_config = ARGV.delete("--dump-config")
$key = ARGV.delete("--key") || ARGV.delete("-k")
$show_relations = ARGV.delete("--relations") || ARGV.delete("-r")
ARGV.each { |a| abort "Error: unknown argument #{a}." if a =~ /^--/ }
## search up the path for a file
def find_file fn
while true
return fn if File.exist? fn
fn2 = File.join("..", fn)
return nil if File.expand_path(fn2) == File.expand_path(fn)
fn = fn2
end
end
want_color = `git config color.wtf`
want_color = `git config color.ui` if want_color.empty?
$color = case want_color.chomp
when "true"; true
when "auto"; $stdout.tty?
end
def red s; $color ? "\033[31m#{s}\033[0m" : s end
def green s; $color ? "\033[32m#{s}\033[0m" : s end
def yellow s; $color ? "\033[33m#{s}\033[0m" : s end
def cyan s; $color ? "\033[36m#{s}\033[0m" : s end
def grey s; $color ? "\033[1;30m#{s}\033[0m" : s end
def purple s; $color ? "\033[35m#{s}\033[0m" : s end
## the set of commits in 'to' that aren't in 'from'.
## if empty, 'to' has been merged into 'from'.
def commits_between from, to
if $long
`git log --pretty=format:"- %s [#{yellow "%h"}] (#{purple "%ae"}; %ar)" #{from}..#{to}`
else
`git log --pretty=format:"- %s [#{yellow "%h"}]" #{from}..#{to}`
end.split(/[\r\n]+/)
end
def show_commits commits, prefix=" "
if commits.empty?
puts "#{prefix} none"
else
max = $all_commits ? commits.size : $config["max_commits"]
max -= 1 if max == commits.size - 1 # never show "and 1 more"
commits[0 ... max].each { |c| puts "#{prefix}#{c}" }
puts grey("#{prefix}... and #{commits.size - max} more (use -A to see all).") if commits.size > max
end
end
def ahead_behind_string ahead, behind
[ahead.empty? ? nil : "#{ahead.size.pluralize 'commit'} ahead",
behind.empty? ? nil : "#{behind.size.pluralize 'commit'} behind"].
compact.join("; ")
end
def widget merged_in, remote_only=false, local_only=false, local_only_merge=false
left, right = case
when remote_only; %w({ })
when local_only; %w{( )}
else %w([ ])
end
middle = case
when merged_in && local_only_merge; green("~")
when merged_in; green("x")
else " "
end
print left, middle, right
end
def show b
have_both = b[:local_branch] && b[:remote_branch]
pushc, pullc, oosync = if have_both
[x = commits_between(b[:remote_branch], b[:local_branch]),
y = commits_between(b[:local_branch], b[:remote_branch]),
!x.empty? && !y.empty?]
end
if b[:local_branch]
puts "Local branch: " + green(b[:local_branch].sub(/^heads\//, ""))
if have_both
if pushc.empty?
puts "#{widget true} in sync with remote"
else
action = oosync ? "push after rebase / merge" : "push"
puts "#{widget false} NOT in sync with remote (you should #{action})"
show_commits pushc unless $short
end
end
end
if b[:remote_branch]
puts "Remote branch: #{cyan b[:remote_branch]} (#{b[:remote_url]})"
if have_both
if pullc.empty?
puts "#{widget true} in sync with local"
else
action = pushc.empty? ? "merge" : "rebase / merge"
puts "#{widget false} NOT in sync with local (you should #{action})"
show_commits pullc unless $short
end
end
end
puts "\n#{red "WARNING"}: local and remote branches have diverged. A merge will occur unless you rebase." if oosync
end
def show_relations b, all_branches
ibs, fbs = all_branches.partition { |name, br| $config["integration-branches"].include?(br[:local_branch]) || $config["integration-branches"].include?(br[:remote_branch]) }
if $config["integration-branches"].include? b[:local_branch]
puts "\nFeature branches:" unless fbs.empty?
fbs.each do |name, br|
next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch])
next if br[:ignore]
local_only = br[:remote_branch].nil?
remote_only = br[:local_branch].nil?
name = if local_only
purple br[:name]
elsif remote_only
cyan br[:name]
else
green br[:name]
end
## for remote_only branches, we'll compute wrt the remote branch head. otherwise, we'll
## use the local branch head.
head = remote_only ? br[:remote_branch] : br[:local_branch]
remote_ahead = b[:remote_branch] ? commits_between(b[:remote_branch], head) : []
local_ahead = b[:local_branch] ? commits_between(b[:local_branch], head) : []
if local_ahead.empty? && remote_ahead.empty?
puts "#{widget true, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is merged in"
elsif local_ahead.empty?
puts "#{widget true, remote_only, local_only, true} #{name} merged in (only locally)"
else
behind = commits_between head, (br[:local_branch] || br[:remote_branch])
ahead = remote_only ? remote_ahead : local_ahead
puts "#{widget false, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is NOT merged in (#{ahead_behind_string ahead, behind})"
show_commits ahead unless $short
end
end
else
puts "\nIntegration branches:" unless ibs.empty? # unlikely
ibs.sort_by { |v, br| v }.each do |v, br|
next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch])
next if br[:ignore]
local_only = br[:remote_branch].nil?
remote_only = br[:local_branch].nil?
name = remote_only ? cyan(br[:name]) : green(br[:name])
ahead = commits_between v, (b[:local_branch] || b[:remote_branch])
if ahead.empty?
puts "#{widget true, local_only} merged into #{name}"
else
#behind = commits_between b[:local_branch], v
puts "#{widget false, local_only} NOT merged into #{name} (#{ahead.size.pluralize 'commit'} ahead)"
show_commits ahead unless $short
end
end
end
end
#### EXECUTION STARTS HERE ####
## find config file and load it
$config = { "integration-branches" => %w(heads/master heads/next heads/edge), "ignore" => [], "max_commits" => 5 }.merge begin
fn = find_file CONFIG_FN
if fn && (h = YAML::load_file(fn)) # yaml turns empty files into false
h["integration-branches"] ||= h["versions"] # support old nomenclature
h
else
{}
end
end
if $dump_config
puts $config.to_yaml
exit
end
## first, index registered remotes
remotes = `git config --get-regexp ^remote\.\*\.url`.split(/[\r\n]+/).inject({}) do |hash, l|
l =~ /^remote\.(.+?)\.url (.+)$/ or next hash
hash[$1] ||= $2
hash
end
## next, index followed branches
branches = `git config --get-regexp ^branch\.`.split(/[\r\n]+/).inject({}) do |hash, l|
case l
when /branch\.(.*?)\.remote (.+)/
name, remote = $1, $2
hash[name] ||= {}
hash[name].merge! :remote => remote, :remote_url => remotes[remote]
when /branch\.(.*?)\.merge ((refs\/)?heads\/)?(.+)/
name, remote_branch = $1, $4
hash[name] ||= {}
hash[name].merge! :remote_mergepoint => remote_branch
end
hash
end
## finally, index all branches
remote_branches = {}
`git show-ref`.split(/[\r\n]+/).each do |l|
sha1, ref = l.chomp.split " refs/"
if ref =~ /^heads\/(.+)$/ # local branch
name = $1
next if name == "HEAD"
branches[name] ||= {}
branches[name].merge! :name => name, :local_branch => ref
elsif ref =~ /^remotes\/(.+?)\/(.+)$/ # remote branch
remote, name = $1, $2
remote_branches["#{remote}/#{name}"] = true
next if name == "HEAD"
ignore = !($all || remote == "origin")
branch = name
if branches[name] && branches[name][:remote] == remote
# nothing
else
name = "#{remote}/#{branch}"
end
branches[name] ||= {}
branches[name].merge! :name => name, :remote => remote, :remote_branch => "#{remote}/#{branch}", :remote_url => remotes[remote], :ignore => ignore
end
end
## assemble remotes
branches.each do |k, b|
next unless b[:remote] && b[:remote_mergepoint]
b[:remote_branch] = if b[:remote] == "."
b[:remote_mergepoint]
else
t = "#{b[:remote]}/#{b[:remote_mergepoint]}"
remote_branches[t] && t # only if it's still alive
end
end
show_dirty = ARGV.empty?
targets = if ARGV.empty?
[`git symbolic-ref HEAD`.chomp.sub(/^refs\/heads\//, "")]
else
ARGV.map { |x| x.sub(/^heads\//, "") }
end.map { |t| branches[t] or abort "Error: can't find branch #{t.inspect}." }
targets.each do |t|
show t
show_relations t, branches if $show_relations || t[:remote_branch].nil?
end
modified = show_dirty && `git ls-files -m` != ""
uncommitted = show_dirty && `git diff-index --cached HEAD` != ""
if $key
puts
puts KEY
end
puts if modified || uncommitted
puts "#{red "NOTE"}: working directory contains modified files." if modified
puts "#{red "NOTE"}: staging area contains staged but uncommitted files." if uncommitted
# the end!

16
bin/gren Executable file
View file

@ -0,0 +1,16 @@
#!/bin/sh
set -ex
if [[ -z "$1" ]]; then
echo "Usage: $0 <branch name>"
exit 1
fi
hub sync
if git rev-parse --verify --quiet $1; then
git checkout $1
else
git checkout -b $1 main
git push -u origin $1
fi

5
bin/ktail Executable file
View file

@ -0,0 +1,5 @@
#!/bin/bash
kubectl get pod --output json \
| jq -r '[.items[].metadata.labels]|map(to_entries[]|(.key) + "=" + .value)|unique|.[]' \
| fzf \
| xargs kubectl tail "$@" -l

1
bin/ktoolbox Symbolic link
View file

@ -0,0 +1 @@
/home/dln/src/github.com/dln/ktoolbox/ktoolbox

46
bin/pw Executable file
View file

@ -0,0 +1,46 @@
#!/bin/bash
#
# Author: Daniel Lundin <dln@arity.se>
#
# Convenience script to hide sensitive variables on the command line.
# Uses keyctl to store secrets in the keyring.
#
# Example usage: mycommand --user=foo --password=$(pw mypass)
set -eo pipefail
purge=0
ttl=${PW_TTL:-259200}
usage() { echo "Usage: $0 [-t SECONDS] [-f] SECRET_NAME" 1>&2; exit 1; }
while getopts ":ft:" o; do
case "${o}" in
f)
purge=1
;;
t)
ttl=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
var="$1"
shift || usage
[ -z "$1" ] || usage
key="pw.${var}"
if [ "${purge}" == "1" ]; then
keyctl purge user "${key}" >>/dev/null 2>&1 || true
fi
out=$(systemd-ask-password --accept-cached --keyname="${key}" "${var}:")
key_id=$(keyctl request user "${key}" 2>/dev/null)
keyctl timeout "$key_id" "$ttl"
printf "%s" "$out"

26
bin/starship-sl-status Executable file
View file

@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -xfeuo pipefail
state="${XDG_RUNTIME_DIR}/starship-sl-status"
checkout="${state}.checkout"
status="${state}.data"
if [[ "$PWD" != $(readlink -f "$state")* ]]; then
rm -f "$state"
root="$(sl root 2>/dev/null || true)"
ln -s "$root" "$state"
if [[ -z "${root}" ]]; then
echo >"${status}"
echo >"${checkout}"
exit 0
fi
fi
saved_cid=$(cat "${checkout}" 2>/dev/null || true)
root_cid=$(cat "${state}/.sl/checkoutidentifier" || true)
if [[ ${root_cid} != "${saved_cid}" ]]; then
echo "${root_cid}" >"${checkout}"
sl log -r . -T '{if(github_pull_request_number, "#{github_pull_request_number} @ ", if(bookmarks, "{bookmarks} @ "))}{node|short}{if(remotenames, ":{remotenames}")}' >"${status}"
fi
cat "$status" || true

4
bin/tmux-build-helper Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -ef -o pipefail
eval "$(direnv export bash)"
eval "${BUILD_COMMAND:-echo 'BUILD_COMMAND not set'}" | bat --paging=always

24
bin/tmux-edit-helper Executable file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env bash
set -fe -o pipefail
eval "$(direnv export bash)"
if [ -n "$1" ]; then
_file=$(readlink -f "$@")
else
FZF=${FZF:-"fzf-tmux -p 90%,50% -y 0"}
_root=$(git rev-parse --show-toplevel 2>/dev/null || sl root 2>/dev/null || pwd)
_store=$(echo "$_root" | sha1sum | cut -d ' ' -f 1)
_file=$( ( (fre --store_name "$_store" --sorted | xargs -n 100 ls -d 2>/dev/null || true) && fd --type f --hidden --follow --exclude .git --exclude .sl --ignore-file "${_root}/.gitignore" . "$_root") | cat -n | sort -k2 -k1n | uniq -f1 | sort -nk1,1 | cut -f2- | sed -e "s#^${_root}/##" | $FZF --no-sort)
_file="${_root}/${_file}"
fre --store_name "$_store" --add "$_file"
fi
tmux select-window -t nvim 2>/dev/null ||
tmux new-window -S -n nvim \
-e "BUILD_COMMAND=$BUILD_COMMAND" \
-e "GOPACKAGESDRIVER=$GOPACKAGESDRIVER" \
-e "GOFLAGS=$GOFLAGS" \
nvim --listen "$XDG_RUNTIME_DIR/nvim.sock"
nvim --server "$XDG_RUNTIME_DIR/nvim.sock" --remote "$_file"

5
bin/tmux-nvr Executable file
View file

@ -0,0 +1,5 @@
#!/bin/bash
tmux select-window -t1
FILE="$1"
shift
exec nvr --remote "$@" $(readlink -f "$FILE")

24
bin/tpm2-pkcs11-init-ssh.sh Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
set -e
store=$1
if [ -z "$store" ]; then
echo "Usage: $0 [store-name]"
exit 1
fi
export TPM2_PKCS11_STORE=$HOME/.local/share/tpm2-pkcs11/${store}
echo "=> Initializing store ${TPM2_PKCS11_STORE}"
mkdir -p $TPM2_PKCS11_STORE
tpm2_ptool init
tpm2_ptool addtoken --pid=1 --label=ssh --sopin="$(systemd-ask-password SOPIN)" --userpin="$(systemd-ask-password USERPIN)"
echo
echo "=> Adding SSH key"
tpm2_ptool addkey --label=ssh --algorithm=ecc256 --userpin="$(systemd-ask-password USERPIN)"
echo
echo "Store path: $TPM2_PKCS11_STORE"
echo "SSH public key:"
ssh-keygen -D /usr/lib/pkcs11/libtpm2_pkcs11.so 2>>/dev/null

2
bin/url-copy Executable file
View file

@ -0,0 +1,2 @@
#!/bin/bash
echo "$@" | xclip -selection clipboard

55
bin/vault-token-helper.sh Executable file
View file

@ -0,0 +1,55 @@
#!/usr/bin/env bash
# Vault Token helper for the Linux key retention service.
#
# Since version 2.6, the Linux kernel has included a efficiently store
# authentication data on a per thread, per process, per user, or per session
# bases.
#
# Linux Key Management Utilities (keyutils) provides `keyctl` to control
# the facility from the shell.
#
# see https://www.kernel.org/doc/Documentation/security/keys/core.rst
# see https://www.kernel.org/doc/Documentation/security/keys.txt
# see https://lwn.net/Articles/210502/
# see https://www.ibm.com/developerworks/library/l-key-retention/index.html
#
# Vault allows an external programs to be configured as a token helper
# that can get, store, and erase tokens on behalf of the Vault client.
#
# see https://www.vaultproject.io/docs/commands/token-helper.html
#
# To use this script, make it executable and set your ~/.vault file to
# contain:
#
# token_helper = "/path/to/vault-token-helper.sh"
# Exit on error.
set -o errexit
# Exit on error inside any functions or subshells.
set -o errtrace
# Do not allow use of undefined vars.
set -o nounset
# Catch the error if any piped command fails.
set -o pipefail
desc=VAULT_TOKEN:${VAULT_ADDR}
case $1 in
get)
# If the key is not set, keyctl returns "request_key: Required key not available"
# on stderr and exits with a non-zero status. The implied
key_id=$(keyctl request user ${desc} || echo '')
[ -z ${key_id} ] && exit 0
keyctl pipe ${key_id}
;;
store)
# Vault sends the token on stdin but there is no linebreak, so EOF is reached
# which causes read to return a non-zero status.
read -r token || true
echo -n ${token} | keyctl padd user ${desc} @u
;;
erase)
keyctl purge user ${desc}
;;
esac

View file

@ -1,71 +0,0 @@
{ pkgs, ... }:
{
boot = {
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true;
kernelPackages = pkgs.linuxPackages_zen;
initrd.systemd.enable = true;
binfmt.emulatedSystems = [ "aarch64-linux" ];
};
# Temporary files
boot.tmp.useTmpfs = true;
systemd.services.nix-daemon = {
environment.TMPDIR = "/var/tmp";
};
system.switch = {
enable = false;
enableNg = true;
};
services.fstrim.enable = true;
services.fwupd.enable = true;
time.timeZone = "Europe/Stockholm";
environment.systemPackages = with pkgs; [
btrfs-progs
btrfs-snap
git
glibcLocales
qemu_kvm
qemu-utils
vim
zstd
];
# Use fish, but not in /etc/passwd . See https://nixos.wiki/wiki/Fish#Setting_fish_as_your_shell
programs.bash = {
interactiveShellInit = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
shellInit = ''
export NIX_LD=$(nix eval --impure --raw --expr 'let pkgs = import <nixpkgs> {}; NIX_LD = pkgs.lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker"; in NIX_LD')
'';
};
services.avahi = {
nssmdns4 = true;
enable = true;
ipv4 = true;
ipv6 = true;
publish = {
enable = true;
addresses = true;
workstation = true;
};
};
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
}

View file

@ -1,11 +0,0 @@
{
imports = [
./base.nix
./desktop.nix
./hardening.nix
./laptop.nix
./nix.nix
./plymouth.nix
./podman.nix
];
}

View file

@ -1,106 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib) mkIf mkEnableOption;
cfg = config.patagia.podman;
in
{
options.patagia.desktop.enable = mkEnableOption "Desktop environment and common applications";
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ gnome-ssh-askpass4 ];
# Excluding some GNOME applications from the default install
environment.gnome.excludePackages =
(with pkgs; [
gnome-connections
gnome-photos
gnome-tour
snapshot
])
++ (with pkgs; [
atomix # puzzle game
baobab # disk usage analyzer
cheese # webcam tool
epiphany # web browser
geary # email reader
gnome-clocks
gnome-contacts
gnome-disk-utility
gnome-logs
gnome-music
gnome-terminal
hitori # sudoku game
iagno # go game
simple-scan
tali # poker game
yelp # help viewer
]);
fonts = {
fontDir.enable = true;
fontconfig = {
allowBitmaps = false;
antialias = true;
defaultFonts = {
serif = [ "Liberation Serif" ];
sansSerif = [ "Inter" ];
};
hinting.enable = true;
hinting.style = "slight";
subpixel.rgba = "rgb";
};
packages = with pkgs; [
inter
liberation_ttf
monaspace
nerd-fonts.symbols-only
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
roboto
ubuntu_font_family
];
};
programs.ssh.askPassword = "${pkgs.gnome-ssh-askpass4}/bin/gnome-ssh-askpass4";
programs.ssh.startAgent = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
};
services.gnome.gnome-keyring.enable = true;
services.printing.enable = true;
services.displayManager.defaultSession = "gnome";
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
displayManager.gdm.autoSuspend = false;
desktopManager.gnome.enable = true;
xkb.layout = "se";
xkb.variant = "us";
};
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
};
}

View file

@ -1,43 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
nix.settings.allowed-users = [
"@wheel"
"root"
];
boot.specialFileSystems = lib.mkIf (
!config.security.rtkit.enable && !config.security.polkit.enable
) { "/proc".options = [ "hidepid=2" ]; };
boot.kernel.sysctl."kernel.dmesg_restrict" = 1;
environment.systemPackages = [ pkgs.doas-sudo-shim ];
security = {
doas = {
enable = true;
extraRules = [
{
groups = [ "wheel" ];
keepEnv = true;
persist = true;
}
];
};
sudo.enable = false;
};
services.openssh = {
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
# prevents mutable /home/$user/.ssh/authorized_keys from being loaded to ensure that all user keys are config managed
# authorizedKeysFiles = lib.mkForce [ "/etc/ssh/authorized_keys.d/%u" ];
};
users.users.root.hashedPassword = "!";
}

View file

@ -1,19 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib) mkIf mkEnableOption;
in
{
options.patagia.laptop.enable = mkEnableOption "Laptop tools and configuration";
config = mkIf config.patagia.laptop.enable {
environment.systemPackages = with pkgs; [ gnomeExtensions.battery-health-charging ];
services.fprintd.enable = true;
};
}

View file

@ -1,57 +0,0 @@
{
inputs,
outputs,
lib,
config,
pkgs,
...
}:
{
nix =
let
flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs;
in
{
settings = {
auto-optimise-store = true;
experimental-features = "nix-command flakes";
flake-registry = "";
# Workaround for https://github.com/NixOS/nix/issues/9574
nix-path = config.nix.nixPath;
substituters = [
"https://cache-nixos-org.aarn.patagia.net/"
];
trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ];
extra-substituters = [
"https://nix-community.cachix.org"
];
extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
channel.enable = false;
registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
};
nixpkgs = {
overlays = [
outputs.overlays.additions
outputs.overlays.modifications
outputs.overlays.unstable-packages
];
config.allowUnfree = true;
};
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 14d --keep 5";
};
programs.nix-ld.enable = true;
environment.systemPackages = with pkgs; [
nvd
];
}

View file

@ -1,45 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib) mkIf mkEnableOption;
cfg = config.patagia.plymouth;
in
{
options.patagia.plymouth.enable = mkEnableOption "Fancy boot splash";
config = mkIf cfg.enable {
boot = {
consoleLogLevel = 0;
initrd.verbose = false;
# Hide the OS choice for bootloaders.
# It's still possible to open the bootloader list by pressing any key
# It will just not appear on screen unless a key is pressed
loader.timeout = 0;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
];
plymouth = {
enable = true;
theme = "spinner_alt";
themePackages = with pkgs; [
(adi1090x-plymouth-themes.override { selected_themes = [ "spinner_alt" ]; })
];
};
};
};
}

View file

@ -1,43 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib) mkIf mkEnableOption;
cfg = config.patagia.podman;
in
{
options.patagia.podman.enable = mkEnableOption "Podman";
config = mkIf cfg.enable {
environment.extraInit = ''
if [ -z "$DOCKER_HOST" -a -n "$XDG_RUNTIME_DIR" ]; then
export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/podman/podman.sock"
fi
'';
virtualisation = {
containers = {
enable = true;
storage.settings = {
storage = {
driver = "overlay";
runroot = "/run/containers/storage";
graphroot = "/var/lib/containers/storage";
rootless_storage_path = "/tmp/containers-$USER";
options.overlay.mountopt = "nodev,metacopy=on";
};
};
};
oci-containers.backend = "podman";
podman = {
enable = true;
dockerCompat = true;
};
};
};
}

View file

@ -1,54 +0,0 @@
# Bindings
bind \cg __zoxide_zi_repaint
bind \cJ forward-char
bind \cn history-prefix-search-forward
bind \cp history-prefix-search-backward
bind \e\[109\;5u execute # C-m in ghostty
# Settings
set fish_greeting
set fish_emoji_width 2
# Colors
set fish_color_command --bold
set fish_color_comment --italics --dim
set fish_color_autosuggestion --italics --bold --dim
set fish_color_cancel
set fish_color_command --bold
set fish_color_comment --italics --dim
set fish_color_cwd normal
set fish_color_cwd_root normal
set fish_color_end
set fish_color_error
set fish_color_escape
set fish_color_gray 6c7086
set fish_color_history_current
set fish_color_host normal
set fish_color_host_remote yellow
set fish_color_keyword
set fish_color_match
set fish_color_normal normal
set fish_color_operator
set fish_color_option
set fish_color_param normal
set fish_color_quote --italics
set fish_color_redirection
set fish_color_search_match -r
set fish_color_selection -r
set fish_color_status normal
set fish_color_string --italics
set fish_color_user normal
set fish_color_valid_path
set fish_pager_color_background
set fish_pager_color_completion normal
set fish_pager_color_description --dim
set fish_pager_color_prefix --underline
set fish_pager_color_progress --dim
set fish_pager_color_secondary_background
set fish_pager_color_secondary_completion
set fish_pager_color_secondary_description
set fish_pager_color_secondary_prefix
set fish_pager_color_selected_background -r
set fish_pager_color_selected_completion
set fish_pager_color_selected_description
set fish_pager_color_selected_prefix

View file

@ -1,55 +0,0 @@
## Semantic prompt (for Wezterm)
set _fishprompt_aid "fish"$fish_pid
set _fishprompt_started 0
# empty if running; or a numeric exit code; or CANCEL
set _fishprompt_postexec ""
functions -c fish_prompt _fishprompt_saved_prompt
set _fishprompt_prompt_count 0
set _fishprompt_disp_count 0
function _fishprompt_start --on-event fish_prompt
set _fishprompt_prompt_count (math $_fishprompt_prompt_count + 1)
# don't use post-exec, because it is called *before* omitted-newline output
if [ -n "$_fishprompt_postexec" ]
printf "\033]133;D;%s;aid=%s\007" "$_fishprompt_postexec" $_fishprompt_aid
end
printf "\033]133;A;aid=%s;cl=m\007" $_fishprompt_aid
end
function fish_prompt
set _fishprompt_disp_count (math $_fishprompt_disp_count + 1)
printf "\033]133;P;k=i\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_prompt))
set _fishprompt_started 1
set _fishprompt_postexec ""
end
function _fishprompt_preexec --on-event fish_preexec
if [ "$_fishprompt_started" = 1 ]
printf "\033]133;C;\007"
end
set _fishprompt_started 0
end
function _fishprompt_postexec --on-event fish_postexec
set _fishprompt_postexec $status
_fishprompt_start
end
function __fishprompt_cancel --on-event fish_cancel
set _fishprompt_postexec CANCEL
_fishprompt_start
end
function _fishprompt_exit --on-process %self
if [ "$_fishprompt_started" = 1 ]
printf "\033]133;Z;aid=%s\007" $_fishprompt_aid
end
end
if functions -q fish_right_prompt
functions -c fish_right_prompt _fishprompt_saved_right_prompt
function fish_right_prompt
printf "\033]133;P;k=r\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_right_prompt))
end
end

View file

@ -1,70 +0,0 @@
function __jj_in_repo
jj --ignore-working-copy --quiet root >>/dev/null 2>&1
end
function vcs_root
jj workspace root --ignore-working-copy 2>/dev/null || git rev-parse --show-toplevel 2>/dev/null || pwd
end
function vcs_broot
br (vcs_root)
commandline -f repaint
end
function vcs_jump
set _dir (vcs_root)
if [ "$_dir" = "$PWD" ]
set _dir (br -f --conf "$HOME/.config/broot/conf.toml")
end
[ -n "$_dir" ] && pushd $_dir >>/dev/null
commandline -f repaint
end
function vcs_status
if __jj_in_repo
echo
printf '\e[38;5;240m\u2504%.0s\e[0m' (seq 1 (tput cols)) '\n'
jj show --stat
printf '\e[38;5;240m\u2504%.0s\e[0m' (seq 1 (tput cols)) '\n'
jj log --ignore-working-copy --limit=20 -T builtin_log_comfortable -r "(main..@) | (main..@)-"
else
git status -sb
end
commandline -f repaint
end
function vcs_diff
if __jj_in_repo
jj show $argv
else
git diff --stat -p -C --color-words $argv
end
commandline -f repaint
end
function vcs_log
if __jj_in_repo
jj log --ignore-working-copy $argv
else
git diff --stat -p -C --color-words $argv
end
commandline -f repaint
end
# Abbreviations
abbr -a d vcs_diff
abbr -a s vcs_status
# Bindings
bind \c_ vcs_jump
bind \ea vcs_log
bind \ee vcs_broot
bind \eS vcs_diff
bind \es vcs_status
# jj completions
COMPLETE=fish jj | source

View file

@ -1,3 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
ssh-add -L | awk '/^sk-ssh-/ { print "key::" $1 " " $2 }'

View file

@ -1,294 +0,0 @@
echo -ne '\e[0mnormal\e[0m\t\t\t'
echo -e '\e[7m reverse \e[0m'
echo -ne '\e[2mdim\e[0m\t\t\t'
echo -e '\e[7;2m reverse dim \e[0m'
echo -ne '\e[1mbold\e[0m\t\t\t'
echo -e '\e[7;1m reverse bold \e[0m'
echo -ne '\e[3mitalic\e[0m\t\t\t'
echo -e '\e[7;3m reverse italic \e[0m'
echo -ne '\e[2;3mdim italic\e[0m\t\t'
echo -e '\e[7;2;3m reverse dim italic \e[0m'
echo -ne '\e[1;3mbold italic\e[0m\t\t'
echo -e '\e[7;1;3m reverse bold italic \e[0m'
echo
echo -e '\e[4munderline\e[0m'
echo -e '\e[3;4mitalic underline\e[0m'
echo -e '\e[4:1mthis is also underline \e[0m'
echo -e '\e[21mdouble underline \e[0m'
echo -e '\e[4:2mthis is also double underline \e[0m'
echo -e '\e[4:3mcurly underline \e[0m'
echo -e '\e[21m\e[58;5;42m256-color underline \e[0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (*)\e[0m'
echo -e "\e[58:2::255:0:0m\e[4:1msingle underline \e[0m"
echo -e "\e[4:2mdouble underline \e[58:2::255:0:0m and with color\e[0m"
echo -e "\e[4:3mcurly underline \e[58:2::255:0:0m and with color\e[0m"
echo -e "\e[4:4mdotted underline \e[58:2::255:0:0m and with color\e[0m"
echo -e "\e[4:5mdashed underline \e[58:2::255:0:0m and with color\e[0m"
echo
echo -e '\e[5mblink \e[0m'
echo -e '\e[8minvisible\e[0m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[0m'
echo -e '\e[53moverline \e[0m'
echo -e '\e[51mframed \e[0m'
echo -e '\e[52mencircled \e[0m'
echo -e '\e[31mred\e[0m'
echo -e '\e[91mbright red\e[0m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[0m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[0m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) \e[0m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[0m'
echo -e '\e[46mcyan background\e[0m'
echo -e '\e[106mbright cyan background\e[0m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[0m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[0m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) \e[0m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[0m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[0m'
echo
echo "Emoji: 🚀 💩 😁 🍖 🔥 🔷 ❤️ "
echo
echo "Nerdfonts:    󱓼 󱓺 󱓻            󱠇 󰲬  󰍎  󰬟  "
echo "   󱄅 󰣇       "
echo
echo "Geometrical:"
echo -e '◆ ◇ ◈ ● ○ ◉ ◎ ◍ ◌'
echo -e '■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩'
echo -e '◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ △ ▲ ▱ ▰ ▽ ▼ ▾ ▿'
echo -e '◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯ ◰ ◱ ◲ ◳ ◴ ◵ ◶ ◷ ◸ ◹ ◺ ◻ ◼ ◽ ◾ ◿'
echo "Arrows:"
echo -e '▲ ▶ ▼ ◀ △ ▷ ▽ ◁'
echo -e '← → ↑ ↓ ↔ ↔ ↕ ↖ ↗ ↙ ↘ ↠ ↣ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ↼ ↽ ↾ ↿'
echo -e '⇄ ↔ ⇀ ⇂ ⇄ ⇆ ⇌ ⇎ ⇐ ⇑ ⇓ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟'
echo
echo "Blocks:"
echo -e '▄ ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▀ ▔ ▏ ▎ ▍ ▌ ▋ ▊ ▉ ▐ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ ░ ▒ ▓ 🮘 🮙 🮐 '
echo -e '▄ ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▀ ▔ ▏ ▎ ▍ ▌ ▋ ▊ ▉ ▐ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ ░ ▒ ▓ 🮘 🮙 🮐 '
echo -e '▄ ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▀ ▔ ▏ ▎ ▍ ▌ ▋ ▊ ▉ ▐ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ ░ ▒ ▓ 🮘 🮙 🮐 '
echo
echo -e '───── ━━━━━ ┄┄┄┄┄ ┅┅┅┅┅ ┈┈┈┈┈ ┉┉┉┉┉ ╌╌╌╌╌ ╍╍╍╍╍ │ ┃ ┆ ┇ ┊ ┋ ╎ ╏ ║ ╵ ╷ ╹ ╻ '
echo -e '───── ━━━━━ ┄┄┄┄┄ ┅┅┅┅┅ ┈┈┈┈┈ ┉┉┉┉┉ ╌╌╌╌╌ ╍╍╍╍╍ │ ┃ ┆ ┇ ┊ ┋ ╎ ╏ ║ ╵ ╷ ╹ ╻ '
echo -e '───── ━━━━━ ┄┄┄┄┄ ┅┅┅┅┅ ┈┈┈┈┈ ┉┉┉┉┉ ╌╌╌╌╌ ╍╍╍╍╍ │ ┃ ┆ ┇ ┊ ┋ ╎ ╏ ║ ╵ ╷ ╹ ╻ '
echo
echo -e '╭──────────────╮ ┌─┬─┬─┬─┐ ╔═╦═╦═╦═╗ ┏━┳━┳━┳━┓ '
echo -e '│ border chars │ │ ├─┼─┤ │ ║ ╠═╬═╣ ║ ┃ ┣━╋━┫ ┃ '
echo -e '╰──────────────╯ └─┴─┴─┴─┘ ╚═╩═╩═╩═╝ ┗━┻━┻━┻━┛ '
echo
echo "Ligatures:"
echo "-<< -< -<- <-- <--- <<- <- -> ->> --> ---> ->- >- >>- <-> <--> <---> <----> <!--"
echo "=<< =< =<= <== <=== <<= <= => =>> ==> ===> =>= >= >>= <=> <==> <===> <====> <!---"
echo "[| |] {| |} <=< >=> <~~ <~ ~> ~~> :: ::: \/ /\ == != /= ~= <> === !== =/= =!= :>"
echo ":= :- :+ <* <*> *> <| <|> |> <. <.> .> +: -: =: <***> __ (* comm *) ++ +++ |- -|"
echo
echo 24-bit colors:
# This file was originally taken from iterm2 https://github.com/gnachman/iTerm2/blob/master/tests/24-bit-color.sh
#
# This file echoes a bunch of 24-bit color codes
# to the terminal to demonstrate its functionality.
# The foreground escape sequence is ^[38;2;<r>;<g>;<b>m
# The background escape sequence is ^[48;2;<r>;<g>;<b>m
# <r> <g> <b> range from 0 to 255 inclusive.
# The escape sequence ^[0m returns output to default
setBackgroundColor() {
printf '\x1b[48;2;%s;%s;%sm' $1 $2 $3
}
resetOutput() {
echo -en "\x1b[0m\n"
}
# Gives a color $1/255 % along HSV
# Who knows what happens when $1 is outside 0-255
# Echoes "$red $green $blue" where
# $red $green and $blue are integers
# ranging between 0 and 255 inclusive
rainbowColor() {
let h=$1/43
let f=$1-43*$h
let t=$f*255/43
let q=255-t
if [ $h -eq 0 ]; then
echo "255 $t 0"
elif [ $h -eq 1 ]; then
echo "$q 255 0"
elif [ $h -eq 2 ]; then
echo "0 255 $t"
elif [ $h -eq 3 ]; then
echo "0 $q 255"
elif [ $h -eq 4 ]; then
echo "$t 0 255"
elif [ $h -eq 5 ]; then
echo "255 0 $q"
else
# execution should never reach here
echo "0 0 0"
fi
}
for i in $(seq 0 127); do
setBackgroundColor $i 0 0
echo -en " "
done
resetOutput
for i in $(seq 255 -1 128); do
setBackgroundColor $i 0 0
echo -en " "
done
resetOutput
for i in $(seq 0 127); do
setBackgroundColor 0 $i 0
echo -n " "
done
resetOutput
for i in $(seq 255 -1 128); do
setBackgroundColor 0 $i 0
echo -n " "
done
resetOutput
for i in $(seq 0 127); do
setBackgroundColor 0 0 $i
echo -n " "
done
resetOutput
for i in $(seq 255 -1 128); do
setBackgroundColor 0 0 $i
echo -n " "
done
resetOutput
for i in $(seq 0 127); do
setBackgroundColor $(rainbowColor $i)
echo -n " "
done
resetOutput
for i in $(seq 255 -1 128); do
setBackgroundColor $(rainbowColor $i)
echo -n " "
done
resetOutput
## Color test
# Tom Hale, 2016. MIT Licence.
# Print out 256 colours, with each number printed in its corresponding colour
# See http://askubuntu.com/questions/821157/print-a-256-color-test-pattern-in-the-terminal/821163#821163
set -eu # Fail on errors or undeclared variables
printable_colours=256
# Return a colour that contrasts with the given colour
# Bash only does integer division, so keep it integral
function contrast_colour {
local r g b luminance
colour="$1"
if (( colour < 16 )); then # Initial 16 ANSI colours
(( colour == 0 )) && printf "15" || printf "0"
return
fi
# Greyscale # rgb_R = rgb_G = rgb_B = (number - 232) * 10 + 8
if (( colour > 231 )); then # Greyscale ramp
(( colour < 244 )) && printf "15" || printf "0"
return
fi
# All other colours:
# 6x6x6 colour cube = 16 + 36*R + 6*G + B # Where RGB are [0..5]
# See http://stackoverflow.com/a/27165165/5353461
# r=$(( (colour-16) / 36 ))
g=$(( ((colour-16) % 36) / 6 ))
# b=$(( (colour-16) % 6 ))
# If luminance is bright, print number in black, white otherwise.
# Green contributes 587/1000 to human perceived luminance - ITU R-REC-BT.601
(( g > 2)) && printf "0" || printf "15"
return
# Uncomment the below for more precise luminance calculations
# # Calculate percieved brightness
# # See https://www.w3.org/TR/AERT#color-contrast
# # and http://www.itu.int/rec/R-REC-BT.601
# # Luminance is in range 0..5000 as each value is 0..5
# luminance=$(( (r * 299) + (g * 587) + (b * 114) ))
# (( $luminance > 2500 )) && printf "0" || printf "15"
}
# Print a coloured block with the number of that colour
function print_colour {
local colour="$1" contrast
contrast=$(contrast_colour "$1")
printf "\e[48;5;%sm" "$colour" # Start block of colour
printf "\e[38;5;%sm%3d" "$contrast" "$colour" # In contrast, print number
printf "\e[0m " # Reset colour
}
# Starting at $1, print a run of $2 colours
function print_run {
local i
for (( i = "$1"; i < "$1" + "$2" && i < printable_colours; i++ )) do
print_colour "$i"
done
printf " "
}
# Print blocks of colours
function print_blocks {
local start="$1" i
local end="$2" # inclusive
local block_cols="$3"
local block_rows="$4"
local blocks_per_line="$5"
local block_length=$((block_cols * block_rows))
# Print sets of blocks
for (( i = start; i <= end; i += (blocks_per_line-1) * block_length )) do
printf "\n" # Space before each set of blocks
# For each block row
for (( row = 0; row < block_rows; row++ )) do
# Print block columns for all blocks on the line
for (( block = 0; block < blocks_per_line; block++ )) do
print_run $(( i + (block * block_length) )) "$block_cols"
done
(( i += block_cols )) # Prepare to print the next row
printf "\n"
done
done
}
echo
echo "ANSI 4-bit colors:"
echo
print_run 0 16 # The first 16 colours are spread over the whole spectrum
echo
echo
echo "ANSI 8-bit colors:"
print_blocks 16 231 6 6 3 # 6x6x6 colour cube between 16 and 231 inclusive
print_blocks 232 255 12 2 1 # Not 50, but 24 Shades of Grey

View file

@ -1,542 +0,0 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"neovim-nightly-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736143030,
"narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"neovim-nightly-overlay",
"hercules-ci-effects",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"ghostty": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable",
"zig": "zig"
},
"locked": {
"lastModified": 1736911212,
"narHash": "sha256-OLly4X2kN1tDb2gMYcWeim6uJECPoc52ltJsz1iD5Ug=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "ff9414d9ea7b16a375d41cde8f6f193de7e5db72",
"type": "github"
},
"original": {
"owner": "ghostty-org",
"repo": "ghostty",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_3",
"gitignore": "gitignore",
"nixpkgs": [
"neovim-nightly-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735882644,
"narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "a5a961387e75ae44cc20f0a57ae463da5e959656",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"neovim-nightly-overlay",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"hercules-ci-effects": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": [
"neovim-nightly-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735695978,
"narHash": "sha256-cwk53OX1S1bCFY09zydubZNmmwcx9l5XEba8mVYuNE4=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "f6233b5cfbada692d93a73d6ed35bdbfd0fdb9c4",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736785676,
"narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"jujutsu": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1735928141,
"narHash": "sha256-KN5rfdDj3vB/GNVw4YZU4tJv2BnUQiQdOz1kEQyketI=",
"owner": "dln",
"repo": "jj",
"rev": "cb103fb4692c4e2b90c4663804b81a5ff1e49c06",
"type": "github"
},
"original": {
"owner": "dln",
"ref": "openssh",
"repo": "jj",
"type": "github"
}
},
"neovim-nightly-overlay": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"hercules-ci-effects": "hercules-ci-effects",
"neovim-src": "neovim-src",
"nixpkgs": "nixpkgs_2",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1736924666,
"narHash": "sha256-1Mnw9hNMmsnfZuNbeTgmRev99vLZ9FsgrfCChjwnzSk=",
"owner": "nix-community",
"repo": "neovim-nightly-overlay",
"rev": "7e61ee6d94536d30888c2fbeb1e9d53f4aa3f8b8",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "neovim-nightly-overlay",
"type": "github"
}
},
"neovim-src": {
"flake": false,
"locked": {
"lastModified": 1736864394,
"narHash": "sha256-QEbgudJG4M9kVmuhGDEG2EP397zAbPmnZ5DX2GFwZCI=",
"owner": "neovim",
"repo": "neovim",
"rev": "e8a6c1b02122852da83dc52184e78369598d8240",
"type": "github"
},
"original": {
"owner": "neovim",
"repo": "neovim",
"type": "github"
}
},
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736652904,
"narHash": "sha256-8uolHABgroXqzs03QdulHp8H9e5kWQZnnhcda1MKbBM=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "271e5bd7c57e1f001693799518b10a02d1123b12",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1731890469,
"narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5083ec887760adfe12af64830a66807423a859a7",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1733423277,
"narHash": "sha256-TxabjxEgkNbCGFRHgM/b9yZWlBj60gUOUnRT/wbVQR8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e36963a147267afc055f7cf65225958633e536bf",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "release-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1736867362,
"narHash": "sha256-i/UJ5I7HoqmFMwZEH6vAvBxOrjjOJNU739lnZnhUln8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9c6b49aeac36e2ed73a8c472f1546f6d9cf1addc",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1733229606,
"narHash": "sha256-FLYY5M0rpa5C2QAE3CKLYAM6TwbKicdRK6qNrSHlNrE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "566e53c2ad750c84f6d31f9ccb9d00f823165550",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable_2": {
"locked": {
"lastModified": 1736848588,
"narHash": "sha256-9B6fQqphF3j9lpcxQnKyIUgp3NyGi7ikb9CjCYqixcY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "357cd3dfdb8993af11268d755d53357720675e66",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1736848588,
"narHash": "sha256-9B6fQqphF3j9lpcxQnKyIUgp3NyGi7ikb9CjCYqixcY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "357cd3dfdb8993af11268d755d53357720675e66",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1736798957,
"narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"ghostty": "ghostty",
"home-manager": "home-manager",
"jujutsu": "jujutsu",
"neovim-nightly-overlay": "neovim-nightly-overlay",
"nix-index-database": "nix-index-database",
"nixpkgs": "nixpkgs_3",
"nixpkgs-stable": "nixpkgs-stable_2",
"nixpkgs-unstable": "nixpkgs-unstable_2"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"jujutsu",
"nixpkgs"
]
},
"locked": {
"lastModified": 1732242723,
"narHash": "sha256-NWI8csIK0ujFlFuEXKnoc+7hWoCiEtINK9r48LUUMeU=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "a229311fcb45b88a95fdfa5cecd8349c809a272a",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"neovim-nightly-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736154270,
"narHash": "sha256-p2r8xhQZ3TYIEKBoiEhllKWQqWNJNoT9v64Vmg4q8Zw=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "13c913f5deb3a5c08bb810efd89dc8cb24dd968b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"zig": {
"inputs": {
"flake-compat": [
"ghostty"
],
"flake-utils": "flake-utils",
"nixpkgs": [
"ghostty",
"nixpkgs-stable"
]
},
"locked": {
"lastModified": 1717848532,
"narHash": "sha256-d+xIUvSTreHl8pAmU1fnmkfDTGQYCn2Rb/zOwByxS2M=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "02fc5cc555fc14fda40c42d7c3250efa43812b43",
"type": "github"
},
"original": {
"owner": "mitchellh",
"repo": "zig-overlay",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,91 +0,0 @@
{
description = "NixOS configuration";
nixConfig = {
substituters = [
"https://cache-nixos-org.aarn.patagia.net/"
];
extra-substituters = [
"https://nix-community.cachix.org"
];
extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
inputs = {
ghostty.url = "github:ghostty-org/ghostty";
jujutsu.url = "github:dln/jj/openssh";
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nix-index-database.url = "github:nix-community/nix-index-database";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
inputs@{
self,
nix-index-database,
nixpkgs,
home-manager,
...
}:
let
inherit (self) outputs;
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
mkHost =
modules:
nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs outputs;
};
modules = [ ./common ] ++ modules;
};
mkHome =
modules:
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit inputs outputs;
};
modules = [
./home/common
nix-index-database.hmModules.nix-index
] ++ modules;
};
in
{
overlays = import ./overlays { inherit inputs outputs; };
devShell.${system} = pkgs.mkShell {
packages = with pkgs; [
just
nh
nil
nixd
nixfmt-rfc-style
];
};
nixosConfigurations = {
dinky = mkHost [ ./hosts/dinky ];
nemo = mkHost [ ./hosts/nemo ];
pearl = mkHost [ ./hosts/pearl ];
};
homeConfigurations = {
"dln@dinky" = mkHome [ ./home/dln/dinky.nix ];
"dln@nemo" = mkHome [ ./home/dln/nemo.nix ];
"dln@pearl" = mkHome [ ./home/dln/pearl.nix ];
};
};
}

View file

@ -1,80 +0,0 @@
{ lib, pkgs, ... }:
{
programs.atuin = {
enable = true;
enableFishIntegration = true;
settings = {
ctrl_n_shortcuts = true;
enter_accept = true;
filter_mode_shell_up_key_binding = "session";
history_filter = [ ];
inline_height = 8;
prefers_reduced_motion = true;
search_mode_shell_up_key_binding = "prefix";
show_help = false;
style = "compact";
sync_address = "https://atuin.patagia.net";
sync.records = true;
daemon = {
enabled = true;
socket_path = "/run/user/1000/atuin.socket"; # FIXME: remove hard coded uid
systemd_socket = true;
};
stats.common_subcommands = [
"cargo"
"git"
"go"
"jj"
"just"
"kubectl"
"nix"
"npm"
"pnpm"
"talosctl"
"task"
"yarn"
];
stats.common_prefix = [
"doas"
"sudo"
];
};
};
systemd.user.services.atuin-daemon = {
Unit = {
Description = "atuin shell history daemon";
Requires = [ "atuin-daemon.socket" ];
};
Service = {
ExecStart = "${lib.getExe pkgs.atuin} daemon";
Environment = [ "ATUIN_LOG=info" ];
Restart = "on-failure";
RestartSteps = 5;
RestartMaxDelaySec = 10;
};
Install = {
Also = [ "atuin-daemon.socket" ];
WantedBy = [ "default.target" ];
};
};
systemd.user.sockets.atuin-daemon = {
Unit = {
Description = "Unix socket activation for atuin shell history daemon";
};
Socket = {
ListenStream = "%t/atuin.socket";
SocketMode = "0600";
RemoveOnStop = true;
};
Install = {
WantedBy = [ "sockets.target" ];
};
};
}

View file

@ -1,63 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
programs.broot = {
enable = true;
enableFishIntegration = true;
settings = {
content_search_max_file_size = "10MB";
enable_kitty_keyboard = lib.mkForce true;
icon_theme = "nerdfont";
lines_before_match_in_preview = 1;
lines_after_match_in_preview = 1;
quit_on_last_cancel = true;
show_selection_mark = true;
special_paths = {
"~/media" = {
list = "never";
sum = "never";
};
"~/.config" = {
show = "always";
};
"trav" = {
show = "always";
list = "always";
sum = "never";
};
};
true_colors = true;
verbs = [
{
invocation = "broot_home";
key = "ctrl-7";
external = "br $HOME";
from_shell = true;
leave_broot = true;
}
{
invocation = "edit";
key = "enter";
shortcut = "e";
external = "edit {file}";
apply_to = "text_file";
from_shell = true;
leave_broot = true;
}
{
invocation = "nvim";
key = "enter";
apply_to = "text_file";
external = "edit {file}";
from_shell = true;
leave_broot = true;
}
];
};
};
}

View file

@ -1,24 +0,0 @@
{ lib, ... }:
{
imports = [
./atuin.nix
./broot.nix
./devel.nix
./fish.nix
./ghostty.nix
./gnome.nix
./k8s.nix
./nix.nix
./nvim
./scripts.nix
./ssh.nix
./tmux.nix
./utils.nix
./vcs.nix
./web.nix
];
options.patagia.desktop.enable = lib.mkEnableOption "Desktop environment";
options.patagia.laptop.enable = lib.mkEnableOption "Laptop";
options.patagia.oled.enable = lib.mkEnableOption "Darker darks on oled screens";
}

View file

@ -1,17 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
age-plugin-fido2-hmac
comma
dogdns
file
just
nix-output-monitor
passage
rage
];
home.sessionVariables = {
GOPROXY = "https://athena.patagia.net";
};
}

View file

@ -1,130 +0,0 @@
{ lib, pkgs, ... }:
{
programs.fish = {
enable = true;
plugins = [
{
name = "transient";
src = pkgs.fishPlugins.transient-fish.src;
}
];
functions = {
confirm = {
description = "Ask for confirmation";
argumentNames = [ "message" ];
body = ''
read -l -p 'printf "\\e[31;1m$message\\e[0m (y/N) "' confirm
test "$confirm" = 'y'
'';
};
poweroff = {
description = "Wraps poweroff to first prompt for confirmation";
wraps = "poweroff";
body = ''confirm " Really poweroff $(hostname)?" && command poweroff $argv'';
};
reboot = {
description = "Wraps reboot to first prompt for confirmation";
wraps = "reboot";
body = ''confirm " Really reboot $(hostname)?" && command reboot $argv'';
};
shutdown = {
description = "Wraps shutdown to first prompt for confirmation";
wraps = "shutdown";
body = ''confirm " Really shutdown $(hostname)?" && command shutdown $argv'';
};
e = {
description = "Open a file in already running nvim";
argumentNames = [ "file" ];
body = ''
nvim-remote --remote (readlink -f "$file")
'';
};
jl.body = ''
jj log --color=always --no-graph -T builtin_log_oneline -r 'all()' | fzf --ansi --reverse --wrap --preview 'jj show --tool=difftu {1}' --preview-window=down,70% --color=light
'';
__zoxide_zi_repaint.body = ''
__zoxide_zi
commandline -f repaint
'';
fish_jj_prompt.body = ''
if not command -sq jj || not jj root --quiet &>/dev/null
return 1
end
jj log --ignore-working-copy --no-graph --color never -r @ -T '
surround(
" \e[2;3m",
"\e[0m",
separate(
" ",
surround(
"\e[0;2;3m",
"\e[0m",
coalesce(
surround(
"\e[1;2;3m",
"\e[0m",
if(
description.first_line().substr(0, 80).starts_with(description.first_line()),
description.first_line().substr(0, 80),
description.first_line().substr(0, 79) ++ ""
)
),
""
),
),
surround("\e[0;1;95m ", "\e[0;2;3m", change_id.shortest()),
surround("\e[0;35m󰸕 ", "\e[0m", bookmarks.join("")),
surround("\e[0;34m ", "\e[0;2;3m", commit_id.shortest()),
if(conflict, "󰂭"),
if(empty, ""),
if(divergent, ""),
if(hidden, "󰘓"),
)
)
'
'';
fish_prompt.body = ''
echo -e "\033[s\033[$LINES;1H\033[1;2;38;5;238m$(string pad -c '' -w $COLUMNS (fish_jj_prompt || fish_vcs_prompt))\033[0m\033[u"
string join "" -- (set_color --dim) (prompt_hostname) ':' (prompt_pwd --full-length-dirs=4) (set_color --bold normal) ' ' (set_color normal)
'';
transient_prompt_func.body = ''
echo
string join "" -- (set_color --bold) ' ' (set_color normal)
'';
rg.body = ''
if status is-interactive
command rg -p $argv --json | delta
else
command rg $argv
end
'';
};
interactiveShellInit = lib.concatStringsSep "\n" [
(builtins.readFile ../../files/config/fish/config.fish)
(builtins.readFile ../../files/config/fish/semantic-prompt.fish)
(builtins.readFile ../../files/config/fish/vcs.fish)
];
shellAbbrs = {
l = "bat";
top = "btm --basic --enable_cache_memory --battery";
ts = "TZ=Z date '+%Y%m%dT%H%M%SZ'";
w = "viddy $history[1]";
xc = "fish_clipboard_copy";
};
};
}

View file

@ -1,164 +0,0 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
config = lib.mkIf config.patagia.desktop.enable {
programs.ghostty = {
enable = true;
enableFishIntegration = true;
package = inputs.ghostty.packages.${pkgs.system}.default;
settings = {
font-size = 12.5;
font-family = "TX-02";
font-family-bold-italic = "Monaspace Xenon";
font-style-bold = "Bold";
font-style-italic = "Light Oblique";
font-style-bold-italic = "ExtraLight Italic";
font-synthetic-style = false;
adjust-cursor-thickness = 4;
adjust-underline-position = 5;
adjust-underline-thickness = -2;
mouse-hide-while-typing = true;
unfocused-split-opacity = 1.0;
shell-integration = "fish";
gtk-tabs-location = "hidden";
gtk-titlebar = true;
gtk-titlebar-hide-when-maximized = true;
window-padding-balance = true;
window-padding-color = "extend";
window-theme = "system";
theme = "light:PatagiaLight,dark:PatagiaDark";
keybind = [
"alt+shift+c=copy_to_clipboard"
"alt+shift+v=paste_from_clipboard"
"ctrl+i=text:\\x09"
"ctrl+m=text:\\x0D"
"ctrl+tab=goto_split:previous"
"ctrl+[=text:\\x1B"
"super+enter=toggle_fullscreen"
];
};
};
xdg.configFile."ghostty/themes/PatagiaDark".text =
let
background = if config.patagia.oled.enable then "#000000" else "#14151a";
in
''
background = "${background}"
foreground = #b7bec7
cursor-color = #e7e7b7
selection-background = #84979f
selection-foreground = #000000
palette = 0=#000000
palette = 1=#ff0035
palette = 2=#85ff00
palette = 3=#ffc900
palette = 4=#00a7ff
palette = 5=#cb01ff
palette = 6=#00e0ff
palette = 7=#b7bec7
palette = 8=#444444
palette = 9=#ff8c88
palette = 10=#baff94
palette = 11=#ffe090
palette = 12=#88ccff
palette = 13=#e38dff
palette = 14=#97eeff
palette = 15=#ffffff
'';
xdg.configFile."ghostty/themes/PatagiaLight".text = ''
background = #fefeff
foreground = #222222
cursor-color = #aa0000
selection-background = #ffe6a4
selection-foreground = #483600
palette = 0=#000000
palette = 1=#9e001d
palette = 2=#306300
palette = 3=#deae00
palette = 4=#00669e
palette = 5=#7d009e
palette = 6=#008a9e
palette = 7=#f7f7f7
palette = 8=#b0b0b0
palette = 9=#ff0035
palette = 10=#509e00
palette = 11=#ffc900
palette = 12=#00a7ff
palette = 13=#cb01ff
palette = 14=#00e0ff
palette = 15=#ffffff
'';
xdg.desktopEntries = {
ghostty-secondary = {
categories = [
"System"
"TerminalEmulator"
];
exec = ''
ghostty --class=com.mitchellh.ghostty-secondary --font-style="ExtraCondensed" --font-style-bold="Bold ExtraCondensed" --font-style-italic="ExtraCondensed Oblique" -e bash
'';
genericName = "Ghostty Secondary";
icon = "com.mitchellh.ghostty";
name = "Ghostty Secondary";
settings = {
StartupWMClass = "com.mitchellh.ghostty-secondary";
TryExec = "ghostty";
};
terminal = false;
type = "Application";
};
ghostty-devel = {
categories = [
"System"
"TerminalEmulator"
];
exec = ''
ghostty --class=com.mitchellh.ghostty-devel --command="ssh -t devel" --initial-command="ssh -t devel"
'';
genericName = "Ghostty (devel)";
icon = "com.mitchellh.ghostty";
name = "Ghostty (devel)";
settings = {
StartupWMClass = "com.mitchellh.ghostty-devel";
TryExec = "ghostty";
};
terminal = false;
type = "Application";
};
ghostty-devel-secondary = {
categories = [
"System"
"TerminalEmulator"
];
exec = ''
ghostty --class=com.mitchellh.ghostty-devel-secondary --font-style="ExtraCondensed" --font-style-bold="Bold ExtraCondensed" --font-style-italic="ExtraCondensed Oblique" --command="ssh -t devel" --initial-command="ssh -t devel"
'';
genericName = "Ghostty Secondary (devel)";
icon = "com.mitchellh.ghostty";
name = "Ghostty Secondary (devel)";
settings = {
StartupWMClass = "com.mitchellh.ghostty-devel-secondary";
TryExec = "ghostty";
};
terminal = false;
type = "Application";
};
};
};
}

View file

@ -1,194 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib.hm.gvariant;
{
config = lib.mkIf config.patagia.desktop.enable {
home.packages = with pkgs; [
gnome-tweaks
gnome-pomodoro
gnomeExtensions.desktop-clock
gnomeExtensions.emoji-copy
gnomeExtensions.just-perfection
];
dconf.settings = {
"org/gnome/desktop/background" = {
color-shading-type = "solid";
picture-options = "zoom";
picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
picture-uri-dark = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-d.png";
primary-color = "#77767B";
secondary-color = "#000000";
};
"org/gnome/desktop/screensaver" = {
color-shading-type = "solid";
picture-options = "zoom";
picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
primary-color = "#77767B";
secondary-color = "#000000";
};
"org/gnome/desktop/wm/keybindings" = {
close = [ "<Super>q" ];
toggle-on-all-workspaces = [ "<Super>s" ];
toggle-maximized = [ "<Super>m" ];
maximize-vertically = [ "<Super>Up" ];
minimize = [ "<Super>comma" ];
move-to-center = [ "<Super>c" ];
switch-applications = [ "<Super>Tab" ];
switch-windows = [ "<Alt>Tab" ];
move-to-workspace-1 = [ "<Shift>F1" ];
move-to-workspace-2 = [ "<Shift>F2" ];
move-to-workspace-3 = [ "<Shift>F3" ];
move-to-workspace-4 = [ "<Shift>F4" ];
move-to-workspace-5 = [ "<Shift>F5" ];
move-to-workspace-6 = [ "<Shift>F6" ];
move-to-workspace-7 = [ "<Shift>F7" ];
move-to-workspace-8 = [ "<Shift>F8" ];
move-to-workspace-9 = [ "<Shift>F9" ];
switch-to-workspace-1 = [ "F1" ];
switch-to-workspace-2 = [ "F2" ];
switch-to-workspace-3 = [ "F3" ];
switch-to-workspace-4 = [ "F4" ];
switch-to-workspace-5 = [ "F5" ];
switch-to-workspace-6 = [ "F6" ];
switch-to-workspace-7 = [ "F7" ];
switch-to-workspace-8 = [ "F8" ];
switch-to-workspace-9 = [ "F9" ];
};
"org/gnome/desktop/input-sources" = {
mru-sources = [
(mkTuple [
"xkb"
"us"
])
];
sources = [
(mkTuple [
"xkb"
"se+us"
])
];
xkb-options = [ "caps:ctrl_modifier" ];
};
"org/gnome/desktop/interface" = {
enable-animations = false;
enable-hot-corners = false;
show-battery-percentage = true;
font-antialiasing = "grayscale";
font-hinting = "slight";
font-name = "Inter Variable 11";
document-font-name = "Inter Variable 11";
monospace-font-name = "BerkeleyMono Nerd Font 11";
toolkit-accessibility = false;
};
"org/gnome/desktop/search-providers" = {
disabled = [
"org.gnome.Contacts.desktop"
"org.gnome.Nautilus.desktop"
"org.gnome.Calendar.desktop"
"org.gnome.clocks.desktop"
"org.gnome.Epiphany.desktop"
];
sort-order = [
"org.gnome.Contacts.desktop"
"org.gnome.Documents.desktop"
"org.gnome.Nautilus.desktop"
"org.gnome.Settings.desktop"
"org.gnome.Calculator.desktop"
"org.gnome.Calendar.desktop"
"org.gnome.clocks.desktop"
"org.gnome.seahorse.Application.desktop"
"org.gnome.Weather.desktop"
"org.gnome.Characters.desktop"
];
};
"org/gnome/desktop/wm/preferences" = {
focus-mode = "sloppy";
num-workspaces = 10;
resize-with-right-button = true;
};
"org/gnome/GWeather4" = {
temperature-unit = "centigrade";
};
"org/gnome/Weather" = {
locations = [
(mkVariant (mkTuple [
(mkUint32 2)
(mkVariant (mkTuple [
"Stockholm-Arlanda Airport"
"ESSA"
false
[
(mkTuple [
1.0410888988146176
0.31328660073298215
])
]
[
(mkTuple [
1.0410888988146176
0.31328660073298215
])
]
]))
]))
];
};
"org/gnome/desktop/calendar" = {
show-weekdate = true;
};
"org/gnome/mutter" = {
center-new-windows = true;
edge-tiling = true;
};
"org/gnome/settings-daemon/plugins/color" = {
night-light-schedule-automatic = false;
night-light-schedule-from = 0.0;
night-light-schedule-to = 0.0;
night-light-temperature = mkUint32 3575;
};
"org/gnome/shell" = {
enabled-extensions = [
"emoji-copy@felipeftn"
"just-perfection-desktop@just-perfection"
];
};
"org/gnome/shell/extensions/emoji-copy" = {
emoji-keybind = [ "<Super>e" ];
};
"org/gnome/shell/extensions/just-perfection" = {
animation = 0;
notification-banner-position = 2;
osd-position = 6;
panel = false;
panel-in-overview = true;
startup-status = 0;
switcher-popup-delay = false;
top-panel-position = 0;
};
"org/gnome/tweaks" = {
show-extensions-notice = false;
};
};
};
}

View file

@ -1,176 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
kail
kapp
krew
kubectl
kubectl-cnpg
kubectl-neat
kubectl-view-secret
kubectx
kubelogin-oidc
kubernetes-helm
kustomize
];
programs.k9s = {
enable = true;
settings.k9s = {
liveViewAutoRefresh = false;
refreshRate = 2;
maxConnRetry = 5;
readOnly = false;
noExitOnCtrlC = false;
skipLatestRevCheck = false;
disablePodCounting = false;
imageScans.enable = false;
logger = {
tail = 100;
buffer = 5000;
sinceSeconds = -1;
textWrap = false;
showTime = false;
};
shellPod.image = "alpine:3";
thresholds = {
cpu = {
critical = 90;
warn = 70;
};
memory = {
critical = 90;
warn = 70;
};
};
ui = {
crumbsless = true;
defaultsToFullScreen = true;
enableMouse = false;
headless = true;
logoless = true;
noIcons = false;
reactive = false;
skin = "dieter";
};
};
views = {
views = {
"v1/pods" = {
columns = [
"NAME"
"PF"
"READY"
"STATUS"
"NODE"
"AGE"
"RESTARTS"
"IP"
"CPU"
"MEM"
"CPU/R:L"
"MEM/R:L"
"%CPU/R"
"%CPU/L"
"%MEM/R"
"%MEM/L"
];
};
};
};
skins.dieter.k9s = {
body = {
fgColor = "default";
bgColor = "default";
logoColor = "default";
};
prompt = {
fgColor = "default";
bgColor = "default";
suggestColor = "default";
};
info = {
fgColor = "default";
sectionColor = "default";
};
dialog = {
fgColor = "default";
bgColor = "default";
buttonFgColor = "default";
buttonBgColor = "default";
buttonFocusFgColor = "white";
buttonFocusBgColor = "darkblue";
labelFgColor = "default";
fieldFgColor = "default";
};
frame = {
border = {
fgColor = "default";
focusColor = "default";
};
menu = {
fgColor = "default";
keyColor = "default";
numKeyColor = "default";
};
crumbs = {
fgColor = "default";
bgColor = "default";
activeColor = "default";
};
status = {
newColor = "default";
modifyColor = "default";
addColor = "default";
errorColor = "red";
highlightColor = "default";
killColor = "default";
completedColor = "default";
};
title = {
fgColor = "default";
bgColor = "default";
highlightColor = "default";
counterColor = "default";
filterColor = "default";
};
};
views = {
table = {
fgColor = "default";
bgColor = "default";
cursorFgColor = "teal";
cursorBgColor = "darkblue";
header = {
fgColor = "default";
bgColor = "default";
sorterColor = "blue";
};
};
xray = {
fgColor = "default";
bgColor = "default";
cursorColor = "blue";
graphicColor = "blue";
};
yaml = {
keyColor = "default";
colonColor = "default";
valueColor = "default";
};
logs = {
fgColor = "default";
bgColor = "default";
indicator = {
fgColor = "default";
bgColor = "default";
toggleOnColor = "default";
toggleOffColor = "default";
};
};
};
};
};
}

View file

@ -1,19 +0,0 @@
{
pkgs,
outputs,
...
}:
{
nixpkgs = {
config.allowUnfree = true;
overlays = [
outputs.overlays.additions
outputs.overlays.modifications
outputs.overlays.unstable-packages
];
};
programs.home-manager.enable = true;
systemd.user.startServices = "sd-switch";
}

View file

@ -1,69 +0,0 @@
require 'blink-cmp'.setup({
keymap = {
preset = 'enter',
['<Tab>'] = { 'select_next', 'fallback' },
['<S-Tab>'] = { 'select_prev', 'fallback' },
['<PageDown>'] = { 'scroll_documentation_down', 'fallback' },
['<PageUp>'] = { 'scroll_documentation_up', 'fallback' },
},
completion = {
accept = {
auto_brackets = { enabled = true, },
},
documentation = {
auto_show = true,
auto_show_delay_ms = 800,
window = { border = 'rounded', },
},
ghost_text = { enabled = false },
list = {
selection = {
preselect = false,
auto_insert = false
},
},
menu = {
auto_show = true,
border = 'rounded',
direction_priority = { 'n' },
draw = {
components = {
kind_icon = {
ellipsis = false,
text = function(ctx)
local kind_icon, _, _ = require('mini.icons').get('lsp', ctx.kind)
return kind_icon
end,
-- Optionally, you may also use the highlights from mini.icons
highlight = function(ctx)
local _, hl, _ = require('mini.icons').get('lsp', ctx.kind)
return hl
end,
}
}
}
}
},
fuzzy = {
prebuilt_binaries = {
download = false
},
},
signature = {
enabled = true,
window = { border = 'rounded', },
},
sources = {
default = { 'lsp' },
cmdline = {},
providers = {},
},
})

View file

@ -1,186 +0,0 @@
{
inputs,
lib,
pkgs,
...
}:
let
nvim-remote = pkgs.writeShellApplication {
name = "nvim-remote";
text = ''
_sess=$(echo -n "$USER@''${SSH_CONNECTION:-$HOSTNAME}" | tr -c '[:alnum:]@.' '_')
_nvim_sock="''${XDG_RUNTIME_DIR:-/tmp}/nvim.$_sess.sock"
exec nvim --listen "$_nvim_sock" --server "$_nvim_sock" "$@"
'';
};
in
{
imports = [
./treesitter.nix
];
home.packages = [ nvim-remote ];
programs.man.generateCaches = false;
programs.neovim = {
enable = true;
package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default;
defaultEditor = true;
viAlias = true;
vimAlias = true;
withNodeJs = false;
withPython3 = false;
withRuby = false;
extraLuaConfig = lib.fileContents ./init.lua;
extraPackages = with pkgs; [
codeium
harper
lua-language-server
nixd
shellcheck
shfmt
stylua
];
plugins = with pkgs.vimPlugins; [
friendly-snippets
go-nvim
targets-vim
ts-comments-nvim
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "direnv-nvim";
src = pkgs.fetchFromGitHub {
owner = "actionshrimp";
repo = "direnv.nvim";
rev = "main";
hash = "sha256-7NcVskgAurbIuEVIXxHvXZfYQBOEXLURGzllfVEQKNE=";
};
};
type = "lua";
config = ''
require('direnv-nvim').setup {
type = "dir"
}
'';
}
{
plugin = nvim-lspconfig;
type = "lua";
config = lib.fileContents ./lsp.lua;
}
{
plugin = blink-cmp;
type = "lua";
config = lib.fileContents ./blink-cmp.lua;
}
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "blink.compat";
src = pkgs.fetchFromGitHub {
owner = "saghen";
repo = "blink.compat";
rev = "5ca8848c8cc32abdc980e5db4f0eb7bb8fbf84dc"; # Dec 25, 2024
hash = "sha256-tFQeKyqdo3mvptYnWxKhTpI4ROFNQ6u3P8cLqtlsozw=";
};
};
type = "lua";
config = ''
require('blink.compat').setup()
'';
}
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "inlay-hints";
src = pkgs.fetchFromGitHub {
owner = "MysticalDevil";
repo = "inlay-hints.nvim";
rev = "3259b54f3b954b4d8260f3ee49ceabe978ea5636";
hash = "sha256-99KCGoPowa4PA1jkCm4ZbbgrFl84NWnKQMgkfy8KS5E=";
};
};
type = "lua";
config = ''
require('inlay-hints').setup {
autocmd = { enable = false },
}
'';
}
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "neocodeium";
src = pkgs.fetchFromGitHub {
owner = "monkoose";
repo = "neocodeium";
rev = "4da81528468b33585c411f31eb390dce573ccb14"; # v1.8.0
hash = "sha256-1n9nNqBNwNDSzbAkm8eB4HZLNy5HmMg25jPwQAnW5OU=";
};
doCheck = false;
};
type = "lua";
config = ''
local neocodeium =require('neocodeium')
neocodeium.setup()
vim.keymap.set("i", "<C-j>", neocodeium.accept, { remap = true })
vim.keymap.set("i", "<A-f>", neocodeium.accept, { remap = true })
vim.keymap.set("i", "<C-h>", neocodeium.cycle_or_complete, { remap = true })
'';
}
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "diagflow";
src = pkgs.fetchFromGitHub {
owner = "dgagn";
repo = "diagflow.nvim";
rev = "fc09d55d2e60edc8ed8f9939ba97b7b7e6488c99";
hash = "sha256-2WNuaIEXcAgUl2Kb/cCHEOrtehw9alaoM96qb4MLArw=";
};
};
type = "lua";
config = ''
require('diagflow').setup {
scope = "line",
gap_size = 0,
max_width = 50,
max_height = 20,
show_borders = true,
toggle_event = { "InsertEnter", "InsertLeave" },
}
'';
}
{
plugin = pkgs.vimUtils.buildVimPlugin {
name = "dieter-nvim";
src = ./dieter;
};
type = "lua";
config = ''
vim.cmd.colorscheme "dieter-nocolor"
'';
}
{
plugin = mini-nvim;
type = "lua";
config = lib.fileContents ./mini.lua;
}
{
plugin = rustaceanvim;
type = "lua";
config = lib.fileContents ./rust.lua;
}
];
};
}

Some files were not shown because too many files have changed in this diff Show more