1
Fork 0

Begin rewrite

This commit is contained in:
caem 2025-01-08 02:06:46 +01:00
parent fb5d4d46f8
commit bc6d1e6984
Signed by: caem
GPG key ID: 69A830D03203405F
97 changed files with 328 additions and 3101 deletions

View file

@ -1,83 +0,0 @@
# nixos-system-config
My modular NixOS configuration.
## About
This is the NixOS configuration that I daily drive on my system. Feel free to use,
modify and share this configuration to your heart's content, no attribution required.
## Screenshots
|KDE Plasma|Hyprland|
|---|---|
|![plasma screenshot](assets/screenshots/kde.png)|![hyprland screenshot](assets/screenshots/hyprland.png)|
## Layout
```
├── assets ; Binary assets tracked in git
│   ├── screenshot.png
│   └── wallpaper.jpg
├── dotfiles ; Distro agnostic dotfiles
│   └── ... ; Stores configurations that do not depend on Nix
├── flake.lock
├── flake.nix ; Entry point
├── home ; home-manager configuration
│   ├── default.nix ; User and home-manager options
│   ├── packages ; Per-package home-manager configuration
│   │   └── ...
│   └── persist.nix ; Home opt-in state directories and files
├── hosts ; Host configurations
│   └── workstation
│   ├── default.nix ; Host configuration.nix equivalent
│   ├── hardware-configuration.nix ; Host hardware specific configuration
│   └── persist.nix ; System wide opt-in state directories and files
├── lib ; Custom helper functions
│   ├── default.nix
│   └── ...
├── modules ; System modules and sets of packages
│   ├── desktop
│   │   ├── apps
│   │   │   └── ...
│   │   └── environments
│   │   └── ...
│   └── system
│   └── ...
├── README.md
└── secrets ; Location of secrets not tracked in the git tree
└── pass
```
## Installing
This configuration uses impermanence with btrfs snapshots so you'll have to partition
your system in a certain way.
First you'll need this partition layout, assuming you're installing on `nvme0n1`.
```
DEVICE FILESYSTEM PURPOSE
/dev/nvme0n1
├─/dev/nvme0n1p1 vfat EFI partition
└─/dev/nvme0n1p2 btrfs Partition to house all the subvolumes
```
Inside of the btrfs root volume we're going to need 2 subvolumes.
```
SUBVOLUME MOUNT PURPOSE
root / Impermanent data
nix /nix Permanent data
```
You'll also need to create a read-only snapshot of the `root` subvolume
and call it `root-blank`.
After you've mounted all the subvolumes and EFI partition (`/boot`) in `/mnt`
clone this repository in to `/mnt/nix/config`. Adjust all the block ids of the partitions
in `hardware-configuration.nix` and create a hashed password using `mkpasswd` and store it
in the `secrets` directory as `pass`.
Finally, in the config directory run `nixos-install --flake '.#'`, reboot and you're done.
## Updating
This configuration sets up [nh](https://github.com/viperML/nh) for a prettier and more convenient
way of keeping the system up to date. To update you can simply run:
```sh
nix flake update /nix/config
nh os switch
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

View file

@ -1,6 +0,0 @@
#!/bin/sh
for f in *; do
[ -d "$f" ] && ln -svf "$PWD/$f" "$HOME/.config"
done

View file

@ -1,3 +0,0 @@
vim.bo.tabstop = 2
vim.bo.softtabstop = 2
vim.bo.shiftwidth = 2

View file

@ -1,3 +0,0 @@
vim.bo.tabstop = 2
vim.bo.softtabstop = 2
vim.bo.shiftwidth = 2

View file

@ -1,3 +0,0 @@
require"settings"
require"plugins"

View file

@ -1,55 +0,0 @@
return {
"hrsh7th/nvim-cmp",
dependencies = {
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-nvim-lsp",
{
"tamago324/cmp-zsh",
config = function()
require"cmp_zsh".setup {
zshrc = true,
filetypes = { "bash", "zsh", "sh" },
}
end,
},
"ray-x/cmp-treesitter",
"hrsh7th/cmp-nvim-lua",
"andersevenrud/cmp-tmux",
},
config = function()
local cmp = require"cmp"
cmp.setup {
snippet = {
expand = function(args)
require"luasnip".lsp_expand(args.body)
end,
},
view = {
entries = "native",
},
mapping = cmp.mapping.preset.insert {
['<C-k>'] = cmp.mapping.select_prev_item(),
['<C-j>'] = cmp.mapping.select_next_item(),
['<A-j>'] = cmp.mapping.scroll_docs(4),
['<A-k>'] = cmp.mapping.scroll_docs(-4),
['<S-CR>'] = cmp.mapping.complete(),
['<C-Space>'] = cmp.mapping.confirm({ select = true }),
['<C-e>'] = cmp.mapping.abort(),
},
sources = {
{ name = "path" },
{ name = "luasnip" },
{ name = "zsh" },
{ name = "nvim_lsp" },
{ name = "buffer" },
{ name = "treesitter" },
{ name = "nvim-lua" },
{ name = "tmux" },
},
}
end
}

View file

@ -1,5 +0,0 @@
return {
"numToStr/Comment.nvim",
opts = {},
lazy = false
}

View file

@ -1,7 +0,0 @@
return {
"stevearc/dressing.nvim",
config = function()
require"dressing".setup {
}
end
}

View file

@ -1,11 +0,0 @@
return {
"lukas-reineke/indent-blankline.nvim",
main = "ibl",
opts = {},
opts = {
indent = {
char = ""
}
}
}

View file

@ -1,22 +0,0 @@
if vim.fn.executable("git") ~= 1 then
vim.notify("git is not installed. Skipping plugins.", vim.log.levels.WARN)
return
end
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
plugins = require"util.require_dir"(vim.fn.stdpath("config").."/lua/plugins/", true)
require"lazy".setup(plugins)

View file

@ -1,49 +0,0 @@
return {
"rebelot/kanagawa.nvim",
config = function()
require"kanagawa".setup {
theme = "dragon",
background = {
dark = "dragon",
light = "lotus",
},
transparent = true,
colors = {
theme = {
all = {
ui = {
bg_gutter = "none",
},
},
},
},
overrides = function(colors)
local theme = colors.theme
return {
NormalFloat = { bg = "none" },
FloatBorder = { bg = "none" },
FloatTitle = { bg = "none" },
-- Save an hlgroup with dark background and dimmed foreground
-- so that you can use it where your still want darker windows.
-- E.g.: autocmd TermOpen * setlocal winhighlight=Normal:NormalDark
NormalDark = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m3 },
-- Popular plugins that open floats will link to NormalFloat by default;
-- set their background accordingly if you wish to keep them dark and borderless
LazyNormal = { bg = theme.ui.bg_m3, fg = theme.ui.fg_dim },
MasonNormal = { bg = theme.ui.bg_m3, fg = theme.ui.fg_dim },
TelescopeTitle = { fg = theme.ui.special, bold = true },
TelescopePromptNormal = { bg = theme.ui.bg_p1 },
TelescopePromptBorder = { fg = theme.ui.bg_p1, bg = theme.ui.bg_p1 },
TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 },
TelescopeResultsBorder = { fg = theme.ui.bg_m1, bg = theme.ui.bg_m1 },
TelescopePreviewNormal = { bg = theme.ui.bg_dim },
TelescopePreviewBorder = { bg = theme.ui.bg_dim, fg = theme.ui.bg_dim },
}
end,
}
vim.cmd"colorscheme kanagawa"
end
}

View file

@ -1,8 +0,0 @@
return function ()
require"lspconfig".ccls.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities(),
filetypes = {
"c"
}
}
end

View file

@ -1,8 +0,0 @@
return function ()
require"lspconfig".clangd.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities(),
filetypes = {
"cpp", "objc", "objcpp", "cuda", "proto"
}
}
end

View file

@ -1,4 +0,0 @@
return function()
require"lspconfig".hls.setup {}
end

View file

@ -1,5 +0,0 @@
return function ()
require"lspconfig".ts_ls.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities()
}
end

View file

@ -1,5 +0,0 @@
return function ()
require"lspconfig".texlab.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities()
}
end

View file

@ -1,24 +0,0 @@
return function()
require'lspconfig'.lua_ls.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities(),
on_init = function(client)
local path = client.workspace_folders[1].name
if vim.loop.fs_stat(path..'/.luarc.json') or vim.loop.fs_stat(path..'/.luarc.jsonc') then
return
end
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
runtime = {
version = 'LuaJIT'
},
workspace = {
checkThirdParty = false,
library = vim.api.nvim_get_runtime_file("", true)
}
})
end,
settings = {
Lua = {}
}
}
end

View file

@ -1,6 +0,0 @@
return function ()
require"lspconfig".nil_ls.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities()
}
end

View file

@ -1,5 +0,0 @@
return function ()
require"lspconfig".intelephense. setup {
capabilities = require"cmp_nvim_lsp".default_capabilities(),
}
end

View file

@ -1,10 +0,0 @@
return function()
require"lspconfig".basedpyright.setup {
settings = {
python = {
pythonPath = vim.fn.exepath("python3"),
},
},
}
end

View file

@ -1,11 +0,0 @@
return function()
require"lspconfig".rust_analyzer.setup {
settings = {
["rust-analyzer"] = {
diagnostics = {
enable = false,
},
},
},
}
end

View file

@ -1,5 +0,0 @@
return function()
require"lspconfig".bashls.setup {
capabilities = require"cmp_nvim_lsp".default_capabilities(),
}
end

View file

@ -1,29 +0,0 @@
return {
"neovim/nvim-lspconfig",
config = function()
local require_dir = require"util.require_dir"
local lspees = require_dir(vim.fn.stdpath("config").."/lua/plugins/lsp/", "plugins.lsp")
for _, lspee in ipairs(lspees) do
lspee()
end
local map = require"util.map"
local vlb = vim.lsp.buf
local format = function()
vlb.format { async = true }
end
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function()
map("n", "<leader>lgD", vlb.declaration, "[l]sp [g]o to [D]eclaration")
map("n", "<leader>lgd", vlb.definition, "[l]sp [g]o to [d]definition")
map("n", "<leader>lgi", vlb.implementation, "[l]sp [g]o to [i]mplementation")
map("n", "<leader>lgr", vlb.references, "[l]sp [g]o to [r]eferences")
map("n", "<leader>lh", vlb.hover, "[l]sp [h]over over selection")
map("n", "<leader>lfm", format, "[l]sp [f]or[m]at file")
map("n", "<leader>lca", vlb.code_action, "[l]sp [C]ode [a]ction")
end,
})
end
}

View file

@ -1,139 +0,0 @@
return {
"nvim-lualine/lualine.nvim",
dependencies = {
"nvim-tree/nvim-web-devicons",
},
config = function()
-- Inspired by https://github.com/nvim-lualine/lualine.nvim/blob/master/examples/evil_lualine.lua
local rgb_to_hex = require"util.rgb_to_hex"
local hl = require"util.hl"
local config = {
options = {
component_separators = "",
section_separators = "",
theme = {
normal = {
c = {
fg = rgb_to_hex(hl("Normal").fg),
bg = "none",
},
},
inactive = {
c = {
fg = rgb_to_hex(hl("Normal").fg),
bg = "none",
},
},
},
},
sections = {
lualine_a = {}, lualine_b = {}, lualine_y = {}, lualine_z = {}, -- Remove defaults
lualine_c = {}, lualine_x = {}, -- Extend these later
},
inactive_sections = {
lualine_a = {}, lualine_b = {}, lualine_c = {}, lualine_x = {}, lualine_y = {}, lualine_z = {},
},
}
local function buffer_not_empty()
return vim.fn.empty(vim.fn.expand("%:t")) ~= 1
end
local function ins_l(component)
table.insert(config.sections.lualine_c, component)
end
local function ins_r(component)
table.insert(config.sections.lualine_x, component)
end
local distro = require"util.get_distro"()
ins_l {
function()
return ""
end,
padding = {
left = 0,
right = 0,
},
color = {
fg = rgb_to_hex(hl("Comment").fg),
},
}
ins_l {
function()
return distro.traits.icon
end,
color = {
fg = distro.traits.color,
},
}
ins_l {
"filename",
cond = buffer_not_empty,
color = {
fg = rgb_to_hex(hl("Operator").fg),
}
}
ins_l {
"filesize",
cond = buffer_not_empty,
}
ins_l {
"o:encoding",
cond = buffer_not_empty,
}
ins_l {
"fileformat",
icons_enabled = false,
cond = buffer_not_empty,
}
ins_r { "diagnostics" }
ins_r { "diff" }
ins_r {
"branch",
padding = {
right = 0,
},
color = {
fg = rgb_to_hex(hl("Constant").fg)
}
}
ins_r {
"location",
}
ins_r {
"mode",
fmt = string.lower,
color = {
fg = rgb_to_hex(hl("String").fg),
}
}
ins_r {
function()
return ""
end,
padding = {
left = 0,
right = 0,
},
color = {
fg = rgb_to_hex(hl("Comment").fg),
}
}
require"lualine".setup(config)
end
}

View file

@ -1,6 +0,0 @@
return {
"norcalli/nvim-colorizer.lua",
config = function()
require"colorizer".setup()
end,
}

View file

@ -1,24 +0,0 @@
return {
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
require"telescope".setup {}
local tb = require"telescope.builtin"
local map = require"util.map"
-- Default pickers
map("n", "<leader>tf", tb.find_files,"[T]elescope [f]iles")
map("n", "<leader>tg", tb.live_grep, "[T]elescope [g]rep")
map("n", "<leader>tb", tb.buffers, "[T]elescope [b]uffers")
map("n", "<leader>tm", function()
tb.man_pages({ "ALL" })
end, "[T]elescope [m]an pages")
map("n", "<leader>tk", tb.keymaps, "[T]elescope [k]eymaps")
map("n", "<leader>tk", tb.keymaps, "[T]elescope [k]eymaps")
-- LSP pickers
map("n", "<leader>tld", tb.diagnostics, "[T]elescope [l]sp [d]iagnostics")
map("n", "<leader>tlr", tb.lsp_references, "[T]elescope [l]sp [r]eferences")
end,
}

View file

@ -1,15 +0,0 @@
return {
"nvim-treesitter/nvim-treesitter",
config = function()
require"nvim-treesitter.configs".setup {
ensure_installed = "all", -- pipebomb
highlight = {
enable = true,
},
indent = {
enable = true,
},
}
end,
run = ":TSUpdate",
}

View file

@ -1,8 +0,0 @@
return {
"lervag/vimtex",
lazy = false,
init = function()
vim.g.vimtex_view_method = "zathura"
end
}

View file

@ -1,37 +0,0 @@
vim.api.nvim_create_autocmd("BufReadPost", {
pattern = "*.h",
callback = function()
-- Toggle .h files between being interpreted as C and C++
-- in case I have to work on a C++ header that was saved
-- (incorrectly) as a C header file.
vim.api.nvim_create_user_command("Fytwmmrt", function()
if not vim.b.fu then
vim.b.fu = true
vim.bo.filetype = "cpp"
vim.cmd([[
LspStop ccls
LspStart clangd
]])
else
vim.b.fu = false
vim.bo.filetype = "c"
vim.cmd([[
LspStop ccls
LspStart clangd
]])
end
end, { desc = "Fuck you to whoever made me run this."})
-- Set all .h files to be interpreted as C by default instead
-- of C++. If you use .h for your C++ headers instead of .hpp
-- you should be ashamed of yourself and change and grow as a
-- person as to not repeat such heretical offenses.
if not vim.b.fu then
vim.bo.filetype = "c"
vim.cmd([[
LspStop clangd
LspStart ccls
]])
end
end,
})

View file

@ -1,3 +0,0 @@
require"settings.options"
require"settings.autocmds"
require"settings.keymaps"

View file

@ -1,7 +0,0 @@
local map = require"util.map"
map("n", "<Space>", "<Nop>", "Mapleader")
vim.g.mapleader = " "
map("n", "<leader>df", vim.diagnostic.open_float, "[D]iagnostics [f]loat")

View file

@ -1,28 +0,0 @@
local options = {
tabstop = 4,
softtabstop = 4,
shiftwidth = 4,
expandtab = true,
number = true,
relativenumber = true,
fileencoding = "utf-8",
cursorline = true,
wrap = false,
signcolumn = "yes",
swapfile = false,
errorbells = false,
undofile = true,
incsearch = true,
hlsearch = false,
backup = false,
termguicolors = true,
scrolloff = 8,
sidescrolloff = 8,
}
for option, value in pairs(options) do
pcall(function()
vim.opt[option] = value
end)
end

View file

@ -1,73 +0,0 @@
local function distro_traits(name)
local icons = {
[ "unknown" ] = {
icon = "",
color = "#f3be25",
},
[ "debian" ] = {
icon = "",
color = "#d70a53",
},
[ "gentoo" ] = {
icon = "",
color = "#54487A",
},
[ "nixos" ] = {
icon = "",
color = "#5277C3",
},
[ "\"opensuse-tumbleweed\"" ] = {
icon = "",
color = "#73ba25",
},
}
if os.getenv("CONTAINER_ID") ~= nil then
icons["distrobox"] = {
icon = "[󰏗 " .. os.getenv("CONTAINER_ID") .. "]",
color = "#917d62",
}
end
local icon = icons[name]
if icon == nil then
icon = icons["unknown"]
end
return icon
end
return function()
if os.getenv("CONTAINER_ID") ~= nil then
return {
name = "distrobox",
traits = distro_traits("distrobox"),
}
end
local release_file = io.open("/etc/os-release", "rb")
if release_file == nil then
return {
name = "unknown",
traits = distro_traits("unknown"),
}
end
local content = vim.split(release_file:read("*a"), "\n")
local distro_id = nil
for _, line in ipairs(content) do
if string.sub(line, 0, 3) == "ID=" then
distro_id = string.sub(line, 4, -1)
goto distro_id_found
end
end
::distro_id_found::
release_file:close()
return {
name = distro_id,
traits = distro_traits(distro_id)
}
end

View file

@ -1,7 +0,0 @@
return function (name)
local hl = vim.api.nvim_get_hl(0, { name = name })
while hl.link ~= nil do
hl = vim.api.nvim_get_hl(0, { name = hl.link })
end
return hl
end

View file

@ -1,9 +0,0 @@
return function(mode, key, mapping, comment)
local opts = {
noremap = true,
silent = true,
desc = comment
}
vim.keymap.set(mode, key, mapping, opts)
end

View file

@ -1,27 +0,0 @@
return function(dir, skip_init)
local returns = {}
local lua_files = vim.split(vim.fn.glob(dir.."/*.lua"), "\n")
local namespace = string.gsub(dir, vim.fn.stdpath("config").."/lua/", "")
namespace = string.gsub(namespace, "%/", ".")
for _, file in ipairs(lua_files) do
file = string.gsub(file, "%.lua", "")
file = string.gsub(file, dir.."/", namespace)
if skip_init and file == namespace.."init" then
goto continue
end
local require_ok, require_return = pcall(require, file)
if require_ok then
table.insert(returns, require_return)
else
vim.notify("Could not require file: '"..file.."': "..require_return, vim.log.levels.WARNING)
end
::continue::
end
return returns
end

View file

@ -1,11 +0,0 @@
return function(rgb)
if rgb == nil then
return nil
end
local r = string.format("%02x", (rgb / 65536) % 256)
local g = string.format("%02x", (rgb / 256) % 256)
local b = string.format("%02x", rgb % 256)
return "#"..r..g..b
end

View file

@ -1,12 +0,0 @@
#!/usr/bin/env zsh
# Prefetch paths
source "$ZDOTDIR/conf.d/path.zsh"
for file in $ZDOTDIR/conf.d/*; do
if [[ "$file" == *"path.zsh" ]]; then
continue
fi
source "$file"
done

View file

@ -1,8 +0,0 @@
#!/usr/bin/env zsh
alias reload="exec zsh"
if [ -x "$(command -v nix)" ]; then
alias nix-develop="nix develop -c $SHELL"
fi

View file

@ -1,11 +0,0 @@
#!/usr/bin/env zsh
alias ls='ls --color=auto'
alias ll='ls -lah --color=auto'
alias grep='grep --color=auto'
term_name=$(ps -o comm= "$PPID")
if [ "$term_name" = "xterm" ] && [ -n "$(command -v "transset")" ]; then
transset -a 0.95 > /dev/null
fi

View file

@ -1,20 +0,0 @@
#!/usr/bin/env zsh
if [ -z "$FZF_TAB_PLUGIN" ]; then
if [ ! -d "$HOME/.cache/fzf-tab" ]; then
echo "Installing fzf-tab"
git clone "https://github.com/Aloxaf/fzf-tab" "$HOME/.cache/fzf-tab"
fi
FZF_TAB_PLUGIN="$HOME/.cache/fzf-tab/fzf-tab.plugin.zsh"
fi
autoload -Uz compinit
compinit
source "$FZF_TAB_PLUGIN"
zstyle ':completion:*:git-checkout:*' sort false
if [ -n "$TMUX" ]; then
zstyle ':fzf-tab:*' fzf-command ftb-tmux-popup
fi

View file

@ -1,3 +0,0 @@
#!/usr/bin/env zsh
# TODO: Script to prompt which environment the user wants to enter in to

View file

@ -1,6 +0,0 @@
#!/usr/bin/env zsh
if [ -n "$(command -v qt5ct)" ] && [ -z "$DESKTOP_SESSION" ]; then
export QT_QPA_PLATFORMTHEME=qt5ct
fi

View file

@ -1,9 +0,0 @@
#!/usr/bin/env zsh
if [ -n "$(command -v thefuck)" ]; then
fuck() {
eval $(thefuck --alias)
fuck
}
fi

View file

@ -1,5 +0,0 @@
#!/usr/bin/env zsh
GPG_TTY=$(tty)
export GPG_TTY

View file

@ -1,7 +0,0 @@
#!/usr/bin/env zsh
if [ -n "$(command -v "nvim")" ]; then
export MANPAGER='nvim +Man!'
export EDITOR="nvim"
fi

View file

@ -1,11 +0,0 @@
#!/usr/bin/env zsh
# Nix specific zsh configuration
if [ -x "$(command -v nix)" ]; then
source "$NIX_SHELL_PLUGIN"
if [ -f "$HOME/.config/user-dirs.dirs" ]; then
source "$HOME/.config/user-dirs.dirs"
fi
fi

View file

@ -1,50 +0,0 @@
#!/usr/bin/env zsh
add_to_path() {
if [ -d "$1" ] && [[ "$PATH" != *"$1"* ]]; then
PATH="$PATH:$1"
fi
}
add_to_path "$HOME/.local/bin"
if [ -f "/etc/profile.d/nix.sh" ]; then
source /etc/profile.d/nix.sh
fi
# Language package mangers
if [ -n "$(command -v go)" ]; then
export GOPATH="$HOME/.local/share/go"
add_to_path "$HOME/.local/share/go/bin"
fi
if [ -n "$(command -v npm)" ]; then
if [ -f "$HOME/.npmrc" ]; then
if [ -z "$(grep prefix "$HOME/.npmrc")" ]; then
npm config set prefix "$HOME/.local/share/npm"
fi
else
npm config set prefix "$HOME/.local/share/npm"
fi
add_to_path "$HOME/.local/share/npm/bin"
fi
if [ -n "$(command -v cargo)" ]; then
export CARGO_HOME="$HOME/.local/share/cargo"
add_to_path "$HOME/.local/share/cargo/bin"
fi
if [ -n "$(command -v pip3)" ] && [ -n "$(command -v virtualenv)" ]; then
if [ ! -d "$HOME/.local/share/python3-venv" ]; then
python3 -m venv "$HOME/.local/share/python3-venv"
fi
if [ "$(grep "executable" "$HOME/.local/share/python3-venv/pyvenv.cfg" | awk '{print $3}')" \
!= "$(realpath $(command -v python3))" ]; then
python3 -m venv --upgrade "$HOME/.local/share/python3-venv"
fi
export VIRTUAL_ENV_DISABLE_PROMPT=true
source "$HOME/.local/share/python3-venv/bin/activate"
fi

View file

@ -1,33 +0,0 @@
#!/usr/bin/env zsh
distro=$(cat /etc/os-release | grep -w 'ID=.*' | sed -e 's/ID=//g' | awk '{print $1}')
case "$distro" in
"debian") dicon="%F{red}%f" ;;
"gentoo") dicon="%F{magenta}%f" ;;
"\"opensuse-tumbleweed\"") dicon="%F{green} %f" ;;
"nixos") dicon="%F{cyan}%f" ;;
*) dicon="%F{yellow}[󰘧]%f" ;;
esac
if [ -n "$IN_NIX_SHELL" ]; then
if [ -z "$NIX_SHELL_PACKAGES" ]; then
nix_shell_ps1=" %F{red}nix-shell%f"
else
nix_shell_ps1=" %F{red}{ $NIX_SHELL_PACKAGES }%f"
fi
else
nix_shell_ps1=""
fi
if [ -n "$CONTAINER_ID" ]; then
dicon="%F{bg-yellow}[󰏗 $CONTAINER_ID]%f"
fi
setopt prompt_subst
autoload -Uz vcs_info
precmd () { vcs_info }
zstyle ':vcs_info:*' formats ' %F{yellow}(%b)%f'
NL=$'\n'
export PS1='[$dicon %F{green}%3~%f$vcs_info_msg_0_$nix_shell_ps1]# '

View file

@ -1,13 +0,0 @@
#!/usr/bin/env zsh
if [ -z "$DESKTOP_SESSION" ]; then
if [ -n "$(command -v gnome-keyring-daemon)" ]; then
if [ -z "$(pidof gnome-keyring-daemon)" ]; then
eval $(gnome-keyring-daemon --start)
export SSH_AUTH_SOCK
fi
else
{ eval $(ssh-agent -s); } > /dev/null 2>&1
fi
fi

View file

@ -1,29 +0,0 @@
#!/usr/bin/env zsh
export HISTFILE=~/.cache/zsh_history
export HISTSIZE=10000
export SAVEHIST=$HISTSIZE
setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY
setopt HIST_IGNORE_SPACE
setopt HIST_SAVE_NO_DUPS
if [ -z "$AUTOSUGGEST_PLUGIN" ]; then
import_file="/usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
else
import_file="$AUTOSUGGEST_PLUGIN"
fi
if [ ! -f "$import_file" ]; then
if [ ! -d "$HOME/.cache/zsh-autosuggestions" ]; then
echo "Installing zsh-autosuggestions..."
git clone "https://github.com/zsh-users/zsh-autosuggestions.git" "$HOME/.cache/zsh-autosuggestions"
fi
import_file="$HOME/.cache/zsh-autosuggestions/zsh-autosuggestions.zsh"
fi
source "$import_file"
ZSH_AUTOSUGGEST_STRATEGY=(history completion)

View file

@ -1,18 +0,0 @@
#!/usr/bin/env zsh
if [ -z "$SYNTAX_PLUGIN" ]; then
import_file="/usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
else
import_file="$SYNTAX_PLUGIN"
fi
if [ ! -f "$import_file" ]; then
if [ ! -d "$HOME/.cache/zsh-syntax-highlighting" ]; then
echo "Installing zsh-syntax-highlighting..."
git clone "https://github.com/zsh-users/zsh-syntax-highlighting.git" "$HOME/.cache/zsh-syntax-highlighting"
fi
import_file="$HOME/.cache/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
fi
source "$import_file"

87
flake.lock generated
View file

@ -1,39 +1,41 @@
{
"nodes": {
"aagl": {
"disko": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1734540176,
"narHash": "sha256-msxbnOw/nh8GJ87YtBEDT1jhVldOBtxHRF2KgvYPeDA=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "00df3ad02364a6fb8f1105dc72ae770b748c62eb",
"lastModified": 1734088167,
"narHash": "sha256-snPBgTqwn3FPZVdFC5yt7Bnk3squim1vZOZ8CObWykk=",
"owner": "nix-community",
"repo": "disko",
"rev": "65a441502c9382d41ada1adbc9bd31d6c9b00fe2",
"type": "github"
},
"original": {
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"owner": "nix-community",
"ref": "latest",
"repo": "disko",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"lastModified": 1736143030,
"narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
@ -44,15 +46,16 @@
]
},
"locked": {
"lastModified": 1736204492,
"narHash": "sha256-CoBPRgkUex9Iz6qGSzi/BFVUQjndB0PmME2B6eEyeCs=",
"lastModified": 1735344290,
"narHash": "sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "20665c6efa83d71020c8730f26706258ba5c6b2a",
"rev": "613691f285dad87694c2ba1c9e6298d04736292d",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"repo": "home-manager",
"type": "github"
}
@ -88,36 +91,42 @@
"type": "github"
}
},
"plasma-manager": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1735049224,
"narHash": "sha256-fWUd9kyXdepphJ7cCzOsuSo7l0kbFCkUqfgKqZyFZzE=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "d16bbded0ae452bc088489e7dca3ef58d8d1830b",
"lastModified": 1735774519,
"narHash": "sha256-CewEm1o2eVAnoqb6Ml+Qi9Gg/EfNAxbRx1lANGVyoLI=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1736012469,
"narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "plasma-manager",
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"aagl": "aagl",
"disko": "disko",
"flake-parts": "flake-parts",
"home-manager": "home-manager",
"impermanence": "impermanence",
"nixpkgs": "nixpkgs",
"plasma-manager": "plasma-manager"
"nixpkgs-unstable": "nixpkgs-unstable"
}
}
},

View file

@ -1,32 +1,32 @@
{
description = "My NixOS configuration files.";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
impermanence.url = "github:nix-community/impermanence";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
plasma-manager = {
url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix";
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
nixpkgs-unstable,
flake-parts,
impermanence,
home-manager,
plasma-manager,
aagl,
disko,
...
} @ inputs: let
lib = nixpkgs.lib.extend (final: prev:
@ -34,16 +34,11 @@
);
in {
nixosConfigurations = lib.mkHosts {
modules = [
home-manager.nixosModules.home-manager {
home-manager.sharedModules = [
plasma-manager.homeManagerModules.plasma-manager
];
}
impermanence.nixosModules.impermanence
];
nixpkgs = nixpkgs;
inputs = inputs;
modules = [
disko.nixosModules.disko
];
};
};
}

View file

@ -1,39 +0,0 @@
{ config, ... }:
{
users.users.hu = {
isNormalUser = true;
extraGroups = [ "wheel" ];
hashedPasswordFile = "/nix/config/secrets/pass";
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.hu = {
home.username = "hu";
home.homeDirectory = "/home/hu";
home.stateVersion = config.system.stateVersion;
xdg = {
enable = true;
userDirs = {
documents = "/home/hu/documents";
download = "/home/hu/download";
music = "/home/hu/music";
pictures = "/home/hu/images";
videos = "/home/hu/videos";
# I will never need this so they're getting hidden
publicShare = "/home/hu/.local/share/xdg/public";
templates = "/home/hu/.local/share/xdg/templates";
};
};
};
};
imports = [
./persist.nix
];
}

View file

@ -1,24 +0,0 @@
{ ... }:
{
environment.persistence."/nix/persist".users.hu = {
directories = [
"archives"
"documents"
"programming"
"source"
"games"
"images"
"videos"
# Program files
{ directory = ".gnupg"; mode = "0700"; }
{ directory = ".ssh"; mode = "0700"; }
{ directory = ".nixops"; mode = "0700"; }
{ directory = ".local/share/keyrings"; mode = "0700"; }
{ directory = ".pki"; mode = "0700"; }
".local/share/direnv"
];
};
}

97
hosts/puter/default.nix Normal file
View file

@ -0,0 +1,97 @@
{ config, pkgs, lib, ... }:
{
imports = [
./persist.nix
./disko.nix
./packages.nix
];
time.timeZone = "Europe/Berlin";
networking = {
hostName = "puter";
useDHCP = true;
};
hardware.cpu.amd.updateMicrocode = true;
services = {
fstrim.enable = true;
btrfs.autoScrub.enable = true;
fwupd.enable = true;
};
boot = {
loader = {
canTouchEfiVariables = true;
grub = {
enable = true;
efiSupport = true;
gfxmodeEfi = "1920x1080";
};
};
tmp.useTmpfs = true;
kernelPackages = pkgs.linuxPackages_xanmod_latest;
supportedFilesystems = [ "btfs" "vfat" "xfs" ];
kernelModules = [ "kvm-amd" ];
extraModprobeConfig = "options kvm_amd nested=1";
initrd = {
availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${config.fileSystems."/".device} /btrfs_tmp
if [[ -e /btrfs_tmp/root ]]; then
mkdir -p /btrfs_tmp/old_roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
};
};
fileSystems = {
# These are system specific. If you have any additional drives that are not
# your root device you can add and mount them here. Added nofail so that you can
# install this configuration on a device without it exploding when you don't have
# these specific partitions.
"/mnt/vault" = {
device = "/dev/disk/by-uuid/048d175b-0e3e-4ec7-955b-3d9a45f9f237";
options = [ "nofail" ];
fsType = "xfs";
};
"/mnt/attic" = {
device = "/dev/disk/by-uuid/ec32ce36-9f53-4f44-ac8f-2c9163f0b3d7";
options = [ "nofail" ];
fsType = "xfs";
};
};
nixpkgs = {
config = {
allowUnfree = true;
};
hostPlatform = lib.mkDefault "x86_64-linux";
};
system.stateVersion = "24.11"; # [managed by install.sh] { state version }
}

62
hosts/puter/disko.nix Normal file
View file

@ -0,0 +1,62 @@
{ ... }:
{
disko.devices = {
master = {
type = "disk";
device = ""; # [managed by install.sh] { device }
content = {
type = "gpt";
partitions = {
ESP = {
priority = 1;
name = "efi";
start = "1M";
end = "1024M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"noatime"
];
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" "-L nixos" ];
postCreateHook = ''
TMP_MNT=$(mktemp -d)
MNT_PART="" # [managed by install.sh] { root partition }
mount "$MNT_PART" "$TMP_MNT" -o subvol=/
trap 'umount "$TMP_MNT"; rm -rf "$TMP_MNT"' EXIT
btrfs subvolume snapshot "$TMP_MNT/root" "$TMP_MNT/blank"
'';
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = [
"noatime"
"compress=zstd"
];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = [
"noatime"
"compress=zstd"
];
};
};
};
};
};
};
};
};
}

11
hosts/puter/packages.nix Normal file
View file

@ -0,0 +1,11 @@
{ ... }:
{
imports = let
modules = ../../modules/nixos;
in [
"${modules}/hardware/nvidia"
"${modules}/hardware/audio"
];
}

0
hosts/puter/persist.nix Normal file
View file

View file

@ -1,96 +0,0 @@
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
./persist.nix
../../home/default.nix
../../modules/desktop/environments/kde.nix
../../modules/system/basic.nix
../../modules/system/security.nix
../../modules/desktop/apps/communication.nix
../../modules/desktop/apps/games.nix
../../modules/desktop/apps/multimedia.nix
../../modules/system/virtualisation.nix
../../modules/system/development.nix
../../modules/packages/firefox.nix
../../modules/packages/zsh.nix
../../modules/packages/fastfetch.nix
../../modules/packages/tmux.nix
];
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub = {
enable = true;
efiSupport = true;
device = "nodev";
gfxmodeEfi = "1920x1080";
};
boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
boot.supportedFilesystems = [ "btrfs" "xfs" ];
networking = {
hostName = "workstation";
enableIPv6 = false;
};
time.timeZone = "Europe/Berlin";
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "uk";
# useXkbConfig = true;
};
nixpkgs.config.allowUnfree = true;
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
};
nvidia = {
modesetting.enable = true;
open = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
};
};
programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
};
nix = {
settings = {
substituters = [
"https://cuda-maintainers.cachix.org"
];
trusted-public-keys = [
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
};
extraOptions = ''
experimental-features = nix-command flakes
'';
};
# nixpkgs.config.cudaSupport = true;
system.stateVersion = "23.11";
}

View file

@ -1,78 +0,0 @@
{ config, lib, modulesPath, ... }:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
fileSystems."/" = {
device = "/dev/disk/by-uuid/5cc0482e-ac92-41c7-b2fc-2d9b4a19eeec";
fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" "noatime" ];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/5cc0482e-ac92-41c7-b2fc-2d9b4a19eeec";
fsType = "btrfs";
options = [ "subvol=nix" "compress=zstd" "noatime" ];
neededForBoot = true;
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3012-B13E";
fsType = "vfat";
};
fileSystems."/home/hu/mounts/vault" = {
device = "/dev/disk/by-uuid/048d175b-0e3e-4ec7-955b-3d9a45f9f237";
fsType = "xfs";
};
fileSystems."/home/hu/mounts/attic" = {
device = "/dev/disk/by-uuid/ec32ce36-9f53-4f44-ac8f-2c9163f0b3d7";
fsType = "xfs";
};
boot.initrd.availableKernelModules = [
"nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
boot.extraModprobeConfig = "options kvm_amd nested=1";
boot.kernelParams = [
"nvidia_drm.fbdev=1"
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
];
boot.initrd.postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${config.fileSystems."/".device} /btrfs_tmp
if [[ -e /btrfs_tmp/root ]]; then
mkdir -p /btrfs_tmp/old_roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,23 +0,0 @@
{ ... }:
{
environment.persistence."/nix/persist" = {
hideMounts = true;
directories = [
"/var/log"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
{
directory = "/var/lib/colord";
user = "colord";
group = "colord";
mode = "u=rwx,g=rx,o=";
}
"/etc/NetworkManager/system-connections"
];
files = [
"/etc/machine-id"
];
};
}

View file

@ -1,78 +0,0 @@
{ pkgs, ... }:
{
imports = [
./hardware-configuration.nix
./persist.nix
../../home/default.nix
../../modules/desktop/environments/river.nix
../../modules/system/basic.nix
../../modules/system/security.nix
../../modules/desktop/apps/communication.nix
../../modules/desktop/apps/multimedia.nix
../../modules/system/development.nix
../../modules/packages/firefox.nix
../../modules/packages/zsh.nix
../../modules/packages/fastfetch.nix
../../modules/packages/tmux.nix
];
hardware.bluetooth.enable = true;
boot = {
loader.grub = {
enable = true;
device = "/dev/sda";
gfxmodeEfi = "1366x768";
};
kernelPackages = pkgs.linuxPackages_xanmod_latest;
supportedFilesystems = [ "btrfs" ];
};
networking = {
hostName = "x220";
networkmanager.enable = true;
};
users.users.hu.extraGroups = [ "networkmanager" ];
time.timeZone = "Europe/Berlin";
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "de";
# useXkbConfig = true;
};
nixpkgs.config.allowUnfree = true;
programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
};
services.tlp.enable = true;
nix = {
extraOptions = ''
experimental-features = nix-command flakes
'';
};
system.stateVersion = "24.05";
}

View file

@ -1,61 +0,0 @@
{ config, lib, modulesPath, ... }:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
fileSystems."/" = {
device = "/dev/disk/by-uuid/e0b531cf-b575-4579-b866-9b7265e01b0a";
fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" "noatime" "ssd" ];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/e0b531cf-b575-4579-b866-9b7265e01b0a";
fsType = "btrfs";
options = [ "subvol=nix" "compress=zstd" "noatime" "ssd" ];
neededForBoot = true;
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/bfe6e556-44e9-427f-9ae6-eddae6c62298";
fsType = "ext4";
};
boot.initrd.luks.devices."vg".device = "/dev/disk/by-uuid/92b4f484-2c00-47e7-baf6-9f396883e231";
boot.initrd.availableKernelModules = [
"ehci_pci" "ahci" "xhci_pci" "usb_storage" "sd_mod" "sdhci_pci"
];
boot.kernelModules = [ "kvm-intel" ];
boot.initrd.postDeviceCommands = lib.mkAfter ''
mkdir /btrfs_tmp
mount ${config.fileSystems."/".device} /btrfs_tmp
if [[ -e /btrfs_tmp/root ]]; then
mkdir -p /btrfs_tmp/old_roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,23 +0,0 @@
{ ... }:
{
environment.persistence."/nix/persist" = {
hideMounts = true;
directories = [
"/var/log"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
{
directory = "/var/lib/colord";
user = "colord";
group = "colord";
mode = "u=rwx,g=rx,o=";
}
"/etc/NetworkManager/system-connections"
];
files = [
"/etc/machine-id"
];
};
}

View file

@ -1,7 +1,5 @@
{ lib }:
# todo: Write a function to import all of these automatically
let
fs = import ./fs.nix { inherit lib; };
hosts = import ./hosts.nix { inherit lib; };

View file

@ -2,9 +2,9 @@
{
mkHosts = {
modules,
nixpkgs,
inputs,
modules,
}: builtins.listToAttrs (builtins.map (host: {
name = host;
value = nixpkgs.lib.nixosSystem {

View file

@ -1,19 +0,0 @@
{ pkgs, ... }:
{
environment.persistence."/nix/persist".users.hu.directories = [
".config/Signal"
".config/vesktop"
".config/tutanota-desktop"
".config/tuta_integration"
".config/Element"
];
environment.systemPackages = with pkgs; [
tutanota-desktop
signal-desktop
element-desktop
vesktop
];
}

View file

@ -1,35 +0,0 @@
{ pkgs, inputs, ... }:
{
environment.persistence."/nix/persist".users.hu.directories = [
".steam"
".local/share/Steam"
".local/share/honkers-railway-launcher"
".local/share/anime-game-launcher"
".local/share/PrismLauncher"
".xlcore"
".local/share/Euro Truck Simulator 2"
".local/share/osu"
".local/share/Colossal Order"
];
programs.steam = {
enable = true;
remotePlay.openFirewall = false;
dedicatedServer.openFirewall = true;
gamescopeSession.enable = true;
};
environment.systemPackages = with pkgs; [
prismlauncher
protonup-qt
osu-lazer-bin
protontricks
];
imports = [ inputs.aagl.nixosModules.default ];
nix.settings = inputs.aagl.nixConfig;
programs.anime-game-launcher.enable = true;
}

View file

@ -1,41 +0,0 @@
{ pkgs, ... }:
{
environment.persistence."/nix/persist".users.hu.directories = [
".config/OpenTabletDriver"
".config/tidal-hifi"
];
environment.systemPackages = with pkgs; [
mpv
imagemagick
ffmpeg-full
yt-dlp
(pkgs.symlinkJoin {
name = "flowblade";
paths = [ pkgs.flowblade ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
rm "$out/bin/flowblade"
echo "#!/bin/sh" > "$out/bin/flowblade"
echo "SDL12COMPAT_NO_QUIT_VIDEO=1 \
GDK_BACKEND=x11 \
SDL_VIDEODRIVER=x11 \
${pkgs.flowblade}/bin/flowblade" >> "$out/bin/flowblade"
chmod 555 "$out/bin/flowblade"
'';
})
gimp
inkscape
krita
tidal-hifi
blender
obs-studio
];
# hardware.opentabletdriver = {
# enable = true;
# daemon.enable = true;
# };
}

View file

@ -1,218 +0,0 @@
{ pkgs, ...}:
{
imports = [
../../system/fonts.nix
../../packages/waybar.nix
../../packages/rofi.nix
../../packages/foot.nix
];
environment.systemPackages = with pkgs; [
hyprpaper
rofi-wayland
foot
wl-clipboard
nautilus
pavucontrol
nvidia-vaapi-driver
];
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "nvidia";
XDG_SESSION_TYPE = "wayland";
GBM_BACKEND = "nvidia-drm";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
NVD_BACKEND = "direct";
MOZ_DISABLE_RDD_SANDBOX = 1;
NIXOS_OZONE_WL = 1;
};
programs.hyprland = {
enable = true;
};
services.gnome.gnome-keyring.enable = true;
security.pam.services.greetd.enableGnomeKeyring = true;
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal";
TTYReset = true;
TTYHangup = true;
TTYVTDisallocate = true;
};
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --asterisks --cmd hyprland";
user = "greeter";
};
};
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
};
home-manager.users.hu = {
home.pointerCursor = {
gtk.enable = true;
name = "Bibata-Modern-Classic";
package = pkgs.bibata-cursors;
size = 24;
};
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
gtk = {
enable = true;
theme = {
name = "adw-gtk3-dark";
package = pkgs.adw-gtk3;
};
iconTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
};
};
qt = {
enable = true;
platformTheme.name = "adwaita";
style = {
name = "adwaita-dark";
package = pkgs.adwaita-qt;
};
};
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
splash = false;
preload = [
"/nix/config/assets/wallpapers/hyprland.jpg"
];
wallpaper = [
",/nix/config/wallpapers/hyprland.jpg"
];
};
};
wayland.windowManager.hyprland = {
enable = true;
systemd = {
enable = true;
variables = [ "--all" ];
};
settings = {
"$mod" = "SUPER";
"$terminal" = "foot";
"$menu" = "rofi -show drun";
monitor = "DP-1,1920x1080@144,auto,1";
cursor = {
no_hardware_cursors = true;
};
render = {
explicit_sync = 0;
};
input = {
kb_layout = "gb:intl";
follow_mouse = 1;
};
general = {
gaps_in = 3;
gaps_out = 6;
border_size = 2;
layout = "master";
allow_tearing = true;
"col.inactive_border" = "rgb(242424)";
"col.active_border" = "rgb(3584E4)";
};
master = {
mfact = 0.5;
};
decoration = {
rounding = 5;
blur = {
enabled = true;
size = 4;
passes = 1;
};
};
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bind = [
"$mod, P, exec, $menu"
"$mod, RETURN, exec, $terminal"
", Scroll_Lock, exec, pavucontrol"
"$mod, f, exec, nautilus"
", XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", Pause, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
"$mod SHIFT, C, killactive"
"$mod, SPACE, togglefloating"
"$mod SHIFT, M, exit,"
"$mod SHIFT, RETURN, layoutmsg, swapwithmaster"
"$mod SHIFT, h, layoutmsg, mfact -0.05"
"$mod SHIFT, l, layoutmsg, mfact +0.05"
"$mod, h, movefocus, l"
"$mod, j, movefocus, d"
"$mod, k, movefocus, u"
"$mod, l, movefocus, r"
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, 9, movetoworkspace, 9"
];
};
};
};
}

View file

@ -1,209 +0,0 @@
{ pkgs, ... }:
let
sddm-background-drv = pkgs.stdenvNoCC.mkDerivation {
name = "sddm-background-drv";
src = ../../../assets/wallpapers;
dontUnpack = true;
installPhase = ''
cp $src/kde.png $out
'';
};
in {
imports = [
../../system/fonts.nix
];
environment.persistence."/nix/persist".directories = [
"/var/lib/AccountsService/"
];
environment.persistence."/nix/persist".users.hu.directories = [
".local/share/kwalletd"
".local/share/baloo"
".local/share/dolphin"
];
environment.persistence."/nix/persist".users.hu.files = [
".config/kwinoutputconfig.json" # https://github.com/nix-community/plasma-manager/issues/172
".local/state/konsolestaterc"
];
networking.networkmanager.enable = true;
users.users.hu.extraGroups = [ "networkmanager" ];
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "nvidia";
XDG_SESSION_TYPE = "wayland";
GBM_BACKEND = "nvidia-drm";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
NVD_BACKEND = "direct";
NIXOS_OZONE_WL = 1;
};
services.desktopManager.plasma6.enable = true;
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
environment.plasma6.excludePackages = with pkgs.kdePackages; [
plasma-browser-integration
khelpcenter
krdp
];
environment.systemPackages = with pkgs; [
nvidia-vaapi-driver
kdePackages.sddm-kcm
(pkgs.writeTextDir "share/sddm/themes/breeze/theme.conf.user" ''
[General]
background=${sddm-background-drv}
'')
networkmanager-openvpn
wl-clipboard
];
home-manager.users.hu = {
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
gtk = {
gtk2.configLocation = "/home/hu/.config/gtk-2.0/gtkrc";
enable = true;
theme = {
name = "Breeze";
package = pkgs.kdePackages.breeze-gtk;
};
};
programs.konsole = {
enable = true;
defaultProfile = "custom";
customColorSchemes = {
"custom" = ../../packages/konsole/custom.colorscheme;
};
profiles = {
custom = {
name = "custom";
colorScheme = "custom";
font = {
name = "Go Mono Nerd Font";
size = 12;
};
};
};
};
programs.plasma = {
enable = true;
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
wallpaper = "/nix/config/assets/wallpapers/kde.png";
};
panels = [
{
location = "left";
floating = true;
widgets = [
{
kickoff = {
icon = "nix-snowflake-white";
};
}
{
iconTasks = {
launchers = [
"applications:org.kde.dolphin.desktop"
"applications:org.kde.konsole.desktop"
"applications:firefox-esr.desktop"
];
};
}
"org.kde.plasma.marginsseparator"
{
systemTray = {
icons = {
spacing = "small";
};
};
}
{
digitalClock = {
calendar.firstDayOfWeek = "monday";
time.format = "24h";
date.enable = false;
};
}
"org.kde.plasma.pager"
];
}
];
powerdevil = {
AC = {
autoSuspend.action = "nothing";
dimDisplay.enable = false;
powerButtonAction = "hibernate";
};
};
shortcuts = {
kwin = {
"Switch to Desktop 1" = "Meta+1";
"Switch to Desktop 2" = "Meta+2";
"Switch to Desktop 3" = "Meta+3";
"Switch to Desktop 4" = "Meta+4";
"Switch to Desktop 5" = "Meta+5";
"Switch to Desktop 6" = "Meta+6";
"Switch to Desktop 7" = "Meta+7";
"Switch to Desktop 8" = "Meta+8";
"Switch to Desktop 9" = "Meta+9";
# Don't blame me for this. This is all the doing of kwin.
# You're going to have to adjust this to your layout.
"Window to Desktop 1" = "Meta+!";
"Window to Desktop 2" = "Meta+\"";
"Window to Desktop 3" = "Meta+£";
"Window to Desktop 4" = "Meta+$";
"Window to Desktop 5" = "Meta+%";
"Window to Desktop 6" = "Meta+^";
"Window to Desktop 7" = "Meta+&";
"Window to Desktop 8" = "Meta+*";
"Window to Desktop 9" = "Meta+(";
};
};
configFile = {
kwinrc = {
Desktops = {
Number = {
value = 9;
};
Rows = {
value = 3;
};
};
};
plasmaashellrc = {
PlasmaViews = {
panelOpacity = 2;
};
};
kxkbrc = {
Layout = {
LayoutList = "gb";
Use = true;
};
};
};
};
};
}

View file

@ -1,305 +0,0 @@
{ pkgs, ...}:
{
imports = [
../../system/fonts.nix
../../packages/foot.nix
];
nixpkgs.overlays = [
(final: prev: {
sandbar = prev.sandbar.overrideAttrs (old: {
src = prev.fetchFromGitHub {
owner = "kolunmi";
repo = "sandbar";
rev = "e64a8b788d086cdf4ec44b51e62bdc7b6b5f8165";
hash = "sha256-dNYYlm5CEdnvLjskrPJgquptIQpYgU+gxOu+bt+7sbw=";
};
});
})
];
environment.systemPackages = with pkgs; [
foot # to be replaced with ghostty
wl-clipboard
sandbar
pamixer
pavucontrol
tofi
swaybg
fnott
slurp
wf-recorder
grim
libnotify
seahorse
];
environment.sessionVariables = {
NIXOS_OZONE_WL = 1;
};
programs.river.enable = true;
services.gnome.gnome-keyring.enable = true;
security.pam.services.greetd.enableGnomeKeyring = true;
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal";
TTYReset = true;
TTYHangup = true;
TTYVTDisallocate = true;
};
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --asterisks --cmd river";
user = "greeter";
};
};
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
};
home-manager.users.hu = {
home.file."/home/hu/.config/tofi/config" = {
text = ''
width = 100%
height = 100%
border-width = 0
outline-width = 0
padding-left = 35%
padding-top = 35%
result-spacing = 25
num-results = 5
font = Go Mono Nerd Font
background-color = #000A
'';
};
home.file."/home/hu/.config/river/bar" = {
text = ''
#!/usr/bin/env sh
FIFO="$XDG_RUNTIME_DIR/sandbar"
[ -e "$FIFO" ] && rm -f "$FIFO"
mkfifo "$FIFO"
while cat "$FIFO"; do :; done | sandbar \
-hide-normal-mode \
-no-layout \
-font "Go Mono Nerd Font:12" \
-active-fg-color "#bbbbbb" \
-active-bg-color "#222222" \
-inactive-fg-color "#888888" \
-inactive-bg-color "#111111" \
-urgent-fg-color "#ab5656" \
-title-fg-color "#bbbbbb" \
-title-bg-color "#222222"
'';
executable = true;
};
home.file."/home/hu/.config/river/status" = {
text = ''
#!/usr/bin/env sh
FIFO="$XDG_RUNTIME_DIR/sandbar"
[ -e "$FIFO" ] || mkfifo "$FIFO"
bat () {
read -r bat_status < /sys/class/power_supply/BAT0/status
read -r bat_capacity < /sys/class/power_supply/BAT0/capacity
case "$bat_status" in
"Charging")
bat_status="󱟦"
;;
"Discharging")
bat_status="󱟤"
;;
"Full")
bat_status="󱟢"
;;
"Not charging")
bat_status="󱞜"
;;
"Empty")
bat_status="󱟨"
;;
esac
bat="[$bat_status $bat_capacity]"
}
datetime () {
dat="[$(date "+%H:%M")]"
}
while true; do
if [ -d /sys/class/power_supply/BAT0/ ]; then
bat
fi
datetime
echo "all status $bat$dat" > "$FIFO"
sleep 20
done
'';
executable = true;
};
wayland.windowManager.river = {
enable = true;
systemd.enable = true;
settings = {
map.normal = {
"Super+Shift Return" = "spawn foot";
"Super+Shift C" = "close";
"Super J" = "focus-view next";
"Super K"= "focus-view previous";
"Super+Shift J" = "swap next";
"Super+Shift K" = "swap previous";
"Super Space" = "toggle-float";
"Super+Shift R" = "spawn ~/.config/river/init";
"Super+Shift Q" = "exit";
"Super H" = "send-layout-cmd rivertile 'main-ratio -0.05'";
"Super L" = "send-layout-cmd rivertile 'main-ratio +0.05'";
"Super P" = "spawn '$(tofi-drun)'";
"Super S" = "spawn ~/.config/river/screenshot.sh";
"Super O" = "spawn ~/.config/river/screencast.sh";
"Super+Shift O" = "spawn ~/.config/river/screencast.sh audio";
"None XF86AudioRaiseVolume" = "spawn 'pamixer -i 5'";
"None XF86AudioLowerVolume" = "spawn 'pamixer -d 5'";
"None XF86AudioMute" = "spawn 'pamixer --toggle-mute'";
"None XF86AudioMicMute" = "spawn 'pamixer --default-source --toggle-mute'";
};
map-pointer.normal = {
"Super BTN_LEFT" = "move-view";
"Super BTN_RIGHT" = "resize-view";
};
keyboard-layout = "de";
default-layout = "rivertile";
rule-add."-app-id" = {
"'bar'" = "csd";
};
set-repeat = "50 300";
spawn = [
"'swaybg -i /nix/config/assets/wallpapers/river.png'"
"/home/hu/.config/river/status"
"/home/hu/.config/river/bar"
"'fnott --config /home/hu/.config/fnott/fnott.conf.ini'"
"'gnome-keyring-daemon --start'"
];
border-width = 1;
border-color-focused = "0x333333";
border-color-unfocused = "0x000000";
};
extraConfig = "
for i in $(seq 1 9); do
tags=$((1 << ($i - 1)))
riverctl map normal Super $i set-focused-tags $tags
riverctl map normal Super+Shift $i set-view-tags $tags
done
rivertile -main-ratio 0.5 -view-padding 0 -outer-padding 0
";
};
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
gtk = {
enable = true;
theme = {
name = "adw-gtk3-dark";
package = pkgs.adw-gtk3;
};
iconTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
};
};
home.file."/home/hu/.config/river/screenshot.sh" = {
executable = true;
text = ''
#!/usr/bin/env sh
mkdir -p "$HOME/images/screenshots"
screenshot_file="$HOME/images/screenshots/$(date +%s).png"
area="$(slurp)"
if [ "$area" = "selection cancelled" ]; then
exit 0
fi
grim -g "$area" "$screenshot_file"
notify-send "Screenshot saved" "$screenshot_file"
wl-copy < "$screenshot_file"
'';
};
home.file."/home/hu/.config/river/screencast.sh" = {
executable = true;
text = ''
#!/usr/bin/env sh
if [ -n "$(pidof wf-recorder)" ]; then
pkill --signal=SIGINT wf-recorder
notify-send "Screencast saved" "$(cat "$HOME/.cache/last_screencast")"
wl-copy < "$(cat "$HOME/.cache/last_screencast")"
exit 0
fi
mkdir -p "$HOME/videos/screencasts/"
screencast_file="$HOME/videos/screencasts/$(date +%s).mp4"
area="$(slurp)"
if [ "$area" = "selection cancelled" ]; then
exit 0
fi
echo "$screencast_file" > "$HOME/.cache/last_screencast"
if [ "$1" = "audio" ]; then
wf-recorder -g "$area" --file="$screencast_file" --audio
else
wf-recorder -g "$area" --file="$screencast_file"
fi
'';
};
services.fnott = {
enable = true;
configFile = "/home/hu/.config/fnott/fnott.conf.ini";
};
home.file."/home/hu/.config/fnott/fnott.conf.ini" = {
text = ''
title-font=Go Mono Nerd Font
body-font=Go Mono Nerd Font
background=111111ff
title-color=888888ff
body-color=888888ff
summary-color=888888ff
default-timeout=10
'';
};
};
}

View file

@ -0,0 +1,47 @@
{ ... }:
{
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
# Reduce latency
# https://wiki.nixos.org/wiki/PipeWire#Low-latency_setup
extraConfig = {
pipewire."92-low-latency" = {
"context.properties" = {
"default.clock.rate" = 48000;
"default.clock.quantum" = 32;
"default.clock.min-quantum" = 32;
"default.clock.max-quantum" = 32;
};
};
pipewire-pulse."92-low-latency" = {
"context.properties" = [
{
name = "libpipewire-module-protocol-pulse";
args = { };
}
];
"pulse.properties" = {
"pulse.min.req" = "32/48000";
"pulse.default.req" = "32/48000";
"pulse.max.req" = "32/48000";
"pulse.min.quantum" = "32/48000";
"pulse.max.quantum" = "32/48000";
};
"stream.properties" = {
"node.latency" = "32/48000";
"resample.quality" = 1;
};
};
};
};
}

View file

@ -0,0 +1,44 @@
{ config, ... }:
{
hardware = {
graphics = {
enable = true;
enable32Bit = true;
};
nvidia = {
open = true;
modesetting.enable = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
nvidiaSettings = false;
};
};
boot.kernelParams = [
"nvidia_drm.fbdev=1"
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
];
services.xserver.videoDrivers = [ "nvidia" ];
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "nvidia";
GBM_BACKEND = "nvidia-drm";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
NVD_BACKEND = "direct";
};
nixpkgs.config.cudaSupport = true;
nix = {
settings = {
substituters = [
"https://cuda-maintainers.cachix.org"
];
trusted-public-keys = [
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
};
};
}

View file

@ -1,30 +0,0 @@
{ ... }:
{
home-manager.users.hu = {
programs.fastfetch = {
enable = true;
settings = {
modules = [
"title"
"separator"
"os"
"kernel"
"initsystem"
"uptime"
"datetime"
"packages"
"terminal"
"wm"
"shell"
"cpu"
"gpu"
"memory"
"break"
"colors"
];
};
};
};
}

View file

@ -1,272 +0,0 @@
{ pkgs, ... }:
# You could theoretically, like I did for a while, maintain this file
# to manage your Firefox and waste your time on this or you could just use
# Firefox accounts and become a functioning member of society. This file is
# now only a starting point and will not be kept up to date with my setup.
{
environment.persistence."/nix/persist".users.hu.directories = [
".mozilla/firefox/shaga"
];
home-manager.users.hu = {
programs.firefox = {
enable = true;
package = pkgs.firefox-esr;
policies = {
EnableTrackingProtection = {
Value = true;
Cryptomining = true;
Fingerprinting = true;
EmailTracking = true;
};
DisableTelemetry = true;
DisablePocket = true;
DisableFirefoxStudies = true;
DisableFirefoxAccounts = false;
DisableAccounts = false;
DontCheckDefaultBrowser = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
NoDefaultBookmarks = true;
Cookies = {
Behaviour = "reject-foreign";
BehaviourPrivateBrowsing = "reject-foreign";
};
SearchEngines = { # ESR only
Remove = [ "Bing" "Google" "DuckDuckGo" "Wikipedia (en)" ];
};
# https://discourse.nixos.org/t/declare-firefox-extensions-and-settings/36265/17
ExtensionSettings = with builtins;
let extension = shortId: uuid: {
name = uuid;
value = {
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "normal_installed";
};
};
in listToAttrs [
(extension "ublock-origin" "uBlock0@raymondhill.net")
];
"3rdparty".Extensions = {
"uBlock0@raymondhill.net".adminSettings = {
userSettings = {
importedLists = [
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/LegitimateURLShortener.txt"
];
externalLists = "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/LegitimateURLShortener.txt";
};
selectedFilterLists = [
"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/LegitimateURLShortener.txt"
"user-filters" "ublock-filters" "ublock-badware" "ublock-privacy" "ublock-quick-fixes"
"ublock-unbreak" "easylist" "adguard-generic" "adguard-mobile" "easyprivacy" "adguard-spyware"
"adguard-spyware-url" "block-lan" "urlhaus-1" "curben-phishing" "plowe-0" "dpollock-0" "fanboy-cookiemonster"
"ublock-cookies-easylist" "adguard-cookies" "ublock-cookies-adguard" "fanboy-social" "adguard-social"
"fanboy-thirdparty_social" "easylist-chat" "easylist-newsletters" "easylist-notifications"
"easylist-annoyances" "adguard-mobile-app-banners" "adguard-other-annoyances" "adguard-popup-overlays"
"adguard-widgets" "ublock-annoyances" "ALB-0" "BGR-0" "CHN-0" "CZE-0" "DEU-0" "EST-0" "ara-0" "spa-1"
"spa-0" "FIN-0" "FRA-0" "GRC-0" "HRV-0" "HUN-0" "IDN-0" "ISR-0" "IND-0" "IRN-0" "ISL-0" "ITA-0"
"JPN-1" "KOR-1" "LTU-0" "LVA-0" "MKD-0" "NLD-0" "NOR-0" "POL-0" "POL-2" "ROU-1" "RUS-0" "SWE-1"
"SVN-0" "THA-0" "TUR-0" "VIE-1"
];
};
};
};
profiles.shaga = {
isDefault = true;
search = {
force = true;
default = "Kagi";
order = [ "Kagi" "Gruble" "Nix Packages" "Nix Options" "Home-manager options" ];
engines = {
"Kagi" = {
urls = [
{
template = "https://kagi.com/search";
params = [
{ name = "q"; value = "{searchTerms}"; }
];
}
];
iconUpdateURL = "https://kagi.com/favicon.ico";
updateInterval = 7 * 24 * 60 * 60 * 1000; # Weekly
definedAliases = [ "@k" ];
};
"Gruble" = {
urls = [
{
template = "https://gruble.de/search";
params = [
{ name = "q"; value = "{searchTerms}"; }
];
}
];
iconUpdateURL = "https://gruble.de/favicon.ico";
updateInterval = 7 * 24 * 60 * 60 * 1000; # Weekly
definedAliases = [ "@g" ];
};
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "channel"; value = "unstable"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
iconUpdateURL = "https://nixos.org/favicon.png";
updateInterval = 7 * 24 * 60 * 60 * 1000; # Weekly
definedAliases = [ "@np" ];
};
"Nix Options" = {
urls = [{
template = "https://search.nixos.org/options";
params = [
{ name = "type"; value = "packages"; }
{ name = "channel"; value = "unstable"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
iconUpdateURL = "https://nixos.org/favicon.png";
updateInterval = 7 * 24 * 60 * 60 * 1000; # Weekly
definedAliases = [ "@no" ];
};
"Home-manager options" = {
urls = [{
template = "https://home-manager-options.extranix.com";
params = [
{ name = "release"; value = "master"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
iconUpdateURL = "https://home-manager-options.extranix.com/images/favicon.png";
updateInterval = 7 * 24 * 60 * 60 * 1000; # Weekly
definedAliases = [ "@ho" ];
};
};
};
settings = {
"browser.urlbar.quicksuggest.contextualOptIn.topPosition" = false;
"extensions.postDownloadThirdPartyPrompt" = false;
"extensions.getAddons.cache.enabled" = false;
"browser.search.update" = false;
"extensions.autoDisableScopes" = 0;
"browser.startup.page" = 0;
"browser.startup.homepage" = "about:blank";
"browser.newtabpage.enabled" = false;
"browser.newtabpage.activity-stream.showSponsored" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.newtabpage.activity-stream.default.sites" = "";
"geo.provider.use_gpsd" = false;
"extensions.getAddons.showPane" = false;
"htmlaboutaddons.recommendations.enabled" = false;
"discovery.enabled" = false;
"browser.shopping.experience2023.enabled" = false;
"app.shield.optoutstudies.enabled" = false;
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"breakpad.reportURL" = "";
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
"browser.newtabpage.activity-stream.telemetry" = false;
"browser.search.serpEventTelemetry.enabled" = false;
"dom.security.unexpected_system_load_telemetry_enabled" = false;
"network.trr.confirmation_telemetry_enabled" = false;
"security.app_menu.recordEventTelemetry" = false;
"security.certerrors.recordEventTelemetry" = false;
"security.protectionspopup.recordEventTelemetry" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.pioneer-new-studies-available" = false;
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.updatePing.enabled" = false;
"toolkit.telemetry.server" = "127.0.0.1";
"browser.newtabpage.activity-stream.telemetry.structuredIngestion.endpoint" = "127.0.0.1";
"browser.tabs.crashReporting.sendReport" = false;
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
"captivedetect.canonicalURL" = "";
"network.captive-portal-service.enabled" = false;
"network.connectivity-service.enabled" = false;
"browser.safebrowsing.downloads.remote.enabled" = false;
"browser.urlbar.speculativeConnect.enabled" = false;
"browser.search.suggest.enabled" = true;
"browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
"browser.urlbar.suggest.searches" = true;
"browser.urlbar.suggest.bookmark" = false;
"browser.urlbar.suggest.addons" = false;
"browser.urlbar.suggest.calculator" = false;
"browser.urlbar.suggest.clipboard" = false;
"browser.urlbar.suggest.engines" = false;
"browser.urlbar.suggest.history" = false;
"browser.urlbar.suggest.mdn" = false;
"browser.urlbar.suggest.openpage" = false;
"browser.urlbar.suggest.pocket" = false;
"browser.urlbar.suggest.recentsearches" = false;
"browser.urlbar.suggest.remotetab" = false;
"browser.urlbar.suggest.topsites" = false;
"browser.urlbar.suggest.trending" = false;
"browser.urlbar.suggest.weather" = false;
"browser.urlbar.suggest.yelp" = false;
"browser.urlbar.richSuggestions.tail" = false;
"browser.urlbar.quicksuggest.shouldShowOnboardingDialog" = false;
"browser.urlbar.quicksuggest.rustEnabled" = false;
"browser.urlbar.richSuggestions.featureGate" = false;
"browser.urlbar.trending.featureGate" = false;
"browser.urlbar.addons.featureGate" = false;
"browser.urlbar.mdn.featureGate" = false;
"browser.urlbar.pocket.featureGate" = false;
"browser.urlbar.weather.featureGate" = false;
"browser.formfill.enable" = false;
"dom.forms.autocomplete.formautofill" = false;
"extensions.formautofill.addresses.capture.enabled" = false;
"extensions.formautofill.creditCards.enabled" = false;
"signon.autofillForms" = false;
"signon.rememberSignons" = false;
"signon.formlessCapture.enabled" = false;
"network.auth.subresource-http-auth-allow" = 1;
"dom.security.https_only_mode" = true;
"network.http.referer.XOriginTrimmingPolicy" = 2;
"privacy.userContext.enabled" = true;
"privacy.userContext.ui.enabled" = true;
"privacy.sanitize.sanitizeOnShutdown" = true;
"privacy.clearHistory.siteSettings" = true;
"media.peerconnection.ice.no_host" = true;
"browser.download.start_downloads_in_tmp_dir" = true;
"browser.helperApps.deleteTempFileOnExit" = true;
"browser.uitour.enabled" = false;
"pdfjs.enableScripting" = false;
"browser.download.useDownloadDir" = false;
"browser.download.alwaysOpenPanel" = true;
"browser.download.manager.addToRecentDocs" = false;
"browser.download.always_ask_before_handling_new_types" = true;
"browser.contentblocking.category" = "strict";
"privacy.clearOnShutdown.cache" = true;
"privacy.clearOnShutdown.downloads" = true;
"privacy.clearOnShutdown.formdata" = true;
"privacy.clearOnShutdown.history" = true;
"privacy.clearOnShutdown.sessions" = true;
"privacy.clearOnShutdown.cookies" = true;
"privacy.clearOnShutdown.offlineApps" = true;
"privacy.clearSiteData.historyFormDataAndDownloads" = true;
"browser.startup.homepage_override.mstone" = "ignore";
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false;
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"browser.messaging-system.whatsNewPanel.enabled" = false;
"browser.urlbar.showSearchTerms.enabled" = false;
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned" = "";
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.searchEngines" = "";
};
};
};
};
}

View file

@ -1,54 +0,0 @@
{ ... }:
{
home-manager.users.hu = {
programs.foot = {
enable = true;
settings = {
main = {
pad = "2x2 center";
font = "Go Mono Nerd Font:size=12";
};
mouse = {
hide-when-typing = "yes";
};
scrollback = {
lines = 10000;
};
colors = {
alpha = 0.9;
foreground = "c5c9c5";
background = "181616";
selection-foreground = "c8c093";
selection-background = "2d4f67";
regular0 = "0d0c0c";
regular1 = "c4746e";
regular2 = "8a9a7b";
regular3 = "c4b28a";
regular4 = "8ba4b0";
regular5 = "a292a3";
regular6 = "8ea4a2";
regular7 = "c8c093";
bright0 = "a6a69c";
bright1 = "e46876";
bright2 = "87a987";
bright3 = "e6c384";
bright4 = "7fb4ca";
bright5 = "938aa9";
bright6 = "7aa89f";
bright7 = "c5c9c5";
"16" = "b6927b";
"17" = "b98d7b";
};
};
};
};
}

View file

@ -1,49 +0,0 @@
{ pkgs, ... }:
let
ugp = "/nix/config/secrets/git_uni";
in {
home-manager.users.hu = {
home.file."/home/hu/.config/git/personal" = {
text = ''
[user]
email = "me@caem.dev"
name = "caem"
signingKey = "E50FC66B5062070DC462661C69A830D03203405F"
[gpg]
program = "${pkgs.gnupg}/bin/gpg2"
[commit]
gpgSign = true
[tag]
gpgSign = true
[init]
defaultBranch = "master"
[pull]
rebase = true
'';
};
home.file."/home/hu/.config/git/uni" = {
source = ugp;
};
home.file."/home/hu/.config/git/config" = {
text = ''
[includeIf "gitdir:~/programming/personal/**"]
path = ~/.config/git/personal
[includeIf "gitdir:~/programming/forks/**"]
path = ~/.config/git/personal
[includeIf "gitdir:~/programming/uni/**"]
path = ~/.config/git/uni
'';
};
};
}

View file

@ -1,100 +0,0 @@
[Background]
Color=35,38,39
[BackgroundFaint]
Color=49,54,59
[BackgroundIntense]
Color=0,0,0
[Color0]
Color=35,38,39
[Color0Faint]
Color=49,54,59
[Color0Intense]
Color=127,140,141
[Color1]
Color=237,21,21
[Color1Faint]
Color=120,50,40
[Color1Intense]
Color=192,57,43
[Color2]
Color=17,209,22
[Color2Faint]
Color=23,162,98
[Color2Intense]
Color=28,220,154
[Color3]
Color=246,116,0
[Color3Faint]
Color=182,86,25
[Color3Intense]
Color=253,188,75
[Color4]
Color=29,153,243
[Color4Faint]
Color=27,102,143
[Color4Intense]
Color=61,174,233
[Color5]
Color=155,89,182
[Color5Faint]
Color=97,74,115
[Color5Intense]
Color=142,68,173
[Color6]
Color=26,188,156
[Color6Faint]
Color=24,108,96
[Color6Intense]
Color=22,160,133
[Color7]
Color=252,252,252
[Color7Faint]
Color=99,104,109
[Color7Intense]
Color=255,255,255
[Foreground]
Color=252,252,252
[ForegroundFaint]
Color=239,240,241
[ForegroundIntense]
Color=61,174,233
[General]
Anchor=0.5,0.5
Blur=false
ColorRandomization=false
Description=Custom
FillStyle=Tile
Opacity=0.9
Wallpaper=
WallpaperFlipType=NoFlip
WallpaperOpacity=1

View file

@ -1,4 +0,0 @@
[MainWindow]
1920x1080 screen: Height=640
1920x1080 screen: Width=1138
State=AAAA/wAAAAD9AAAAAQAAAAAAAAAAAAAAAPwCAAAAAvsAAAAiAFEAdQBpAGMAawBDAG8AbQBtAGEAbgBkAHMARABvAGMAawAAAAAA/////wAAAXIA////+wAAABwAUwBTAEgATQBhAG4AYQBnAGUAcgBEAG8AYwBrAAAAAAD/////AAABEQD///8AAARyAAACgAAAAAQAAAAEAAAACAAAAAj8AAAAAQAAAAIAAAACAAAAFgBtAGEAaQBuAFQAbwBvAGwAQgBhAHIAAAAAAP////8AAAAAAAAAAAAAABwAcwBlAHMAcwBpAG8AbgBUAG8AbwBsAGIAYQByAAAAAAD/////AAAAAAAAAAA=

View file

@ -1,50 +0,0 @@
{ pkgs, ... }:
{
environment.persistence."/nix/persist".users.hu.directories = [
".local/share/nvim"
".local/state/nvim"
];
environment.variables = {
EDITOR = "nvim";
};
home-manager.users.hu = {
programs.neovim = {
enable = true;
defaultEditor = true;
extraPackages = with pkgs; [
lua-language-server
nodePackages.intelephense
nodePackages.typescript-language-server
(llvmPackages_19.clang-tools.override {
enableLibcxx = true;
})
ccls
ripgrep
nil
gcc14
basedpyright
rust-analyzer
zathura
git
texliveFull
luajitPackages.jsregexp
luajitPackages.luarocks
fd
texlab
haskell-language-server
rustc
shellcheck
bash-language-server
];
};
home.file."/home/hu/.config/nvim" = {
source = ../../dotfiles/nvim;
recursive = true;
};
};
}

View file

@ -1,11 +0,0 @@
{ pkgs, ... }:
{
home-manager.users.hu = {
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
theme = "sidebar";
};
};
}

View file

@ -1,43 +0,0 @@
{ pkgs, ... }:
{
programs.tmux = {
enable = true;
customPaneNavigationAndResize = true;
baseIndex = 1;
plugins = with pkgs; [
tmuxPlugins.resurrect
];
extraConfig = ''
# Enable mouse
setw -g mouse on
# Neovim
set-option -sg escape-time 10
set-option -g focus-events on
# https://stackoverflow.com/questions/60309665/neovim-colorscheme-does-not-look-right-when-using-nvim-inside-tmux#comment124479399_60313682
set-option -ga terminal-overrides ",xterm-256color:Tc"
# vi mode
set -g mode-keys vi
set -g status-keys vi
# Rebind prefix key to C-a
set -g prefix C-a
bind C-a send-prefix
unbind C-b
# Clipboard
set -ga update-environment WAYLAND_DISPLAY
bind Escape copy-mode
bind p run-shell 'tmux set-buffer -- "$(wl-paste -t "text/plain;charset=utf-8")"; tmux paste-buffer'
bind -T copy-mode-vi 'v' send -X begin-selection
bind -T copy-mode-vi 'y' send -X copy-pipe 'wl-copy'
set -s set-clipboard off
# Status bar
set -g status-style bg=default
set -g status-fg 4
'';
};
}

View file

@ -1,55 +0,0 @@
{ ... }:
{
home-manager.users.hu = {
programs.waybar = {
enable = true;
systemd = {
enable = true;
};
settings = {
bar = {
layer = "top";
position = "top";
height = 32;
output = [
"DP-1"
];
modules-left = [ "hyprland/workspaces" "hyprland/submap" ];
modules-center = [ "hyprland/window" ];
modules-right = [ "tray" "clock" ];
};
};
style = ''
* {
all: unset;
border-radius: 0;
font-family: "Go Mono Nerd Font";
font-size: 11pt;
min-height: 0;
}
window#waybar {
color: #c5c9c5;
background: #181616;
border-bottom: 2px solid rgba(53,132,228, 1);
}
#workspaces button {
padding: 0 8pt 0 8pt;
}
#workspaces button.active {
color: #3584e4;
}
#clock {
padding: 0 8pt 0 8pt;
}
'';
};
};
}

View file

@ -1,43 +0,0 @@
{ pkgs, ... }:
{
users.users.hu.shell = pkgs.zsh;
environment.variables = {
ZDOTDIR = "/home/hu/.config/zsh";
};
home-manager.users.hu = {
home.packages = with pkgs; [
fzf
thefuck
zsh-fzf-tab
zsh-completions
zsh-autosuggestions
zsh-syntax-highlighting
nix-zsh-completions
zsh-nix-shell
];
home.sessionVariables = {
ZDOTDIR = "/home/hu/.config/zsh";
};
home.file."/home/hu/.config/zsh/conf.d" = {
source = ../../dotfiles/zsh/conf.d;
recursive = true;
};
home.file."/home/hu/.config/zsh/.zshrc" = {
text = ''
#!/usr/bin/env zsh
SYNTAX_PLUGIN="${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
AUTOSUGGEST_PLUGIN="${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
NIX_SHELL_PLUGIN="${pkgs.zsh-nix-shell}/share/zsh-nix-shell/nix-shell.plugin.zsh"
FZF_TAB_PLUGIN="${pkgs.zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh"
'' + (builtins.readFile ../../dotfiles/zsh/.zshrc);
};
};
}

View file

@ -1,21 +0,0 @@
{ pkgs, ... }:
{
programs.zsh.enable = true;
programs.nh = {
enable = true;
flake = "/nix/config";
};
environment.systemPackages = with pkgs; [
fastfetch
wget
unzip
git
tree
dos2unix
neovim
libqalculate
];
}

View file

@ -1,17 +0,0 @@
{ pkgs, ... }:
{
imports = [
../packages/git.nix
../packages/nvim.nix
];
environment.systemPackages = with pkgs; [
wireshark
seer
mars-mips
];
users.users.hu.extraGroups = [ "wireshark" ];
}

View file

@ -1,8 +0,0 @@
{ pkgs, ... }:
{
fonts.packages = with pkgs; [
nerdfonts
];
}

View file

@ -1,16 +0,0 @@
{ ... }:
{
security.sudo.extraConfig = ''
Defaults lecture="never"
'';
security.apparmor = {
enable = true;
};
nixpkgs.config.permittedInsecurePackages = [
"jitsi-meet-1.0.8043"
];
}

View file

@ -1,18 +0,0 @@
{ ... }:
{
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
users.users.hu.extraGroups = [ "libvirtd" ];
home-manager.users.hu = {
dconf.settings = {
"org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"];
uris = ["qemu:///system"];
};
};
};
}