summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
l---------config/hypr/hyprland.conf2
-rw-r--r--config/nvim/lua/lsp.lua293
-rw-r--r--default.nix2
-rw-r--r--flake.lock61
-rw-r--r--flake.nix8
-rw-r--r--hosts/jonbox/default.nix49
-rw-r--r--hosts/jontop/default.nix4
-rw-r--r--modules/desktop/apps/browsers/firefox.nix4
-rw-r--r--modules/desktop/apps/editors/neovim.nix48
-rw-r--r--modules/desktop/apps/editors/vscode.nix27
-rw-r--r--modules/desktop/apps/games/lutris.nix23
-rw-r--r--modules/desktop/apps/games/prism.nix23
-rw-r--r--modules/desktop/apps/games/vintagestory.nix14
-rw-r--r--modules/desktop/apps/mpd.nix8
-rw-r--r--modules/desktop/apps/mutt-wizard.nix26
-rw-r--r--modules/desktop/apps/virt.nix49
-rw-r--r--modules/desktop/hyprland.nix62
-rw-r--r--modules/hardware/audio.nix22
-rw-r--r--modules/hardware/bluetooth.nix2
-rw-r--r--modules/hardware/gpu.nix37
-rw-r--r--modules/options.nix1
-rw-r--r--modules/security.nix28
-rw-r--r--overlay.nix2
23 files changed, 556 insertions, 239 deletions
diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf
index 2cd79a9..a784a63 120000
--- a/config/hypr/hyprland.conf
+++ b/config/hypr/hyprland.conf
@@ -1 +1 @@
-/nix/store/kb2ii1nq7qfbs480iz2a1flb6n3kh1l8-home-manager-files/.config/hypr/hyprland.conf \ No newline at end of file
+/nix/store/g8z28wgnffr4vbx940i5h07qpl8w1i5k-home-manager-files/.config/hypr/hyprland.conf \ No newline at end of file
diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua
index 1056431..5d84e30 100644
--- a/config/nvim/lua/lsp.lua
+++ b/config/nvim/lua/lsp.lua
@@ -1,145 +1,192 @@
-local cmp = require("cmp")
-local nvim_lsp = require("lspconfig")
-local cmp_window = require("cmp.utils.window")
+-- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.lua
-vim.o.completeopt = "menuone,noselect"
-vim.o.shortmess = vim.o.shortmess .. "c"
+-- Some servers have issues with backup files, see #649
+vim.opt.backup = false
+vim.opt.writebackup = false
-local function on_attach(client, bufn)
- local function map(...)
- vim.api.nvim_buf_set_keymap(bufn, ...)
- end
+-- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
+-- delays and poor user experience
+vim.opt.updatetime = 300
- local function buf_set_option(...)
- vim.api.nvim_buf_set_option(bufn, ...)
- end
+-- Always show the signcolumn, otherwise it would shift the text each time
+-- diagnostics appeared/became resolved
+vim.opt.signcolumn = "yes"
- local opts = { noremap = true, silent = true }
- map("n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts)
- map("n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
- map("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts)
- map("n", "gi", "<Cmd>lua vim.lsp.buf.implementation()<CR>", opts)
- map("n", "<C-k>", "<Cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
- map("n", "<leader>D", "<Cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
- map("n", "gr", "<Cmd>lua vim.lsp.buf.references()<CR>", opts)
- map("n", "<leader>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts)
- map("n", "[d", "<Cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", opts)
- map("n", "]d", "<Cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)
- map("n", "<leader>q", "<Cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
- map("n", "ga", "<Cmd>lua vim.lsp.buf.code_action()<CR>", opts)
+local keyset = vim.keymap.set
+-- Autocomplete
+function _G.check_back_space()
+ local col = vim.fn.col('.') - 1
+ return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil
end
-local function has_words_before()
- 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
+-- Use Tab for trigger completion with characters ahead and navigate
+-- NOTE: There's always a completion item selected by default, you may want to enable
+-- no select by setting `"suggest.noselect": true` in your configuration file
+-- NOTE: Use command ':verbose imap <tab>' to make sure Tab is not mapped by
+-- other plugins before putting this into your config
+local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}
+keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)
+keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts)
+
+-- Make <CR> to accept selected completion item or notify coc.nvim to format
+-- <C-g>u breaks current undo, please make your own choice
+keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)
+
+-- Use <c-j> to trigger snippets
+keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)")
+-- Use <c-space> to trigger completion
+keyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true})
+
+-- Use `[g` and `]g` to navigate diagnostics
+-- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
+keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true})
+keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true})
+
+-- GoTo code navigation
+keyset("n", "gd", "<Plug>(coc-definition)", {silent = true})
+keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true})
+keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true})
+keyset("n", "gr", "<Plug>(coc-references)", {silent = true})
+
+
+-- Use K to show documentation in preview window
+function _G.show_docs()
+ local cw = vim.fn.expand('<cword>')
+ if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then
+ vim.api.nvim_command('h ' .. cw)
+ elseif vim.api.nvim_eval('coc#rpc#ready()') then
+ vim.fn.CocActionAsync('doHover')
+ else
+ vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw)
+ end
end
+keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true})
-local function feedkey(key, mode)
- vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
-end
-local function border(hl_name)
- return {
- { "╭", hl_name },
- { "─", hl_name },
- { "╮", hl_name },
- { "│", hl_name },
- { "╯", hl_name },
- { "─", hl_name },
- { "╰", hl_name },
- { "│", hl_name },
- }
-end
+-- Highlight the symbol and its references on a CursorHold event(cursor is idle)
+vim.api.nvim_create_augroup("CocGroup", {})
+vim.api.nvim_create_autocmd("CursorHold", {
+ group = "CocGroup",
+ command = "silent call CocActionAsync('highlight')",
+ desc = "Highlight symbol under cursor on CursorHold"
+})
-cmp_window.info_ = cmp_window.info
-cmp_window.info = function(self)
- local info = self:info_()
- info.scrollable = false
- return info
-end
-cmp.setup({
- window = {
- completion = {
- border = border "CmpBorder",
- winhighlight = "Normal:CmpPmenu,CursorLine:PmenuSel,Search:None",
- },
- documentation = {
- border = border "CmpDocBorder"
- },
- },
- snippet = {
- expand = function(args)
- vim.fn["vsnip#anonymous"](args.body)
- end,
- },
- mapping = cmp.mapping.preset.insert({
- ['<C-b>'] = cmp.mapping.scroll_docs(-4),
- ['<C-f>'] = cmp.mapping.scroll_docs(4),
- ['<C-Space>'] = cmp.mapping.complete(),
- ['<C-e>'] = cmp.mapping.abort(),
- ['<CR>'] = cmp.mapping.confirm({select = true}),
- ["<Tab>"] = cmp.mapping(function(fallback)
- if cmp.visible() then
- cmp.select_next_item()
- elseif vim.fn["vsnip#available"](1) == 1 then
- feedkey("<Plug>(vsnip-expand-or-jump)", "")
- elseif has_words_before() then
- cmp.complete()
- else
- fallback()
- end
- end, {"i", "s"}),
-
- ["<S-Tab"] = cmp.mapping(function()
- if cmp.visible() then
- cmp.select_prev_item()
- elseif vim.fn["vsnip#jumpable"](-1) == 1 then
- feedkey("<Plug>(vsnip-jump-prev)", "")
- end
- end, {"i", "s"}),
- }),
- sources = cmp.config.sources({
- { name = "nvim_lsp" },
- { name = "vsnip" },
- { name = "treesitter" },
- { name = "path", option = { trailing_slash = true }},
- { name = "buffer" }
- }),
-})
+-- Symbol renaming
+keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true})
-cmp.setup.cmdline(":", {
- mapping = cmp.mapping.preset.cmdline(),
- sources = cmp.config.sources({
- { name = "path" },
- }, {
- { name = "cmdline" },
- }),
-})
-vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
- vim.lsp.diagnostic.on_publish_diagnostics, {
- virtual_text = true,
- signs = true,
- update_in_insert = true
- }
-)
+-- Formatting selected code
+keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
+keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
-local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities())
-local servers = { "ccls", "bashls", "rnix", "texlab", "lua_ls" }
+-- Setup formatexpr specified filetype(s)
+vim.api.nvim_create_autocmd("FileType", {
+ group = "CocGroup",
+ pattern = "typescript,json",
+ command = "setl formatexpr=CocAction('formatSelected')",
+ desc = "Setup formatexpr specified filetype(s)."
+})
-for _, lang in pairs(servers) do
- nvim_lsp[lang].setup({
- root_dir = vim.loop.cwd,
- on_attach = on_attach,
- capabilities = capabilities
- })
-end
+-- Update signature help on jump placeholder
+vim.api.nvim_create_autocmd("User", {
+ group = "CocGroup",
+ pattern = "CocJumpPlaceholder",
+ command = "call CocActionAsync('showSignatureHelp')",
+ desc = "Update signature help on jump placeholder"
+})
+
+-- Apply codeAction to the selected region
+-- Example: `<leader>aap` for current paragraph
+local opts = {silent = true, nowait = true}
+keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
+keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
+
+-- Remap keys for apply code actions at the cursor position.
+keyset("n", "<leader>ac", "<Plug>(coc-codeaction-cursor)", opts)
+-- Remap keys for apply source code actions for current file.
+keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts)
+-- Apply the most preferred quickfix action on the current line.
+keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts)
+
+-- Remap keys for apply refactor code actions.
+keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true })
+keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
+keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
+
+-- Run the Code Lens actions on the current line
+keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts)
+
+
+-- Map function and class text objects
+-- NOTE: Requires 'textDocument.documentSymbol' support from the language server
+keyset("x", "if", "<Plug>(coc-funcobj-i)", opts)
+keyset("o", "if", "<Plug>(coc-funcobj-i)", opts)
+keyset("x", "af", "<Plug>(coc-funcobj-a)", opts)
+keyset("o", "af", "<Plug>(coc-funcobj-a)", opts)
+keyset("x", "ic", "<Plug>(coc-classobj-i)", opts)
+keyset("o", "ic", "<Plug>(coc-classobj-i)", opts)
+keyset("x", "ac", "<Plug>(coc-classobj-a)", opts)
+keyset("o", "ac", "<Plug>(coc-classobj-a)", opts)
+
+
+-- Remap <C-f> and <C-b> to scroll float windows/popups
+---@diagnostic disable-next-line: redefined-local
+local opts = {silent = true, nowait = true, expr = true}
+keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
+keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
+keyset("i", "<C-f>",
+ 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts)
+keyset("i", "<C-b>",
+ 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts)
+keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
+keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
+
+
+-- Use CTRL-S for selections ranges
+-- Requires 'textDocument/selectionRange' support of language server
+keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
+keyset("x", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
+
+
+-- Add `:Format` command to format current buffer
+vim.api.nvim_create_user_command("Format", "call CocAction('format')", {})
+
+-- " Add `:Fold` command to fold current buffer
+vim.api.nvim_create_user_command("Fold", "call CocAction('fold', <f-args>)", {nargs = '?'})
+
+-- Add `:OR` command for organize imports of the current buffer
+vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {})
+
+-- Add (Neo)Vim's native statusline support
+-- NOTE: Please see `:h coc-status` for integrations with external plugins that
+-- provide custom statusline: lightline.vim, vim-airline
+vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}")
+
+-- Mappings for CoCList
+-- code actions and coc stuff
+---@diagnostic disable-next-line: redefined-local
+local opts = {silent = true, nowait = true}
+-- Show all diagnostics
+keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts)
+-- Manage extensions
+keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts)
+-- Show commands
+keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts)
+-- Find symbol of current document
+keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts)
+-- Search workspace symbols
+keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts)
+-- Do default action for next item
+keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts)
+-- Do default action for previous item
+keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts)
+-- Resume latest coc list
+keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts)
require("nvim-treesitter.configs").setup({
highlight = { enable = true, },
})
require("gitsigns").setup({})
-
diff --git a/default.nix b/default.nix
index f223141..239d3e2 100644
--- a/default.nix
+++ b/default.nix
@@ -66,5 +66,5 @@
};
};
- system.stateVersion = "23.11";
+ system.stateVersion = "24.11";
}
diff --git a/flake.lock b/flake.lock
index fc94683..7297353 100644
--- a/flake.lock
+++ b/flake.lock
@@ -7,11 +7,11 @@
]
},
"locked": {
- "lastModified": 1704100519,
- "narHash": "sha256-SgZC3cxquvwTN07vrYYT9ZkfvuhS5Y1k1F4+AMsuflc=",
+ "lastModified": 1728903686,
+ "narHash": "sha256-ZHFrGNWDDriZ4m8CA/5kDa250SG1LiiLPApv1p/JF0o=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "6e91c5df192395753d8e6d55a0352109cb559790",
+ "rev": "e1aec543f5caf643ca0d94b6a633101942fd065f",
"type": "github"
},
"original": {
@@ -20,17 +20,35 @@
"type": "github"
}
},
+ "nix-index-database": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ },
+ "locked": {
+ "lastModified": 1728790083,
+ "narHash": "sha256-grMdAd4KSU6uPqsfLzA1B/3pb9GtGI9o8qb0qFzEU/Y=",
+ "owner": "Mic92",
+ "repo": "nix-index-database",
+ "rev": "5c54c33aa04df5dd4b0984b7eb861d1981009b22",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Mic92",
+ "repo": "nix-index-database",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
- "lastModified": 1703961334,
- "narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=",
- "owner": "nixos",
+ "lastModified": 1728492678,
+ "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
+ "owner": "NixOS",
"repo": "nixpkgs",
- "rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9",
+ "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
"type": "github"
},
"original": {
- "owner": "nixos",
+ "owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
@@ -38,16 +56,32 @@
},
"nixpkgs-stable": {
"locked": {
- "lastModified": 1703992652,
- "narHash": "sha256-C0o8AUyu8xYgJ36kOxJfXIroy9if/G6aJbNOpA5W0+M=",
+ "lastModified": 1737299813,
+ "narHash": "sha256-Qw2PwmkXDK8sPQ5YQ/y/icbQ+TYgbxfjhgnkNJyT1X8=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "107d5ef05c0b1119749e381451389eded30fb0d5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-24.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1737299813,
+ "narHash": "sha256-Qw2PwmkXDK8sPQ5YQ/y/icbQ+TYgbxfjhgnkNJyT1X8=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "32f63574c85fbc80e4ba1fbb932cde9619bad25e",
+ "rev": "107d5ef05c0b1119749e381451389eded30fb0d5",
"type": "github"
},
"original": {
"owner": "nixos",
- "ref": "nixos-23.11",
+ "ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
@@ -55,7 +89,8 @@
"root": {
"inputs": {
"home-manager": "home-manager",
- "nixpkgs": "nixpkgs",
+ "nix-index-database": "nix-index-database",
+ "nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable"
}
}
diff --git a/flake.nix b/flake.nix
index 69987c2..d44036b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,18 +2,21 @@
description = "Jon's NixOS configuration";
inputs = {
- nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
- nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.11";
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
+ nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
+
+ nix-index-database.url = "github:Mic92/nix-index-database";
};
outputs = inputs @ {
self,
nixpkgs,
+ nix-index-database,
...
}: let
system = "x86_64-linux";
@@ -43,6 +46,7 @@
inherit system;
specialArgs = {inherit lib inputs system;};
modules = [
+ nix-index-database.nixosModules.nix-index
{
nixpkgs.pkgs = pkgs;
modules.device.name = lib.mkDefault (builtins.baseNameOf path);
diff --git a/hosts/jonbox/default.nix b/hosts/jonbox/default.nix
index 0f525ca..6f4a059 100644
--- a/hosts/jonbox/default.nix
+++ b/hosts/jonbox/default.nix
@@ -3,7 +3,8 @@
lib,
pkgs,
...
-}: {
+ }: {
+ hardware.enableAllFirmware = true;
#Filesystems
fileSystems."/" =
{ device = "/dev/disk/by-uuid/83cafaff-8be3-477f-b13c-c47dafdf969d";
@@ -17,17 +18,17 @@
};
fileSystems."/mnt/jonshare" = {
- device = "homenas:/var/data/jon";
+ device = "192.168.0.145:/var/data/jon";
fsType = "nfs";
};
fileSystems."/mnt/plexshare" = {
- device = "homenas:/var/data/plex";
+ device = "192.168.0.145:/var/data/plex";
fsType = "nfs";
};
fileSystems."/mnt/share" = {
- device = "homenas:/var/data/shared";
+ device = "192.168.0.145:/var/data/shared";
fsType = "nfs";
};
@@ -43,7 +44,7 @@
font-awesome
liberation_ttf
noto-fonts
- noto-fonts-cjk
+ noto-fonts-cjk-sans
noto-fonts-emoji
(nerdfonts.override { fonts = [ "FiraCode" ]; } )
];
@@ -63,15 +64,45 @@
enable = true;
steam.enable = true;
};
+ editors = {
+ neovim.enable = true;
+ vscode.enable = true;
+ };
mpd.enable = true;
flatpak.enable = true;
newsboat.enable = true;
+ virt-manager.enable = true;
+ mutt.enable = true;
};
};
};
- home.manager.wayland.windowManager.hyprland.extraConfig = ''
- monitor=DP-2,1920x1080,0x0,1
- monitor=HDMI-A-2,1920x1080,1920x0,1
- '';
+ services.printing.enable = true;
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+
+ environment.systemPackages = [
+ pkgs.wineWowPackages.staging
+ pkgs.winetricks
+ pkgs.wineWowPackages.waylandFull
+ ];
+ #services.clamav.daemon.enable = true;
+ #services.clamav.updater.enable = true;
+
+ home.manager.wayland.windowManager.hyprland.settings = {
+ cursor = {
+ no_hardware_cursors = true;
+ };
+ monitor = [
+ "HDMI-A-1,1920x1080,0x0,1"
+ "DP-1,1920x1080,1920x0,1"
+ ];
+ };
+
+ programs.nix-ld.enable = true;
+ programs.nix-index.enableZshIntegration = false;
+ programs.nix-index.enableBashIntegration = false;
}
diff --git a/hosts/jontop/default.nix b/hosts/jontop/default.nix
index b90038b..fc7e373 100644
--- a/hosts/jontop/default.nix
+++ b/hosts/jontop/default.nix
@@ -30,6 +30,7 @@
noto-fonts-cjk
noto-fonts-emoji
(nerdfonts.override { fonts = [ "FiraCode" ]; } )
+ texlive.combined.scheme-full
];
environment.systemPackages = [
@@ -50,12 +51,13 @@
apps = {
browsers.firefox.enable = true;
games = {
- enable = false;
+ enable = true;
steam.enable = false;
};
mpd.enable = false;
flatpak.enable = true;
newsboat.enable = true;
+ latex.enable = true;
};
};
};
diff --git a/modules/desktop/apps/browsers/firefox.nix b/modules/desktop/apps/browsers/firefox.nix
index 3c647f1..16cd3fd 100644
--- a/modules/desktop/apps/browsers/firefox.nix
+++ b/modules/desktop/apps/browsers/firefox.nix
@@ -47,8 +47,8 @@ in
definedAliases = [ "@np" ];
};
"NixOS Wiki" = {
- urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
- iconUpdateURL = "https://nixos.wiki/favicon.png";
+ urls = [{ template = "https://wiki.nixos.org/index.php?search={searchTerms}"; }];
+ iconUpdateURL = "https://wiki.nixos.org/favicon.png";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = [ "@nw" ];
};
diff --git a/modules/desktop/apps/editors/neovim.nix b/modules/desktop/apps/editors/neovim.nix
index ee6424b..f0040e0 100644
--- a/modules/desktop/apps/editors/neovim.nix
+++ b/modules/desktop/apps/editors/neovim.nix
@@ -1,12 +1,10 @@
{
config,
- options,
lib,
pkgs,
...
}: let
nvimConf = config.modules.desktop.apps.editors.neovim;
- configDir = config.nixosConfig.configDir;
in {
options.modules.desktop.apps.editors.neovim = {
enable = lib.mkOption {
@@ -24,11 +22,9 @@ in {
};
home.packages = [
- pkgs.rnix-lsp
- pkgs.ccls
- pkgs.nodePackages.bash-language-server
+ pkgs.clang-tools
+ pkgs.nil
pkgs.texlab
- pkgs.sumneko-lua-language-server
];
home.manager.programs.neovim = {
@@ -41,31 +37,37 @@ in {
luafile /etc/nixos/config/nvim/lua/settings.lua
luafile /etc/nixos/config/nvim/lua/lsp.lua
'';
+ coc.enable = true;
+ coc.settings = {
+ "suggest.noselect" = true;
+ "suggest.enablePreview" = true;
+ "suggest.enablePreselect" = false;
+ "suggest.disableKind" = true;
+ "inlayHint.enable" = false;
+
+ "nix.enableLanguageServer" = true;
+ "nix.serverPath" = "nil";
+ };
plugins = with pkgs.vimPlugins; [
nvim-web-devicons
gitsigns-nvim
- nvim-tree-lua
catppuccin-nvim
+ vim-commentary
+ vim-fugitive
+
+ popup-nvim
+ plenary-nvim
+ telescope-nvim
+
nvim-lspconfig
- nvim-cmp
- cmp-cmdline
- cmp-nvim-lsp
- cmp-buffer
- cmp-path
- cmp-vsnip
- cmp-treesitter
-
- vim-nix
- vim-vsnip
- nvim-treesitter.withAllGrammars
- neoformat
+ nvim-treesitter nvim-treesitter.withAllGrammars
- bufferline-nvim
- lualine-nvim
- alpha-nvim
- ];
+ coc-clangd
+ coc-lua
+ coc-spell-checker
+ ];
};
};
}
diff --git a/modules/desktop/apps/editors/vscode.nix b/modules/desktop/apps/editors/vscode.nix
new file mode 100644
index 0000000..23bf15d
--- /dev/null
+++ b/modules/desktop/apps/editors/vscode.nix
@@ -0,0 +1,27 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ codeConf = config.modules.desktop.apps.editors.vscode;
+ configDir = config.nixosConfig.configDir;
+in {
+ options.modules.desktop.apps.editors.vscode = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ };
+ };
+
+ config = lib.mkIf (codeConf.enable) {
+ home.manager.programs.vscode = {
+ enable = true;
+ extensions = with pkgs.vscode-extensions; [
+ catppuccin.catppuccin-vsc catppuccin.catppuccin-vsc-icons
+ ms-dotnettools.csharp
+ ];
+ };
+ };
+}
diff --git a/modules/desktop/apps/games/lutris.nix b/modules/desktop/apps/games/lutris.nix
new file mode 100644
index 0000000..c1c5d31
--- /dev/null
+++ b/modules/desktop/apps/games/lutris.nix
@@ -0,0 +1,23 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ lutrisConf = config.modules.desktop.apps.games.lutris;
+ configDir = config.nixosConfig.configDir;
+in {
+ options.modules.desktop.apps.games.lutris = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ };
+ };
+
+ config = lib.mkIf (lutrisConf.enable) {
+ environment.systemPackages = [
+ pkgs.lutris
+ ];
+ };
+}
diff --git a/modules/desktop/apps/games/prism.nix b/modules/desktop/apps/games/prism.nix
new file mode 100644
index 0000000..4eb0a5f
--- /dev/null
+++ b/modules/desktop/apps/games/prism.nix
@@ -0,0 +1,23 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ prismConf = config.modules.desktop.apps.games;
+ configDir = config.nixosConfig.configDir;
+in {
+ options.modules.desktop.apps.games.prism = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ };
+ };
+
+ config = lib.mkIf (prismConf.enable) {
+ environment.systemPackages = [
+ pkgs.prismlauncher
+ ];
+ };
+}
diff --git a/modules/desktop/apps/games/vintagestory.nix b/modules/desktop/apps/games/vintagestory.nix
new file mode 100644
index 0000000..ec82058
--- /dev/null
+++ b/modules/desktop/apps/games/vintagestory.nix
@@ -0,0 +1,14 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ gamesConf = config.modules.desktop.apps.games;
+ configDir = config.nixosConfig.configDir;
+in {
+ config = lib.mkIf (gamesConf.enable) {
+
+ };
+}
diff --git a/modules/desktop/apps/mpd.nix b/modules/desktop/apps/mpd.nix
index e7af8c3..17b22ec 100644
--- a/modules/desktop/apps/mpd.nix
+++ b/modules/desktop/apps/mpd.nix
@@ -18,12 +18,11 @@ in
config = lib.mkIf (mpdConfig.enable) {
home.packages = [
pkgs.mpc-cli
- pkgs.ncmpcpp
];
services.mpd = {
enable = true;
- musicDirectory = /home/jon/mus;
+ musicDirectory = "/home/jon/mus";
extraConfig = ''
audio_output {
type "pipewire"
@@ -34,6 +33,11 @@ audio_output {
};
systemd.services.mpd.environment = {
XDG_RUNTIME_DIR = "/run/user/1000";
+ };
+
+ home.manager.programs.ncmpcpp = {
+ enable = true;
+ mpdMusicDir = /home/jon/mus;
};
};
}
diff --git a/modules/desktop/apps/mutt-wizard.nix b/modules/desktop/apps/mutt-wizard.nix
new file mode 100644
index 0000000..3b8a5db
--- /dev/null
+++ b/modules/desktop/apps/mutt-wizard.nix
@@ -0,0 +1,26 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ muttConfig = config.modules.desktop.apps.mutt;
+in
+{
+ options.modules.desktop.apps.mutt = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ };
+ };
+
+ config = lib.mkIf (muttConfig.enable) {
+ home.packages = [
+ pkgs.neomutt
+ pkgs.isync
+ pkgs.lynx
+ pkgs.mutt-wizard
+ ];
+ };
+}
diff --git a/modules/desktop/apps/virt.nix b/modules/desktop/apps/virt.nix
new file mode 100644
index 0000000..a9eaef4
--- /dev/null
+++ b/modules/desktop/apps/virt.nix
@@ -0,0 +1,49 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+ virtConfig = config.modules.desktop.apps.virt-manager;
+in
+{
+ options.modules.desktop.apps.virt-manager = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ };
+ };
+
+ config = lib.mkIf (virtConfig.enable) {
+ home.packages = [
+ pkgs.virtiofsd
+ ];
+
+ virtualisation.libvirtd = {
+ enable = true;
+ qemu = {
+ package = pkgs.qemu_kvm;
+ runAsRoot = true;
+ swtpm.enable = true;
+ ovmf = {
+ enable = true;
+ packages = [(pkgs.OVMF.override {
+ secureBoot = true;
+ tpmSupport = true;
+ }).fd];
+ };
+ };
+ };
+ programs.virt-manager.enable = true;
+
+ home.manager.dconf.settings = {
+ "org/virt-manager/virt-manager/connections" = {
+ autoconnect = ["qemu:///system"];
+ uris = ["qemu:///system"];
+ };
+ };
+
+ user.extraGroups = ["libvirtd"];
+ };
+}
diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix
index 0440453..7d594e1 100644
--- a/modules/desktop/hyprland.nix
+++ b/modules/desktop/hyprland.nix
@@ -34,12 +34,6 @@
size = 3;
passes = 1;
};
- drop_shadow = true;
- shadow_ignore_window = true;
- shadow_offset = "0 2";
- shadow_range = 20;
- shadow_render_power = 3;
- "col.shadow" = "rgba(00000055)";
};
animations = {
@@ -108,8 +102,6 @@ in {
config = lib.mkIf (hyprlandConf.enable) (lib.mkMerge [
{
- environment.variables.WLR_NO_HARDWARE_CURSORS = "1";
-
home.packages = [
pkgs.killall
pkgs.wl-clipboard
@@ -134,13 +126,18 @@ in {
};
};
};
- extraPortals = [pkgs.xdg-desktop-portal-gtk];
- config.common.default = ["wlr" "gtk"];
+ extraPortals = [
+ pkgs.xdg-desktop-portal-gtk
+ pkgs.xdg-desktop-portal-hyprland
+ ];
+ config.common.default = ["wlr" "gtk" "hyprland" ];
};
+ environment.sessionVariables.NIXOS_OZONE_WL = "1";
home.manager.wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = hyprlandConf.xwayland;
+ systemd.enable = true;
settings = {
"$mod" = "SUPER";
@@ -170,18 +167,41 @@ in {
"swww img ${configDir}/hypr/wallpaper.png"
];
- env = [
+ env = lib.mkMerge [
+ ([
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
- "GDK_BACKEND,wayland"
+ "GDK_BACKEND,wayland,x11"
+ "SDL_VIDEODRIVER,wayland"
+ "CLUTTER_BACKEND,wayland"
+ "MOZ_ENABLE_WAYLAND,1"
+ "MOZ_DISABLE_RDD_SANDBOX,1"
+ "_JAVA_AWT_WM_NONREPARENTING,1"
+ "QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_QPA_PLATFORM,wayland"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
- "QT_AUTO_SCREEN_SCALE_FACTOR,1"
-
- "SDL_VIDEODRIVER,wayland"
- ];
+
+ "disable_hyprland_logo,true"
+ "force_default_wallpaper,0"
+ ])
+ ( lib.mkIf (config.modules.device.gpu == "nvidia")
+ [
+ "GBM_BACKEND,nvidia"
+ "__GLX_VENDOR_LIBRARY_NAME,nvidia"
+ "LIBVA_DRIVER_NAME,nvidia"
+ "NVD_BACKEND,direct"
+ "PROTON_ENABLE_NGX_UPDATER,1"
+ "__GL_GSYNC_ALLOWED,1"
+ "__GL_VRR_ALLOWED,1"
+ "__GL_MaxFramesAllowed,1"
+ "__NV_PRIME_RENDER_OFFLOAD,1"
+ "__VK_LAYER_NV_optimus,NIVIDA_only"
+ "WLR_DRM_NO_ATOMIC,1"
+ "WLR_USE_LIBINPUT,1"
+ "WLR_RENDERER_ALLOW_SOFTWARE,1"
+ ])];
decoration = decoration;
animations = animations;
@@ -204,16 +224,6 @@ in {
security.pam.services.swaylock = {};
}
- (lib.mkIf (device.gpu == "nvidia") {
- home.manager.wayland.windowManager.hyprland.settings.env = [
- "GBM_BACKEND,nvidia-drm"
- "__GLX_VENDOR_LIBRARY_NAME,nvidia"
- "LIBVA_DRIVER_NAME,nvidia"
- "__GL_GSYNC_ALLOWED"
- "__GL_VRR_ALLOWED"
- "WLR_DRM_NO_ATOMIC,1"
- ];
- })
(lib.mkIf (config.modules.desktop.greetd.enable) {
services.greetd.settings = {
default_session.command = ''
diff --git a/modules/hardware/audio.nix b/modules/hardware/audio.nix
index 3ffa32a..a674597 100644
--- a/modules/hardware/audio.nix
+++ b/modules/hardware/audio.nix
@@ -23,22 +23,18 @@ in {
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
+
+ wireplumber.extraConfig.bluetoothEnhancements = {
+ "monitor.bluez.properties" = {
+ "bluez5.enable-sbc-xq" = true;
+ "bluez5.enable-msbc" = true;
+ "bluez5.enable-hw-volume" = true;
+ };
+ };
};
user.extraGroups = ["audio"];
home.packages = [pkgs.pavucontrol];
- }
- (lib.mkIf (device.hasBluetooth) {
- home.configFile = {
- "wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
- bluez_monitor.properties = {
- ["bluez5.enable-sbc-xq"] = true,
- ["bluez5.enable-msbc"] = true,
- ["bluez5.enable-hw-volume"] = true,
- ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
- }
- '';
- };
- })
+ }
]);
}
diff --git a/modules/hardware/bluetooth.nix b/modules/hardware/bluetooth.nix
index 7f835bf..c5da0fa 100644
--- a/modules/hardware/bluetooth.nix
+++ b/modules/hardware/bluetooth.nix
@@ -18,9 +18,9 @@ in {
config = lib.mkIf (bluetoothConfig.enable && device.hasBluetooth) {
hardware.bluetooth = {
enable = true;
- package = pkgs.bluez;
powerOnBoot = true;
};
+ services.blueman.enable = true;
user.extraGroups = ["bluetooth"];
};
}
diff --git a/modules/hardware/gpu.nix b/modules/hardware/gpu.nix
index d7dfe17..be2ab58 100644
--- a/modules/hardware/gpu.nix
+++ b/modules/hardware/gpu.nix
@@ -17,10 +17,8 @@ in {
config = lib.mkIf (gpuConfig.enable) (lib.mkMerge [
{
- hardware.opengl = {
+ hardware.graphics = {
enable = true;
- driSupport = true;
- driSupport32Bit = true;
};
}
(lib.mkIf (device.gpu == "intel") {
@@ -38,24 +36,21 @@ in {
environment.variables.VDPAU_DRIVER = "va_gl";
})
(lib.mkIf (device.gpu == "nvidia") {
- services.xserver.videoDrivers = ["nvidia"];
- hardware.nvidia = {
- modesetting.enable = true;
- powerManagement.enable = false;
- powerManagement.finegrained = false;
- open = false;
- nvidiaSettings = true;
- package = config.boot.kernelPackages.nvidiaPackages.beta;
- };
- boot.initrd.kernelModules = [
- "nvidia"
- "nvidia_modeset"
- "nvidia_uvm"
- "nvidia_drm"
- ];
- boot.extraModprobeConfig = ''
- options modeset=1 fbdev=1
- '';
+ services.xserver.videoDrivers = ["nvidia"];
+ boot.initrd.kernelModules = [ "nvidia" ];
+
+ hardware.nvidia = {
+ modesetting.enable = true;
+ powerManagement.enable = false;
+ powerManagement.finegrained = false;
+ open = true;
+ nvidiaSettings = true;
+ package = config.boot.kernelPackages.nvidiaPackages.latest;
+ };
+
+ environment.systemPackages = with pkgs; [
+ nvtopPackages.nvidia
+ ];
})
]);
}
diff --git a/modules/options.nix b/modules/options.nix
index e429171..c2463b4 100644
--- a/modules/options.nix
+++ b/modules/options.nix
@@ -95,6 +95,7 @@
# home manager configuration
home-manager = {
useUserPackages = true;
+ useGlobalPkgs = true;
users.${config.user.name} = lib.mkAliasDefinitions options.home.manager;
};
diff --git a/modules/security.nix b/modules/security.nix
new file mode 100644
index 0000000..c88fe0c
--- /dev/null
+++ b/modules/security.nix
@@ -0,0 +1,28 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}: let
+
+in {
+ config = {
+ security.polkit.enable = true;
+ services.pcscd.enable = true;
+
+ programs.gnupg.agent = {
+ enable = true;
+ enableSSHSupport = true;
+ };
+
+ environment.systemPackages = [
+ pkgs.pinentry-curses
+ ];
+
+ home.packages = [
+ (pkgs.pass.withExtensions (exts: [exts.pass-otp ]))
+ pkgs.pinentry-qt
+ ];
+ };
+}
diff --git a/overlay.nix b/overlay.nix
index d79b87c..6d748e1 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -2,7 +2,7 @@
inputs,
system,
...
-}: final: prev: {
+ }: final: prev: {
stable = import inputs.nixpkgs-stable {
inherit system;
config.allowUnfree = true;