Neovim: WIP on navigation workflow
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" },
|
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "7c493713bc2cb392706866eeba53aaef6c8e9fc6" },
|
"lazy.nvim": { "branch": "main", "commit": "7c493713bc2cb392706866eeba53aaef6c8e9fc6" },
|
||||||
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
||||||
|
"lspsaga.nvim": { "branch": "main", "commit": "2710a0ad97b5aaff404cd4756c296df454b3f726" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" },
|
"lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" },
|
||||||
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
|
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
|
||||||
"neogit": { "branch": "master", "commit": "40038473707c54a846bd11ecaf5933dd45858972" },
|
"neogit": { "branch": "master", "commit": "40038473707c54a846bd11ecaf5933dd45858972" },
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
require("core.leader-key")
|
require("core.leader-key")
|
||||||
require("core.config")
|
require("core.config")
|
||||||
|
require("core.buffers")
|
||||||
require("core.autocommands")
|
require("core.autocommands")
|
||||||
require("core.globals")
|
require("core.globals")
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
local F = require("core.functions")
|
||||||
|
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
--- Commands ---
|
--- Commands ---
|
||||||
|
|
||||||
@@ -13,10 +15,9 @@ vim.cmd [[
|
|||||||
--- Autocommands ---
|
--- Autocommands ---
|
||||||
|
|
||||||
-- Cut off trailing whitespace and trailing blank lines
|
-- Cut off trailing whitespace and trailing blank lines
|
||||||
local core = require("core.functions")
|
|
||||||
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
||||||
pattern = "*",
|
pattern = "*",
|
||||||
callback = core.trim_buffer,
|
callback = F.trim_buffer,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Highlight on yank
|
-- Highlight on yank
|
||||||
@@ -29,10 +30,10 @@ vim.api.nvim_create_autocmd("TextYankPost", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- Show message when autosaving
|
-- Show message when autosaving
|
||||||
local group = vim.api.nvim_create_augroup('autosave', {})
|
local autosave_group = vim.api.nvim_create_augroup("autosave", {})
|
||||||
vim.api.nvim_create_autocmd('User', {
|
vim.api.nvim_create_autocmd("User", {
|
||||||
pattern = 'AutoSaveWritePost',
|
pattern = "AutoSaveWritePost",
|
||||||
group = group,
|
group = autosave_group,
|
||||||
callback = function(opts)
|
callback = function(opts)
|
||||||
if opts.data.saved_buffer ~= nil then
|
if opts.data.saved_buffer ~= nil then
|
||||||
local filename = vim.api.nvim_buf_get_name(opts.data.saved_buffer)
|
local filename = vim.api.nvim_buf_get_name(opts.data.saved_buffer)
|
||||||
@@ -40,3 +41,13 @@ vim.api.nvim_create_autocmd('User', {
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Create an autocommand for full window buffers
|
||||||
|
vim.api.nvim_create_autocmd("BufWinEnter", {
|
||||||
|
-- callback = require("core.buffers").add_buffer
|
||||||
|
callback = function()
|
||||||
|
require("core.buffers").add_buffer()
|
||||||
|
LOG(require("core.buffers").buffers)
|
||||||
|
end,
|
||||||
|
desc = "Track all full window buffers visited",
|
||||||
|
})
|
||||||
|
|||||||
@@ -0,0 +1,213 @@
|
|||||||
|
local F = require("core.functions")
|
||||||
|
|
||||||
|
-- Module for managing buffers, these are used for navigation
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
-- Buffer table structure:
|
||||||
|
-- {
|
||||||
|
-- "Group" = { "buffer1", "buffer2", active_index = 1 }
|
||||||
|
-- }
|
||||||
|
M.buffers = {}
|
||||||
|
|
||||||
|
M.buffer_default_group = "Other"
|
||||||
|
|
||||||
|
M.buffer_matcher = {
|
||||||
|
-- match = truthy, function() -> thruthy, or string matching buffer filename
|
||||||
|
-- group = string, function() -> string
|
||||||
|
{ match = F.find_project_root, group = F.find_project_root },
|
||||||
|
{ match = true, group = "Other" }, -- default
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
local get_buffer_name = function()
|
||||||
|
local buf = vim.api.nvim_get_current_buf()
|
||||||
|
local buffer_name = vim.api.nvim_buf_get_name(buf)
|
||||||
|
if not buffer_name or buffer_name == "" then return nil end
|
||||||
|
return buffer_name
|
||||||
|
end
|
||||||
|
|
||||||
|
M.add_buffer = function()
|
||||||
|
local buffer_name = get_buffer_name()
|
||||||
|
if not buffer_name then return end
|
||||||
|
|
||||||
|
-- Evaluate group
|
||||||
|
local eval_group = function(config_group)
|
||||||
|
if not config_group then return M.buffer_default_group end
|
||||||
|
if type(config_group) == "function" then return config_group() end
|
||||||
|
return config_group
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add if buffer does not exist yet
|
||||||
|
local add = function(config_group)
|
||||||
|
local group = eval_group(config_group)
|
||||||
|
if not M.buffers[group] then M.buffers[group] = {} end
|
||||||
|
for i, buffer in ipairs(M.buffers[group]) do
|
||||||
|
if buffer == buffer_name then
|
||||||
|
M.buffers[group]["active_index"] = i
|
||||||
|
return group, i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(M.buffers[group], buffer_name)
|
||||||
|
local count = #M.buffers[group]
|
||||||
|
M.buffers[group]["active_index"] = count
|
||||||
|
|
||||||
|
return group, count
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Walk matcher configuration
|
||||||
|
local matcher = M.buffer_matcher or {}
|
||||||
|
if matcher and type(matcher) == "function" then
|
||||||
|
matcher = matcher()
|
||||||
|
end
|
||||||
|
if #matcher == 0 then add(M.buffer_default_group) end
|
||||||
|
for _, config in ipairs(M.buffer_matcher) do
|
||||||
|
if type(config.match) == "function" and config.match() then
|
||||||
|
return add(config.group)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Match path's filename
|
||||||
|
if type(config.match) == "string" and config.match == buffer_name:match("([^/]+)$") then
|
||||||
|
return add(config.group)
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(config.match) == "boolean" and config.match then
|
||||||
|
return add(config.group)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return add(M.buffer_default_group)
|
||||||
|
end
|
||||||
|
|
||||||
|
local get_group_from_buffer = function(buffer_name)
|
||||||
|
for group, buffers in pairs(M.buffers) do
|
||||||
|
for i, buffer in ipairs(buffers) do
|
||||||
|
if buffer == buffer_name then return group, i end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local buffer_action_in_active_group = function(action, direction)
|
||||||
|
local buffer_name = get_buffer_name()
|
||||||
|
if not buffer_name then return end
|
||||||
|
|
||||||
|
local group, index = get_group_from_buffer(buffer_name)
|
||||||
|
if not group then group, index = M.add_buffer() end
|
||||||
|
|
||||||
|
local buffers = M.buffers[group]
|
||||||
|
if #buffers < 2 then return end
|
||||||
|
|
||||||
|
-- Determine the other index
|
||||||
|
local other_index = index + direction
|
||||||
|
if index == 1 and direction == -1 then
|
||||||
|
other_index = #buffers
|
||||||
|
elseif index == #buffers and direction == 1 then
|
||||||
|
other_index = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if action == "move" then
|
||||||
|
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
|
||||||
|
-- Remove inactive buffers
|
||||||
|
if not vim.api.nvim_buf_is_loaded(buffer) then
|
||||||
|
for i, group_buffer in ipairs(buffers) do
|
||||||
|
if buffer == group_buffer then
|
||||||
|
table.remove(buffers, i)
|
||||||
|
if i > 1 and i <= other_index then
|
||||||
|
other_index = other_index - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
goto continue
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Make buffer active
|
||||||
|
if vim.api.nvim_buf_get_name(buffer) == buffers[other_index] then
|
||||||
|
vim.api.nvim_set_current_buf(buffer)
|
||||||
|
buffers.active_index = other_index
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
::continue::
|
||||||
|
end
|
||||||
|
elseif action == "swap" then
|
||||||
|
local tmp = buffers[other_index]
|
||||||
|
buffers[other_index] = buffers[index]
|
||||||
|
buffers[index] = tmp
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffers[group] = buffers
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_move_left = function()
|
||||||
|
buffer_action_in_active_group("move", -1)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_move_right = function()
|
||||||
|
buffer_action_in_active_group("move", 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_swap_left = function()
|
||||||
|
buffer_action_in_active_group("swap", -1)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_swap_right = function()
|
||||||
|
buffer_action_in_active_group("swap", 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
-- Group move
|
||||||
|
|
||||||
|
local buffer_group_move = function(direction)
|
||||||
|
local buffer_name = get_buffer_name()
|
||||||
|
if not buffer_name then return end
|
||||||
|
|
||||||
|
-- TODO: How to get groups deterministically?
|
||||||
|
|
||||||
|
-- Get active group from the current buffer
|
||||||
|
|
||||||
|
-- Check groups bounds
|
||||||
|
|
||||||
|
-- Change active group
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_group_move_up = function()
|
||||||
|
buffer_group_move(-1)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.buffer_group_move_down = function()
|
||||||
|
buffer_group_move(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- TODO: functions that can
|
||||||
|
-- v Navigate buffer left
|
||||||
|
-- v Navigate buffer right
|
||||||
|
-- - Navigate group up (use active_index when swapping)
|
||||||
|
-- - Navigate group down
|
||||||
|
-- v Move buffer left
|
||||||
|
-- v Move buffer right
|
||||||
|
-- - Remove buffer from currently active group (decrease active_index)
|
||||||
|
|
||||||
|
return M
|
||||||
|
|
||||||
|
|
||||||
|
-- (cond
|
||||||
|
-- ((string-equal "*" (substring (buffer-name) 0 1)) "Emacs")
|
||||||
|
-- ((or (memq major-mode '(magit-process-mode
|
||||||
|
-- magit-status-mode
|
||||||
|
-- magit-diff-mode
|
||||||
|
-- magit-log-mode
|
||||||
|
-- magit-file-mode
|
||||||
|
-- magit-blob-mode
|
||||||
|
-- magit-blame-mode))
|
||||||
|
-- (string= (buffer-name) "COMMIT_EDITMSG")) "Magit")
|
||||||
|
-- ((project-current) (dot/project-project-name))
|
||||||
|
-- ((memq major-mode '(org-mode
|
||||||
|
-- emacs-lisp-mode)) "Org Mode")
|
||||||
|
-- ((derived-mode-p 'dired-mode) "Dired")
|
||||||
|
-- ((derived-mode-p 'prog-mode
|
||||||
|
-- 'text-mode) "Editing")
|
||||||
|
-- (t "Other")))))
|
||||||
@@ -32,11 +32,14 @@ M.find_project_root = function()
|
|||||||
|
|
||||||
local directory = current_directory
|
local directory = current_directory
|
||||||
while directory ~= "/" do
|
while directory ~= "/" do
|
||||||
local git_directory = directory .. "/.git"
|
local git_path = vim.loop.fs_stat(directory .. "/.git")
|
||||||
local project_file = directory .. "/.project"
|
if git_path then
|
||||||
|
return directory:gsub("/$", "") -- remove trailing slash
|
||||||
|
end
|
||||||
|
|
||||||
if vim.fn.isdirectory(git_directory) == 1 or vim.fn.filereadable(project_file) == 1 then
|
local project_file = vim.loop.fs_stat(directory .. "/.project")
|
||||||
return directory
|
if project_file and project_file.type == "file" then
|
||||||
|
return directory:gsub("/$", "") -- remove trailing slash
|
||||||
end
|
end
|
||||||
|
|
||||||
directory = vim.fn.fnamemodify(directory, ":h")
|
directory = vim.fn.fnamemodify(directory, ":h")
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ return {
|
|||||||
{ -- https://github.com/neovim/nvim-lspconfig
|
{ -- https://github.com/neovim/nvim-lspconfig
|
||||||
"neovim/nvim-lspconfig",
|
"neovim/nvim-lspconfig",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
|
-- Improve the built-in LSP UI
|
||||||
|
"nvimdev/lspsaga.nvim",
|
||||||
-- Additional lua configuration, makes Nvim stuff amazing!
|
-- Additional lua configuration, makes Nvim stuff amazing!
|
||||||
"folke/neodev.nvim",
|
"folke/neodev.nvim",
|
||||||
-- C# "Goto Definition" with decompilation support
|
-- C# "Goto Definition" with decompilation support
|
||||||
@@ -73,6 +75,7 @@ return {
|
|||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
-- Setup neovim Lua configuration
|
-- Setup neovim Lua configuration
|
||||||
|
require("lspsaga").setup() -- ?? does this do anything with doc hover
|
||||||
require("neodev").setup()
|
require("neodev").setup()
|
||||||
|
|
||||||
-- Vim process
|
-- Vim process
|
||||||
@@ -103,6 +106,39 @@ return {
|
|||||||
["textDocument/definition"] = require('omnisharp_extended').handler,
|
["textDocument/definition"] = require('omnisharp_extended').handler,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ts_ls = {
|
||||||
|
init_options = {
|
||||||
|
plugins = {
|
||||||
|
{
|
||||||
|
name = '@vue/typescript-plugin',
|
||||||
|
location = '/home/rick/.cache/.bun/install/global/node_modules/@vue/language-server',
|
||||||
|
languages = { 'vue' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filetypes = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx', 'vue', },
|
||||||
|
-- filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
|
||||||
|
-- requires: bun install -g typescript-language-server
|
||||||
|
-- TODO: Update which-key config, maybe other packages
|
||||||
|
-- Sources:
|
||||||
|
-- https://github.com/vuejs/language-tools?tab=readme-ov-file#hybrid-mode-configuration-requires-vuelanguage-server-version-200
|
||||||
|
-- https://github.com/neovim/nvim-lspconfig/blob/master/lua/lspconfig/configs/ts_ls.lua#L4
|
||||||
|
},
|
||||||
|
volar = {
|
||||||
|
-- init_options = {
|
||||||
|
-- vue = {
|
||||||
|
-- hybridMode = false,
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
-- volar = {
|
||||||
|
-- -- init_options = {
|
||||||
|
-- -- typescript = {
|
||||||
|
-- -- serverPath = '/home/rick/.cache/.bun/install/global/node_modules/typescript/lib//tsserverlibrary.js'
|
||||||
|
-- -- }
|
||||||
|
-- -- },
|
||||||
|
-- -- filetypes = {'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json'}
|
||||||
|
-- },
|
||||||
}
|
}
|
||||||
|
|
||||||
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
||||||
@@ -114,6 +150,8 @@ return {
|
|||||||
capabilities = capabilities,
|
capabilities = capabilities,
|
||||||
on_attach = require("keybinds").lspconfig_on_attach,
|
on_attach = require("keybinds").lspconfig_on_attach,
|
||||||
})
|
})
|
||||||
|
-- P(server)
|
||||||
|
-- P(opts)
|
||||||
require("lspconfig")[server].setup(opts)
|
require("lspconfig")[server].setup(opts)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|||||||
@@ -297,8 +297,13 @@ M.vc_select_repo = function()
|
|||||||
end
|
end
|
||||||
|
|
||||||
M.vc_status = function()
|
M.vc_status = function()
|
||||||
|
if F.find_project_root() then
|
||||||
-- Open the repository of the current file
|
-- Open the repository of the current file
|
||||||
require("neogit").open({ cwd = "%:p:h" })
|
require("neogit").open({ cwd = "%:p:h" })
|
||||||
|
else
|
||||||
|
-- Pick a project to open
|
||||||
|
M.vc_select_repo()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
@@ -160,6 +160,9 @@ M.lspconfig_on_attach = function(_, bufnr)
|
|||||||
nnoremap("<leader>lf", F.lsp_format_buffer, "Format buffer")
|
nnoremap("<leader>lf", F.lsp_format_buffer, "Format buffer")
|
||||||
nnoremap("<leader>lr", vim.lsp.buf.rename, "Rename")
|
nnoremap("<leader>lr", vim.lsp.buf.rename, "Rename")
|
||||||
|
|
||||||
|
nnoremap("<leader>ld", "<cmd>Lspsaga hover_doc<CR>", "Show documentation")
|
||||||
|
-- vim.keymap.set("n", "<leader>ld", "<cmd>Lspsaga hover_doc<CR>", { desc = "Show documentation" })
|
||||||
|
|
||||||
F.wk("<leader>lg", "goto", bufnr)
|
F.wk("<leader>lg", "goto", bufnr)
|
||||||
nnoremap("<leader>lga", builtin.lsp_dynamic_workspace_symbols, "Workspace symbols")
|
nnoremap("<leader>lga", builtin.lsp_dynamic_workspace_symbols, "Workspace symbols")
|
||||||
nnoremap("<leader>lgd", vim.lsp.buf.declaration, "Declaration")
|
nnoremap("<leader>lgd", vim.lsp.buf.declaration, "Declaration")
|
||||||
|
|||||||
+18
-11
@@ -64,8 +64,21 @@ return {
|
|||||||
globalstatus = true,
|
globalstatus = true,
|
||||||
},
|
},
|
||||||
sections = {
|
sections = {
|
||||||
lualine_b = { "branch" },
|
lualine_a = { "mode" },
|
||||||
lualine_x = { "diagnostics", "encoding", "fileformat", "filetype" },
|
lualine_b = { "encoding", "filename" },
|
||||||
|
lualine_c = {
|
||||||
|
{
|
||||||
|
-- TODO: nvim alternate file stuff and closing files is busted
|
||||||
|
"project",
|
||||||
|
fmt = function()
|
||||||
|
local path = require("core.functions").find_project_root() or ""
|
||||||
|
return path:match("([^/]+)$")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lualine_x = { "diagnostics", "fileformat" },
|
||||||
|
lualine_y = { "filetype" },
|
||||||
|
lualine_z = { "progress", "location" },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -80,14 +93,6 @@ return {
|
|||||||
opts = {
|
opts = {
|
||||||
config = {
|
config = {
|
||||||
header = {
|
header = {
|
||||||
-- " ",
|
|
||||||
-- " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
|
|
||||||
-- " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
|
|
||||||
-- " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
|
|
||||||
-- " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
|
|
||||||
-- " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
|
|
||||||
-- " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
|
|
||||||
-- "____________________________________________________",
|
|
||||||
" . . ",
|
" . . ",
|
||||||
" ';;,. ::' ",
|
" ';;,. ::' ",
|
||||||
" ,:::;,, :ccc, ",
|
" ,:::;,, :ccc, ",
|
||||||
@@ -101,7 +106,9 @@ return {
|
|||||||
" .;ooo: ;cclooo:. ",
|
" .;ooo: ;cclooo:. ",
|
||||||
" .;oc 'coo;. ",
|
" .;oc 'coo;. ",
|
||||||
" .' .,. ",
|
" .' .,. ",
|
||||||
"____________________________________________________",
|
"",
|
||||||
|
" _______________________________________________________",
|
||||||
|
"",
|
||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
shortcut = {
|
shortcut = {
|
||||||
|
|||||||
+586
@@ -0,0 +1,586 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# /etc/tlp.conf - TLP user configuration (version 1.7.0)
|
||||||
|
# See full explanation: https://linrunner.de/tlp/settings
|
||||||
|
#
|
||||||
|
# Copyright (c) 2024 Thomas Koch <linrunner at gmx.net> and others.
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#
|
||||||
|
# Settings are read in the following order:
|
||||||
|
#
|
||||||
|
# 1. Intrinsic defaults
|
||||||
|
# 2. /etc/tlp.d/*.conf - Drop-in customization snippets
|
||||||
|
# 3. /etc/tlp.conf - User configuration (this file)
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
# - In case of identical parameters, the last occurence has precedence
|
||||||
|
# - This also means, parameters enabled here will override anything else
|
||||||
|
# - However you may append values to a parameter already defined as intrinsic
|
||||||
|
# default or in a previously read file: use PARAMETER+="add values"
|
||||||
|
# - IMPORTANT: all parameters here are disabled; remove the leading '#' if you
|
||||||
|
# like to enable a feature without default or have a value different from the
|
||||||
|
# default
|
||||||
|
# - Default *: intrinsic default that is effective when the parameter is missing
|
||||||
|
# or disabled by a leading '#'; use PARAM="" to disable an intrinsic default
|
||||||
|
# - Default <none>: do nothing or use kernel/hardware defaults
|
||||||
|
# - IMPORTANT: parameters must always be specified pairwise i.e. for
|
||||||
|
# both AC and BAT. Omitting one of the two makes the set value effective for
|
||||||
|
# both power sources, since a change only occurs when different values are
|
||||||
|
# defined.
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# tlp - Parameters for power saving
|
||||||
|
|
||||||
|
# Set to 0 to disable, 1 to enable TLP.
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
#TLP_ENABLE=1
|
||||||
|
|
||||||
|
# Control how warnings about invalid settings are issued:
|
||||||
|
# 0=disabled,
|
||||||
|
# 1=background tasks (boot, resume, change of power source) report to syslog,
|
||||||
|
# 2=shell commands report to the terminal (stderr),
|
||||||
|
# 3=combination of 1 and 2
|
||||||
|
# Default: 3
|
||||||
|
|
||||||
|
#TLP_WARN_LEVEL=3
|
||||||
|
|
||||||
|
# Colorize error, warning, notice and success messages. Colors are specified
|
||||||
|
# with ANSI codes:
|
||||||
|
# 1=bold black, 90=grey, 91=red, 92=green, 93=yellow, 94=blue, 95=magenta,
|
||||||
|
# 96=cyan, 97=white.
|
||||||
|
# Other colors are possible, refer to:
|
||||||
|
# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
|
||||||
|
# Colors must be specified in the order "<error> <warning> <notice> <success>".
|
||||||
|
# By default, errors are shown in red, warnings in yellow, notices in bold
|
||||||
|
# and success in green.
|
||||||
|
# Default: "91 93 1 92"
|
||||||
|
|
||||||
|
#TLP_MSG_COLORS="91 93 1 92"
|
||||||
|
|
||||||
|
# Operation mode when no power supply can be detected: AC, BAT.
|
||||||
|
# Concerns some desktop and embedded hardware only.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#TLP_DEFAULT_MODE=AC
|
||||||
|
|
||||||
|
# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE
|
||||||
|
# Note: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#TLP_PERSISTENT_DEFAULT=0
|
||||||
|
|
||||||
|
# Power supply classes to ignore when determining operation mode: AC, USB, BAT.
|
||||||
|
# Separate multiple classes with spaces.
|
||||||
|
# Note: try on laptops where operation mode AC/BAT is incorrectly detected.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#TLP_PS_IGNORE="BAT"
|
||||||
|
|
||||||
|
# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
|
||||||
|
# Non-zero value enables, zero disables laptop mode.
|
||||||
|
# Default: 0 (AC), 2 (BAT)
|
||||||
|
|
||||||
|
#DISK_IDLE_SECS_ON_AC=0
|
||||||
|
#DISK_IDLE_SECS_ON_BAT=2
|
||||||
|
|
||||||
|
# Dirty page values (timeouts in secs).
|
||||||
|
# Default: 15 (AC), 60 (BAT)
|
||||||
|
|
||||||
|
#MAX_LOST_WORK_SECS_ON_AC=15
|
||||||
|
#MAX_LOST_WORK_SECS_ON_BAT=60
|
||||||
|
|
||||||
|
# Select a CPU scaling driver operation mode.
|
||||||
|
# Intel CPU with intel_pstate driver:
|
||||||
|
# active, passive.
|
||||||
|
# AMD Zen 2 or newer CPU with amd-pstate driver as of kernel 6.3/6.4(*):
|
||||||
|
# active, passive, guided(*).
|
||||||
|
# Default: <none>
|
||||||
|
#CPU_DRIVER_OPMODE_ON_AC=active
|
||||||
|
#CPU_DRIVER_OPMODE_ON_BAT=active
|
||||||
|
|
||||||
|
# Select a CPU frequency scaling governor.
|
||||||
|
# Intel CPU with intel_pstate driver or
|
||||||
|
# AMD CPU with amd-pstate driver in active mode ('amd-pstate-epp'):
|
||||||
|
# performance, powersave(*).
|
||||||
|
# Intel CPU with intel_pstate driver in passive mode ('intel_cpufreq') or
|
||||||
|
# AMD CPU with amd-pstate driver in passive or guided mode ('amd-pstate') or
|
||||||
|
# Intel, AMD and other CPU brands with acpi-cpufreq driver:
|
||||||
|
# conservative, ondemand(*), userspace, powersave, performance, schedutil(*).
|
||||||
|
# Use tlp-stat -p to show the active driver and available governors.
|
||||||
|
# Important:
|
||||||
|
# Governors marked (*) above are power efficient for *almost all* workloads
|
||||||
|
# and therefore kernel and most distributions have chosen them as defaults.
|
||||||
|
# You should have done your research about advantages/disadvantages *before*
|
||||||
|
# changing the governor.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#CPU_SCALING_GOVERNOR_ON_AC=powersave
|
||||||
|
#CPU_SCALING_GOVERNOR_ON_BAT=powersave
|
||||||
|
|
||||||
|
# Set the min/max frequency available for the scaling governor.
|
||||||
|
# Possible values depend on your CPU. For available frequencies see
|
||||||
|
# the output of tlp-stat -p.
|
||||||
|
# Notes:
|
||||||
|
# - Min/max frequencies must always be specified for both AC *and* BAT
|
||||||
|
# - Not recommended for use with the intel_pstate driver, use
|
||||||
|
# CPU_MIN/MAX_PERF_ON_AC/BAT below instead
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#CPU_SCALING_MIN_FREQ_ON_AC=0
|
||||||
|
#CPU_SCALING_MAX_FREQ_ON_AC=0
|
||||||
|
#CPU_SCALING_MIN_FREQ_ON_BAT=0
|
||||||
|
#CPU_SCALING_MAX_FREQ_ON_BAT=0
|
||||||
|
|
||||||
|
# Set CPU energy/performance policies EPP and EPB:
|
||||||
|
# performance, balance_performance, default, balance_power, power.
|
||||||
|
# Values are given in order of increasing power saving.
|
||||||
|
# Requires:
|
||||||
|
# * Intel CPU
|
||||||
|
# EPP: Intel Core i 6th gen. or newer CPU with intel_pstate driver
|
||||||
|
# EPB: Intel Core i 2nd gen. or newer CPU with intel_pstate driver
|
||||||
|
# EPP and EPB are mutually exclusive: when EPP is available, Intel CPUs
|
||||||
|
# will not honor EPB. Only the matching feature will be applied by TLP.
|
||||||
|
# * AMD Zen 2 or newer CPU
|
||||||
|
# EPP: amd-pstate driver in active mode ('amd-pstate-epp') as of kernel 6.3
|
||||||
|
# Default: balance_performance (AC), balance_power (BAT)
|
||||||
|
|
||||||
|
#CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
|
||||||
|
#CPU_ENERGY_PERF_POLICY_ON_BAT=balance_power
|
||||||
|
|
||||||
|
# Set Intel CPU P-state performance: 0..100 (%).
|
||||||
|
# Limit the max/min P-state to control the power dissipation of the CPU.
|
||||||
|
# Values are stated as a percentage of the available performance.
|
||||||
|
# Requires Intel Core i 2nd gen. or newer CPU with intel_pstate driver.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#CPU_MIN_PERF_ON_AC=0
|
||||||
|
#CPU_MAX_PERF_ON_AC=100
|
||||||
|
#CPU_MIN_PERF_ON_BAT=0
|
||||||
|
#CPU_MAX_PERF_ON_BAT=30
|
||||||
|
|
||||||
|
# Set the CPU "turbo boost" (Intel) or "turbo core" (AMD) feature:
|
||||||
|
# 0=disable, 1=allow.
|
||||||
|
# Allows to raise the maximum frequency/P-state of some cores if the
|
||||||
|
# CPU chip is not fully utilized and below it's intended thermal budget.
|
||||||
|
# Note: a value of 1 does *not* activate boosting, it just allows it.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#CPU_BOOST_ON_AC=1
|
||||||
|
#CPU_BOOST_ON_BAT=0
|
||||||
|
|
||||||
|
# Set CPU dynamic boost feature:
|
||||||
|
# 0=disable, 1=enable.
|
||||||
|
# Improve performance by increasing minimum P-state limit dynamically
|
||||||
|
# whenever a task previously waiting on I/O is selected to run.
|
||||||
|
# Requires Intel Core i 6th gen. or newer CPU: intel_pstate driver in active mode.
|
||||||
|
# Note: AMD CPUs currently have no tunable for this.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#CPU_HWP_DYN_BOOST_ON_AC=1
|
||||||
|
#CPU_HWP_DYN_BOOST_ON_BAT=0
|
||||||
|
|
||||||
|
# Kernel NMI Watchdog:
|
||||||
|
# 0=disable (default, saves power), 1=enable (for kernel debugging only).
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#NMI_WATCHDOG=0
|
||||||
|
|
||||||
|
# Select platform profile:
|
||||||
|
# performance, balanced, low-power.
|
||||||
|
# Controls system operating characteristics around power/performance levels,
|
||||||
|
# thermal and fan speed. Values are given in order of increasing power saving.
|
||||||
|
# Note: check the output of tlp-stat -p to determine availability on your
|
||||||
|
# hardware and additional profiles such as: balanced-performance, quiet, cool.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#PLATFORM_PROFILE_ON_AC=performance
|
||||||
|
#PLATFORM_PROFILE_ON_BAT=low-power
|
||||||
|
|
||||||
|
# System suspend mode:
|
||||||
|
# s2idle: Idle standby - a pure software, light-weight, system sleep state,
|
||||||
|
# deep: Suspend to RAM - the whole system is put into a low-power state,
|
||||||
|
# except for memory, usually resulting in higher savings than s2idle.
|
||||||
|
# CAUTION: changing suspend mode may lead to system instability and even
|
||||||
|
# data loss. As for the availability of different modes on your system,
|
||||||
|
# check the output of tlp-stat -s. If unsure, stick with the system default
|
||||||
|
# by not enabling this.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#MEM_SLEEP_ON_AC=s2idle
|
||||||
|
#MEM_SLEEP_ON_BAT=deep
|
||||||
|
|
||||||
|
# Define disk devices on which the following DISK/AHCI_RUNTIME parameters act.
|
||||||
|
# Separate multiple devices with spaces.
|
||||||
|
# Devices can be specified by disk ID also (lookup with: tlp diskid).
|
||||||
|
# Default: "nvme0n1 sda"
|
||||||
|
|
||||||
|
#DISK_DEVICES="nvme0n1 sda"
|
||||||
|
|
||||||
|
# Disk advanced power management level: 1..254, 255 (max saving, min, off).
|
||||||
|
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
|
||||||
|
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||||
|
# to keep the hardware default for the particular disk.
|
||||||
|
# Default: 254 (AC), 128 (BAT)
|
||||||
|
|
||||||
|
#DISK_APM_LEVEL_ON_AC="254 254"
|
||||||
|
#DISK_APM_LEVEL_ON_BAT="128 128"
|
||||||
|
|
||||||
|
# Exclude disk classes from advanced power management (APM):
|
||||||
|
# sata, ata, usb, ieee1394.
|
||||||
|
# Separate multiple classes with spaces.
|
||||||
|
# CAUTION: USB and IEEE1394 disks may fail to mount or data may get corrupted
|
||||||
|
# with APM enabled. Be careful and make sure you have backups of all affected
|
||||||
|
# media before removing 'usb' or 'ieee1394' from the denylist!
|
||||||
|
# Default: "usb ieee1394"
|
||||||
|
|
||||||
|
#DISK_APM_CLASS_DENYLIST="usb ieee1394"
|
||||||
|
|
||||||
|
# Hard disk spin down timeout:
|
||||||
|
# 0: spin down disabled
|
||||||
|
# 1..240: timeouts from 5s to 20min (in units of 5s)
|
||||||
|
# 241..251: timeouts from 30min to 5.5 hours (in units of 30min)
|
||||||
|
# See 'man hdparm' for details.
|
||||||
|
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||||
|
# to keep the hardware default for the particular disk.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
|
||||||
|
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
|
||||||
|
|
||||||
|
# Select I/O scheduler for the disk devices.
|
||||||
|
# Multi queue (blk-mq) schedulers:
|
||||||
|
# mq-deadline(*), none, kyber, bfq
|
||||||
|
# Single queue schedulers:
|
||||||
|
# deadline(*), cfq, bfq, noop
|
||||||
|
# (*) recommended.
|
||||||
|
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||||
|
# to keep the kernel default scheduler for the particular disk.
|
||||||
|
# Notes:
|
||||||
|
# - Multi queue (blk-mq) may need kernel boot option 'scsi_mod.use_blk_mq=1'
|
||||||
|
# and 'modprobe mq-deadline-iosched|kyber|bfq' on kernels < 5.0
|
||||||
|
# - Single queue schedulers are legacy now and were removed together with
|
||||||
|
# the old block layer in kernel 5.0
|
||||||
|
# Default: keep
|
||||||
|
|
||||||
|
#DISK_IOSCHED="mq-deadline mq-deadline"
|
||||||
|
|
||||||
|
# AHCI link power management (ALPM) for SATA disks:
|
||||||
|
# min_power, med_power_with_dipm(*), medium_power, max_performance.
|
||||||
|
# (*) recommended.
|
||||||
|
# Multiple values separated with spaces are tried sequentially until success.
|
||||||
|
# Default: med_power_with_dipm (AC & BAT)
|
||||||
|
|
||||||
|
#SATA_LINKPWR_ON_AC="med_power_with_dipm"
|
||||||
|
#SATA_LINKPWR_ON_BAT="med_power_with_dipm"
|
||||||
|
|
||||||
|
# Exclude SATA links from AHCI link power management (ALPM).
|
||||||
|
# SATA links are specified by their host. Refer to the output of
|
||||||
|
# tlp-stat -d to determine the host; the format is "hostX".
|
||||||
|
# Separate multiple hosts with spaces.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#SATA_LINKPWR_DENYLIST="host1"
|
||||||
|
|
||||||
|
# Runtime Power Management for NVMe, SATA, ATA and USB disks
|
||||||
|
# as well as SATA ports:
|
||||||
|
# on=disable, auto=enable.
|
||||||
|
# Note: SATA controllers are PCIe bus devices and handled by RUNTIME_PM further
|
||||||
|
# down.
|
||||||
|
|
||||||
|
# Default: on (AC), auto (BAT)
|
||||||
|
|
||||||
|
#AHCI_RUNTIME_PM_ON_AC=on
|
||||||
|
#AHCI_RUNTIME_PM_ON_BAT=auto
|
||||||
|
|
||||||
|
# Seconds of inactivity before disk is suspended.
|
||||||
|
# Note: effective only when AHCI_RUNTIME_PM_ON_AC/BAT is activated.
|
||||||
|
# Default: 15
|
||||||
|
|
||||||
|
#AHCI_RUNTIME_PM_TIMEOUT=15
|
||||||
|
|
||||||
|
# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
|
||||||
|
# Drive can be powered on again by releasing (and reinserting) the eject lever
|
||||||
|
# or by pressing the disc eject button on newer models.
|
||||||
|
# Note: an UltraBay/MediaBay hard disk is never powered off.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#BAY_POWEROFF_ON_AC=0
|
||||||
|
#BAY_POWEROFF_ON_BAT=0
|
||||||
|
|
||||||
|
# Optical drive device to power off
|
||||||
|
# Default: sr0
|
||||||
|
|
||||||
|
#BAY_DEVICE="sr0"
|
||||||
|
|
||||||
|
# Set the min/max/turbo frequency for the Intel GPU.
|
||||||
|
# Possible values depend on your hardware. For available frequencies see
|
||||||
|
# the output of tlp-stat -g.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#INTEL_GPU_MIN_FREQ_ON_AC=0
|
||||||
|
#INTEL_GPU_MIN_FREQ_ON_BAT=0
|
||||||
|
#INTEL_GPU_MAX_FREQ_ON_AC=0
|
||||||
|
#INTEL_GPU_MAX_FREQ_ON_BAT=0
|
||||||
|
#INTEL_GPU_BOOST_FREQ_ON_AC=0
|
||||||
|
#INTEL_GPU_BOOST_FREQ_ON_BAT=0
|
||||||
|
|
||||||
|
# AMD GPU power management.
|
||||||
|
# Performance level (DPM): auto, low, high; auto is recommended.
|
||||||
|
# Note: requires amdgpu or radeon driver.
|
||||||
|
# Default: auto
|
||||||
|
|
||||||
|
#RADEON_DPM_PERF_LEVEL_ON_AC=auto
|
||||||
|
#RADEON_DPM_PERF_LEVEL_ON_BAT=auto
|
||||||
|
|
||||||
|
# Dynamic power management method (DPM): balanced, battery, performance.
|
||||||
|
# Note: radeon driver only.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#RADEON_DPM_STATE_ON_AC=performance
|
||||||
|
#RADEON_DPM_STATE_ON_BAT=battery
|
||||||
|
|
||||||
|
# Graphics clock speed (profile method): low, mid, high, auto, default;
|
||||||
|
# auto = mid on BAT, high on AC.
|
||||||
|
# Note: radeon driver on legacy ATI hardware only (where DPM is not available).
|
||||||
|
# Default: default
|
||||||
|
|
||||||
|
#RADEON_POWER_PROFILE_ON_AC=default
|
||||||
|
#RADEON_POWER_PROFILE_ON_BAT=default
|
||||||
|
|
||||||
|
# Display panel adaptive backlight modulation (ABM) level: 0(off), 1..4.
|
||||||
|
# Values 1..4 control the maximum brightness reduction allowed by the ABM
|
||||||
|
# algorithm, where 1 represents the least and 4 the most power saving.
|
||||||
|
# Notes:
|
||||||
|
# - Requires AMD Vega or newer GPU with amdgpu driver as of kernel 6.9
|
||||||
|
# - Savings are made at the expense of color balance
|
||||||
|
# Default: 0 (AC), 1 (BAT)
|
||||||
|
|
||||||
|
#AMDGPU_ABM_LEVEL_ON_AC=0
|
||||||
|
#AMDGPU_ABM_LEVEL_ON_BAT=3
|
||||||
|
|
||||||
|
# Wi-Fi power saving mode: on=enable, off=disable.
|
||||||
|
# Default: off (AC), on (BAT)
|
||||||
|
|
||||||
|
#WIFI_PWR_ON_AC=off
|
||||||
|
#WIFI_PWR_ON_BAT=on
|
||||||
|
|
||||||
|
# Disable Wake-on-LAN: Y/N.
|
||||||
|
# Default: Y
|
||||||
|
|
||||||
|
#WOL_DISABLE=Y
|
||||||
|
|
||||||
|
# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
|
||||||
|
# A value of 0 disables, >= 1 enables power saving.
|
||||||
|
# Note: 1 is recommended for Linux desktop environments with PulseAudio,
|
||||||
|
# systems without PulseAudio may require 10.
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
# >>> hostname=arch-desktop
|
||||||
|
SOUND_POWER_SAVE_ON_AC=1
|
||||||
|
SOUND_POWER_SAVE_ON_BAT=1
|
||||||
|
# <<<
|
||||||
|
# >>> hostname=arch-laptop
|
||||||
|
# SOUND_POWER_SAVE_ON_AC=0
|
||||||
|
# SOUND_POWER_SAVE_ON_BAT=0
|
||||||
|
# <<<
|
||||||
|
|
||||||
|
# Disable controller too (HDA only): Y/N.
|
||||||
|
# Note: effective only when SOUND_POWER_SAVE_ON_AC/BAT is activated.
|
||||||
|
# Default: Y
|
||||||
|
|
||||||
|
#SOUND_POWER_SAVE_CONTROLLER=Y
|
||||||
|
|
||||||
|
# PCIe Active State Power Management (ASPM):
|
||||||
|
# default(*), performance, powersave, powersupersave.
|
||||||
|
# (*) keeps BIOS ASPM defaults (recommended)
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#PCIE_ASPM_ON_AC=default
|
||||||
|
#PCIE_ASPM_ON_BAT=default
|
||||||
|
|
||||||
|
# Runtime Power Management for PCIe bus devices: on=disable, auto=enable.
|
||||||
|
# Default: on (AC), auto (BAT)
|
||||||
|
|
||||||
|
#RUNTIME_PM_ON_AC=on
|
||||||
|
#RUNTIME_PM_ON_BAT=auto
|
||||||
|
|
||||||
|
# Exclude listed PCIe device adresses from Runtime PM.
|
||||||
|
# Note: this preserves the kernel driver default, to force a certain state
|
||||||
|
# use RUNTIME_PM_ENABLE/DISABLE instead.
|
||||||
|
# Separate multiple addresses with spaces.
|
||||||
|
# Use lspci to get the adresses (1st column).
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#RUNTIME_PM_DENYLIST="11:22.3 44:55.6"
|
||||||
|
|
||||||
|
# Exclude PCIe devices assigned to the listed drivers from Runtime PM.
|
||||||
|
# Note: this preserves the kernel driver default, to force a certain state
|
||||||
|
# use RUNTIME_PM_ENABLE/DISABLE instead.
|
||||||
|
# Separate multiple drivers with spaces.
|
||||||
|
# Default: "mei_me nouveau radeon xhci_hcd", use "" to disable completely.
|
||||||
|
|
||||||
|
#RUNTIME_PM_DRIVER_DENYLIST="mei_me nouveau radeon xhci_hcd"
|
||||||
|
|
||||||
|
# Permanently enable/disable Runtime PM for listed PCIe device addresses
|
||||||
|
# (independent of the power source). This has priority over all preceding
|
||||||
|
# Runtime PM settings. Separate multiple addresses with spaces.
|
||||||
|
# Use lspci to get the adresses (1st column).
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#RUNTIME_PM_ENABLE="11:22.3"
|
||||||
|
#RUNTIME_PM_DISABLE="44:55.6"
|
||||||
|
|
||||||
|
# Set to 0 to disable, 1 to enable USB autosuspend feature.
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
#USB_AUTOSUSPEND=1
|
||||||
|
|
||||||
|
# Exclude listed devices from USB autosuspend (separate with spaces).
|
||||||
|
# Use lsusb to get the ids.
|
||||||
|
# Note: input devices (usbhid) and libsane-supported scanners are excluded
|
||||||
|
# automatically.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#USB_DENYLIST="1111:2222 3333:4444"
|
||||||
|
|
||||||
|
# Exclude audio devices from USB autosuspend:
|
||||||
|
# 0=do not exclude, 1=exclude.
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
#USB_EXCLUDE_AUDIO=1
|
||||||
|
|
||||||
|
# Exclude bluetooth devices from USB autosuspend:
|
||||||
|
# 0=do not exclude, 1=exclude.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#USB_EXCLUDE_BTUSB=0
|
||||||
|
|
||||||
|
# Exclude phone devices from USB autosuspend:
|
||||||
|
# 0=do not exclude, 1=exclude (enable charging).
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#USB_EXCLUDE_PHONE=0
|
||||||
|
|
||||||
|
# Exclude printers from USB autosuspend:
|
||||||
|
# 0=do not exclude, 1=exclude.
|
||||||
|
# Default: 1
|
||||||
|
|
||||||
|
#USB_EXCLUDE_PRINTER=1
|
||||||
|
|
||||||
|
# Exclude WWAN devices from USB autosuspend:
|
||||||
|
# 0=do not exclude, 1=exclude.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#USB_EXCLUDE_WWAN=0
|
||||||
|
|
||||||
|
# Allow USB autosuspend for listed devices even if already denylisted or
|
||||||
|
# excluded above (separate with spaces). Use lsusb to get the ids.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#USB_ALLOWLIST="1111:2222 3333:4444"
|
||||||
|
|
||||||
|
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
|
||||||
|
# on system startup: 0=disable, 1=enable.
|
||||||
|
# Note: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
|
||||||
|
# are ignored when this is enabled.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#RESTORE_DEVICE_STATE_ON_STARTUP=0
|
||||||
|
|
||||||
|
# Radio devices to disable on startup: bluetooth, nfc, wifi, wwan.
|
||||||
|
# Separate multiple devices with spaces.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth nfc wifi wwan"
|
||||||
|
|
||||||
|
# Radio devices to enable on startup: bluetooth, nfc, wifi, wwan.
|
||||||
|
# Separate multiple devices with spaces.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
|
||||||
|
|
||||||
|
# Radio devices to enable on AC: bluetooth, nfc, wifi, wwan.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DEVICES_TO_ENABLE_ON_AC="bluetooth nfc wifi wwan"
|
||||||
|
|
||||||
|
# Radio devices to disable on battery: bluetooth, nfc, wifi, wwan.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DEVICES_TO_DISABLE_ON_BAT="bluetooth nfc wifi wwan"
|
||||||
|
|
||||||
|
# Radio devices to disable on battery when not in use (not connected):
|
||||||
|
# bluetooth, nfc, wifi, wwan.
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth nfc wifi wwan"
|
||||||
|
|
||||||
|
# Battery Care -- Charge thresholds
|
||||||
|
# Charging starts when the charger is connected and the charge level
|
||||||
|
# is below the start threshold. Charging stops when the charge level
|
||||||
|
# is above the stop threshold.
|
||||||
|
# Required hardware: Lenovo ThinkPads and select other laptop brands
|
||||||
|
# are driven via specific plugins
|
||||||
|
# - Active plugin and support status are shown by tlp-stat -b
|
||||||
|
# - Vendor specific threshold levels are shown by tlp-stat -b, some
|
||||||
|
# laptops support only 1 (on)/ 0 (off) instead of a percentage level
|
||||||
|
# - When your hardware supports a start *and* a stop threshold, you must
|
||||||
|
# specify both, otherwise TLP will refuse to apply the single threshold
|
||||||
|
# - When your hardware supports only a stop threshold, set the start
|
||||||
|
# value to 0
|
||||||
|
# - Older ThinkPads may require an external kernel module, refer to the
|
||||||
|
# output of tlp-stat -b
|
||||||
|
# For further explanation and vendor specific details refer to
|
||||||
|
# - https://linrunner.de/tlp/settings/battery.html
|
||||||
|
# - https://linrunner.de/tlp/settings/bc-vendors.html
|
||||||
|
|
||||||
|
# BAT0: Primary / Main / Internal battery
|
||||||
|
# Note: also use for batteries BATC, BATT and CMB0
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
# Battery charge level below which charging will begin.
|
||||||
|
#START_CHARGE_THRESH_BAT0=75
|
||||||
|
# Battery charge level above which charging will stop.
|
||||||
|
#STOP_CHARGE_THRESH_BAT0=80
|
||||||
|
|
||||||
|
# BAT1: Secondary / Ultrabay / Slice / Replaceable battery
|
||||||
|
# Note: primary on some laptops
|
||||||
|
# Default: <none>
|
||||||
|
|
||||||
|
# Battery charge level below which charging will begin.
|
||||||
|
#START_CHARGE_THRESH_BAT1=75
|
||||||
|
# Battery charge level above which charging will stop.
|
||||||
|
#STOP_CHARGE_THRESH_BAT1=80
|
||||||
|
|
||||||
|
# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
|
||||||
|
# Default: 0
|
||||||
|
|
||||||
|
#RESTORE_THRESHOLDS_ON_BAT=1
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# tlp-rdw - Parameters for the radio device wizard
|
||||||
|
|
||||||
|
# Possible devices: bluetooth, wifi, wwan.
|
||||||
|
# Separate multiple radio devices with spaces.
|
||||||
|
# Default: <none> (for all parameters below)
|
||||||
|
|
||||||
|
# Radio devices to disable on connect.
|
||||||
|
|
||||||
|
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
|
||||||
|
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
|
||||||
|
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
|
||||||
|
|
||||||
|
# Radio devices to enable on disconnect.
|
||||||
|
|
||||||
|
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
|
||||||
|
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
|
||||||
|
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
|
||||||
|
|
||||||
|
# Radio devices to enable/disable when docked.
|
||||||
|
|
||||||
|
#DEVICES_TO_ENABLE_ON_DOCK=""
|
||||||
|
#DEVICES_TO_DISABLE_ON_DOCK=""
|
||||||
|
|
||||||
|
# Radio devices to enable/disable when undocked.
|
||||||
|
|
||||||
|
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
|
||||||
|
#DEVICES_TO_DISABLE_ON_UNDOCK=""
|
||||||
Reference in New Issue
Block a user