Compare commits
No commits in common. "master" and "legacy" have entirely different histories.
3
.gitignore
vendored
|
@ -1,4 +1,3 @@
|
||||||
|
secrets/
|
||||||
dotfiles/zsh/.zcompdump
|
dotfiles/zsh/.zcompdump
|
||||||
dotfiles/nvim/lazy-lock.json
|
dotfiles/nvim/lazy-lock.json
|
||||||
result
|
|
||||||
keys.txt
|
|
||||||
|
|
270
README.md
|
@ -1,213 +1,83 @@
|
||||||
# caenix
|
# nixos-system-config
|
||||||
|
My modular NixOS configuration.
|
||||||
|
|
||||||
<table>
|
## About
|
||||||
<tr>
|
This is the NixOS configuration that I daily drive on my system. Feel free to use,
|
||||||
<td>
|
modify and share this configuration to your heart's content, no attribution required.
|
||||||
About
|
|
||||||
</td>
|
## Screenshots
|
||||||
<td>
|
|KDE Plasma|Hyprland|
|
||||||
Screenshot
|
|---|---|
|
||||||
</td>
|
|||
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
This repository contains my personal NixOS configuration.
|
|
||||||
Feel free to do whatever with it.
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<img src="assets/screenshot.png" alt="Screenshot of my desktop">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
```
|
```
|
||||||
.
|
├── assets ; Binary assets tracked in git
|
||||||
├── .gitattributes
|
│ ├── screenshot.png
|
||||||
├── .gitignore
|
│ └── wallpaper.jpg
|
||||||
├── README.md
|
├── dotfiles ; Distro agnostic dotfiles
|
||||||
├── assets ; Binary assets such as screenshots and wallpapers
|
│ └── ... ; Stores configurations that do not depend on Nix
|
||||||
│ └── ...
|
|
||||||
├── flake.lock
|
├── flake.lock
|
||||||
├── flake.nix
|
├── flake.nix ; Entry point
|
||||||
├── hosts ; Host configurations
|
├── home ; home-manager configuration
|
||||||
│ ├── puter
|
│ ├── default.nix ; User and home-manager options
|
||||||
│ │ ├── default.nix ; Host specific configuration options
|
│ ├── packages ; Per-package home-manager configuration
|
||||||
│ │ ├── disko.nix ; Host specific partitioning layout
|
│ │ └── ...
|
||||||
│ │ └── packages.nix ; Host specific package set
|
│ └── persist.nix ; Home opt-in state directories and files
|
||||||
│ └── ...
|
├── hosts ; Host configurations
|
||||||
├── install.sh
|
│ └── workstation
|
||||||
├── lib ; Custom helper functions
|
│ ├── default.nix ; Host configuration.nix equivalent
|
||||||
│ └── ...
|
│ ├── hardware-configuration.nix ; Host hardware specific configuration
|
||||||
├── modules ; Configuration modules
|
│ └── persist.nix ; System wide opt-in state directories and files
|
||||||
│ ├── home ; Home-manager modules
|
├── lib ; Custom helper functions
|
||||||
│ │ └── caem ; User home-manager modules
|
│ ├── default.nix
|
||||||
│ │ ├── default.nix ; User specific configuration options
|
│ └── ...
|
||||||
│ │ ├── packages.nix ; User specific package set
|
├── modules ; System modules and sets of packages
|
||||||
│ │ └── ...
|
│ ├── desktop
|
||||||
│ └── nixos ; NixOS modules
|
│ │ ├── apps
|
||||||
│ ├── user ; User definition
|
│ │ │ └── ...
|
||||||
│ │ └── caem.nix
|
│ │ └── environments
|
||||||
│ └── ...
|
│ │ └── ...
|
||||||
└── overlays ; Overlays
|
│ └── system
|
||||||
└── ...
|
│ └── ...
|
||||||
|
├── README.md
|
||||||
|
└── secrets ; Location of secrets not tracked in the git tree
|
||||||
|
└── pass
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installation
|
## Installing
|
||||||
|
This configuration uses impermanence with btrfs snapshots so you'll have to partition
|
||||||
|
your system in a certain way.
|
||||||
|
|
||||||
### Setting up your secrets repository
|
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
|
||||||
|
```
|
||||||
|
|
||||||
This step is required to install the system as it is built around nix-sops
|
Inside of the btrfs root volume we're going to need 2 subvolumes.
|
||||||
with encrypted files in a private repository in order to not expose even the
|
```
|
||||||
encrypted secrets to the public. You don't need to be in a NixOS livecd or
|
SUBVOLUME MOUNT PURPOSE
|
||||||
system in order to complete this step as long as you can install all
|
root / Impermanent data
|
||||||
requirements from step 1.
|
nix /nix Permanent data
|
||||||
|
```
|
||||||
|
|
||||||
#### 1. Ensure all required dependencies are present
|
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
|
```sh
|
||||||
nix-shell -p sops age git wl-clipboard
|
nix flake update /nix/config
|
||||||
|
nh os switch
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. Initialize your secrets repo
|
|
||||||
|
|
||||||
```sh
|
|
||||||
mkdir secrets
|
|
||||||
cd secrets
|
|
||||||
git init
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 3. Create your gitignore
|
|
||||||
|
|
||||||
You want this to make sure that you do not accidentally push your private key.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
echo "keys.txt" > .gitignore
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 4. Generate your private key
|
|
||||||
|
|
||||||
```sh
|
|
||||||
age-keygen -o ./keys.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 5. Create your sops configuration file
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cat <<EOF > .sops.yaml
|
|
||||||
keys:
|
|
||||||
- &master $(age-keygen -y ./keys.txt)
|
|
||||||
creation_rules:
|
|
||||||
- path_regex: .*\.(yaml|json|env|ini)$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *master
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 6. Create your secrets file
|
|
||||||
|
|
||||||
```sh
|
|
||||||
mkpasswd | wl-copy
|
|
||||||
sops upasswd.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
Then edit the file to look like this
|
|
||||||
```yaml
|
|
||||||
upasswd: [The pasted password from mkpasswd]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 7. Create the flake to expose the secrets
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cat <<EOF > flake.nix
|
|
||||||
{
|
|
||||||
outputs = { self, ... }: {
|
|
||||||
paths = {
|
|
||||||
upasswd = self + "/upasswd.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 8. Commit and push your changes
|
|
||||||
|
|
||||||
If your git forge supports creating the repository on push you can
|
|
||||||
simply run the commands below, if it does not, like GitHub, create a private
|
|
||||||
repository named "secrets" first before running the below commands.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git remote add origin git@git.example.net:username/secrets
|
|
||||||
git add .
|
|
||||||
git commit -m "batman"
|
|
||||||
git push --set-upstream origin master
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 9. Back up your keys.txt
|
|
||||||
|
|
||||||
**THIS STEP IS VERY IMPORTANT**
|
|
||||||
|
|
||||||
Back up your keys.txt in a safe location where you can later transfer it on to the livecd.
|
|
||||||
Keep it safe afterwards as it is required to decrypt your secrets. Do not share this with
|
|
||||||
anyone else as it'd allow them to decrypt all your secrets.
|
|
||||||
|
|
||||||
You also need to have a copy of your ssh private key or (preferably) deployment key to the repository
|
|
||||||
ready to later clone your secrets repository.
|
|
||||||
|
|
||||||
### Installing the system
|
|
||||||
|
|
||||||
#### 0. Boot in to a livcd image
|
|
||||||
|
|
||||||
Any of the official NixOS livecds will work as long as you're able securely transfer files on to
|
|
||||||
it. Non-nixos livecds might work if you install the required tools manually but is out of scope
|
|
||||||
of this document.
|
|
||||||
|
|
||||||
#### 1. Clone this repository
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/c4em/caenix.git
|
|
||||||
cd caenix
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 2. Fetch your keys.txt and ssh key
|
|
||||||
|
|
||||||
Fetch your keys.txt from wherever you've stored them and **place them at the root of the configuration directory**.
|
|
||||||
If you place them anywhere else the installation will fail. Do not move them later either.
|
|
||||||
|
|
||||||
For your ssh key, place it in `~/.ssh` and create a symlink for the root user.
|
|
||||||
```sh
|
|
||||||
sudo ln -sf /home/nixos/.ssh /root/.ssh
|
|
||||||
```
|
|
||||||
|
|
||||||
And start a instance of ssh-agent.
|
|
||||||
```sh
|
|
||||||
eval $(ssh-agent -s)
|
|
||||||
ssh-add ~/.ssh/[your key]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 3. Update the flake input for your secret
|
|
||||||
|
|
||||||
In `flake.nix`, replace
|
|
||||||
```nix
|
|
||||||
inputs = {
|
|
||||||
secrets.url = "git+ssh://git@git.caem.dev/caem/secrets";
|
|
||||||
```
|
|
||||||
with your url.
|
|
||||||
```nix
|
|
||||||
inputs = {
|
|
||||||
secrets.url = "git+ssh://git@git.example.com/username/secrets";
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 4. Update flake.lock (optional)
|
|
||||||
This is very useful and will also tell you if cloning your secrets work,
|
|
||||||
rather than only telling you after already having partitioned the drive.
|
|
||||||
```sh
|
|
||||||
nix --extra-experimental-features 'nix-command flakes' flake update
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 5. Run the installation script
|
|
||||||
```sh
|
|
||||||
./install.sh --host [your host] --device [the device to install NixOS on]
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
5
assets/README.md
vendored
|
@ -1,5 +0,0 @@
|
||||||
# assets
|
|
||||||
|
|
||||||
The wallpaper used here is watermarked, the purchased version is stored in the secrets, inaccessible to the public.
|
|
||||||
If you too want the watermark-free version you can [purchase it from the artist](https://wboss.huotan.com/p/TEcHBI)
|
|
||||||
for mere ¥12. The artwork looks great, I'd highly recommend it.
|
|
BIN
assets/screenshot.png
vendored
Before Width: | Height: | Size: 1.9 MiB |
BIN
assets/screenshots/hyprland.png
vendored
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
assets/screenshots/kde.png
vendored
Normal file
After Width: | Height: | Size: 384 KiB |
BIN
assets/wallpaper.jpg
vendored
Before Width: | Height: | Size: 1.6 MiB |
BIN
assets/wallpapers/hyprland.jpg
vendored
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
assets/wallpapers/kde.png
vendored
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
assets/wallpapers/river.png
vendored
Normal file
After Width: | Height: | Size: 164 KiB |
6
dotfiles/deploy.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for f in *; do
|
||||||
|
[ -d "$f" ] && ln -svf "$PWD/$f" "$HOME/.config"
|
||||||
|
done
|
||||||
|
|
3
dotfiles/nvim/ftplugin/lua.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
vim.bo.tabstop = 2
|
||||||
|
vim.bo.softtabstop = 2
|
||||||
|
vim.bo.shiftwidth = 2
|
3
dotfiles/nvim/ftplugin/nix.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
vim.bo.tabstop = 2
|
||||||
|
vim.bo.softtabstop = 2
|
||||||
|
vim.bo.shiftwidth = 2
|
3
dotfiles/nvim/init.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
require"settings"
|
||||||
|
require"plugins"
|
||||||
|
|
55
dotfiles/nvim/lua/plugins/cmp.lua
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
5
dotfiles/nvim/lua/plugins/comment.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
return {
|
||||||
|
"numToStr/Comment.nvim",
|
||||||
|
opts = {},
|
||||||
|
lazy = false
|
||||||
|
}
|
7
dotfiles/nvim/lua/plugins/dressing.lua
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
return {
|
||||||
|
"stevearc/dressing.nvim",
|
||||||
|
config = function()
|
||||||
|
require"dressing".setup {
|
||||||
|
}
|
||||||
|
end
|
||||||
|
}
|
11
dotfiles/nvim/lua/plugins/ibl.lua
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
return {
|
||||||
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
|
main = "ibl",
|
||||||
|
opts = {},
|
||||||
|
opts = {
|
||||||
|
indent = {
|
||||||
|
char = "▏"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
22
dotfiles/nvim/lua/plugins/init.lua
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
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)
|
||||||
|
|
49
dotfiles/nvim/lua/plugins/kanagawa.lua
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
8
dotfiles/nvim/lua/plugins/lsp/c.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".ccls.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities(),
|
||||||
|
filetypes = {
|
||||||
|
"c"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
8
dotfiles/nvim/lua/plugins/lsp/cxx.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".clangd.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities(),
|
||||||
|
filetypes = {
|
||||||
|
"cpp", "objc", "objcpp", "cuda", "proto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
4
dotfiles/nvim/lua/plugins/lsp/haskell.lua
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
return function()
|
||||||
|
require"lspconfig".hls.setup {}
|
||||||
|
end
|
||||||
|
|
5
dotfiles/nvim/lua/plugins/lsp/js.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".ts_ls.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities()
|
||||||
|
}
|
||||||
|
end
|
5
dotfiles/nvim/lua/plugins/lsp/latex.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".texlab.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities()
|
||||||
|
}
|
||||||
|
end
|
24
dotfiles/nvim/lua/plugins/lsp/lua.lua
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
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
|
6
dotfiles/nvim/lua/plugins/lsp/nix.lua
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".nil_ls.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities()
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
5
dotfiles/nvim/lua/plugins/lsp/php.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
return function ()
|
||||||
|
require"lspconfig".intelephense. setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities(),
|
||||||
|
}
|
||||||
|
end
|
10
dotfiles/nvim/lua/plugins/lsp/python.lua
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
return function()
|
||||||
|
require"lspconfig".basedpyright.setup {
|
||||||
|
settings = {
|
||||||
|
python = {
|
||||||
|
pythonPath = vim.fn.exepath("python3"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
11
dotfiles/nvim/lua/plugins/lsp/rust.lua
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
return function()
|
||||||
|
require"lspconfig".rust_analyzer.setup {
|
||||||
|
settings = {
|
||||||
|
["rust-analyzer"] = {
|
||||||
|
diagnostics = {
|
||||||
|
enable = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
5
dotfiles/nvim/lua/plugins/lsp/shell.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
return function()
|
||||||
|
require"lspconfig".bashls.setup {
|
||||||
|
capabilities = require"cmp_nvim_lsp".default_capabilities(),
|
||||||
|
}
|
||||||
|
end
|
29
dotfiles/nvim/lua/plugins/lspconfig.lua
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
139
dotfiles/nvim/lua/plugins/lualine.lua
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
6
dotfiles/nvim/lua/plugins/nvim-colorizer.lua
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
return {
|
||||||
|
"norcalli/nvim-colorizer.lua",
|
||||||
|
config = function()
|
||||||
|
require"colorizer".setup()
|
||||||
|
end,
|
||||||
|
}
|
24
dotfiles/nvim/lua/plugins/telescope.lua
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
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,
|
||||||
|
}
|
15
dotfiles/nvim/lua/plugins/treesitter.lua
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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",
|
||||||
|
}
|
8
dotfiles/nvim/lua/plugins/vimtex.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
return {
|
||||||
|
"lervag/vimtex",
|
||||||
|
lazy = false,
|
||||||
|
init = function()
|
||||||
|
vim.g.vimtex_view_method = "zathura"
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
37
dotfiles/nvim/lua/settings/autocmds.lua
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
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,
|
||||||
|
})
|
3
dotfiles/nvim/lua/settings/init.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
require"settings.options"
|
||||||
|
require"settings.autocmds"
|
||||||
|
require"settings.keymaps"
|
7
dotfiles/nvim/lua/settings/keymaps.lua
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
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")
|
||||||
|
|
28
dotfiles/nvim/lua/settings/options.lua
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
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
|
||||||
|
|
73
dotfiles/nvim/lua/util/get_distro.lua
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
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
|
||||||
|
|
7
dotfiles/nvim/lua/util/hl.lua
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
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
|
9
dotfiles/nvim/lua/util/map.lua
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
return function(mode, key, mapping, comment)
|
||||||
|
local opts = {
|
||||||
|
noremap = true,
|
||||||
|
silent = true,
|
||||||
|
desc = comment
|
||||||
|
}
|
||||||
|
vim.keymap.set(mode, key, mapping, opts)
|
||||||
|
end
|
||||||
|
|
27
dotfiles/nvim/lua/util/require_dir.lua
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
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
|
||||||
|
|
11
dotfiles/nvim/lua/util/rgb_to_hex.lua
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
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
|
12
dotfiles/zsh/.zshrc
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/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
|
||||||
|
|
8
dotfiles/zsh/conf.d/alias.zsh
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
alias reload="exec zsh"
|
||||||
|
|
||||||
|
if [ -x "$(command -v nix)" ]; then
|
||||||
|
alias nix-develop="nix develop -c $SHELL"
|
||||||
|
fi
|
||||||
|
|
11
dotfiles/zsh/conf.d/color.zsh
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/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
|
||||||
|
|
20
dotfiles/zsh/conf.d/completions.zsh
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/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
|
||||||
|
|
3
dotfiles/zsh/conf.d/distrobox.zsh
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
# TODO: Script to prompt which environment the user wants to enter in to
|
6
dotfiles/zsh/conf.d/env.zsh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
if [ -n "$(command -v qt5ct)" ] && [ -z "$DESKTOP_SESSION" ]; then
|
||||||
|
export QT_QPA_PLATFORMTHEME=qt5ct
|
||||||
|
fi
|
||||||
|
|
9
dotfiles/zsh/conf.d/fuck.zsh
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
if [ -n "$(command -v thefuck)" ]; then
|
||||||
|
fuck() {
|
||||||
|
eval $(thefuck --alias)
|
||||||
|
fuck
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
5
dotfiles/zsh/conf.d/gpg.zsh
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
GPG_TTY=$(tty)
|
||||||
|
export GPG_TTY
|
||||||
|
|
7
dotfiles/zsh/conf.d/manpager.zsh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
if [ -n "$(command -v "nvim")" ]; then
|
||||||
|
export MANPAGER='nvim +Man!'
|
||||||
|
export EDITOR="nvim"
|
||||||
|
fi
|
||||||
|
|
11
dotfiles/zsh/conf.d/nix.zsh
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
|
50
dotfiles/zsh/conf.d/path.zsh
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/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
|
||||||
|
|
33
dotfiles/zsh/conf.d/ps1.zsh
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/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]# '
|
||||||
|
|
13
dotfiles/zsh/conf.d/ssh.zsh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/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
|
||||||
|
|
29
dotfiles/zsh/conf.d/suggestions.zsh
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/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)
|
||||||
|
|
18
dotfiles/zsh/conf.d/syntax.zsh
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/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"
|
||||||
|
|
211
flake.lock
generated
|
@ -8,41 +8,19 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744237139,
|
"lastModified": 1734540176,
|
||||||
"narHash": "sha256-f395cE+MIvKcRfRZubYXc7TJfJJ7edwpt7tYIFDgYQo=",
|
"narHash": "sha256-msxbnOw/nh8GJ87YtBEDT1jhVldOBtxHRF2KgvYPeDA=",
|
||||||
"owner": "ezKEa",
|
"owner": "ezKEa",
|
||||||
"repo": "aagl-gtk-on-nix",
|
"repo": "aagl-gtk-on-nix",
|
||||||
"rev": "a1a00f83d74988e98af8757e9b86ddf04d2ecdfc",
|
"rev": "00df3ad02364a6fb8f1105dc72ae770b748c62eb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "ezKEa",
|
"owner": "ezKEa",
|
||||||
"ref": "release-24.11",
|
|
||||||
"repo": "aagl-gtk-on-nix",
|
"repo": "aagl-gtk-on-nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"disko": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1736864502,
|
|
||||||
"narHash": "sha256-ItkIZyebGvNH2dK9jVGzJHGPtb6BSWLN8Gmef16NeY0=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"rev": "0141aabed359f063de7413f80d906e1d98c0c123",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"ref": "latest",
|
|
||||||
"repo": "disko",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -59,70 +37,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-parts": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1743550720,
|
|
||||||
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"nixpak",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1743550720,
|
|
||||||
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hercules-ci-effects": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"nixpak",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpak",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744693102,
|
|
||||||
"narHash": "sha256-1Z4WPGVky4w3lrhrgs89OKsLzPdtkbi1bPLNFWsoLfY=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"rev": "5b6cec51c9ec095a0d3fd4c8eeb53eb5c59ae33e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -130,27 +44,26 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744743431,
|
"lastModified": 1736204492,
|
||||||
"narHash": "sha256-iyn/WBYDc7OtjSawbegINDe/gIkok888kQxk3aVnkgg=",
|
"narHash": "sha256-CoBPRgkUex9Iz6qGSzi/BFVUQjndB0PmME2B6eEyeCs=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "c61bfe3ae692f42ce688b5865fac9e0de58e1387",
|
"rev": "20665c6efa83d71020c8730f26706258ba5c6b2a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-24.11",
|
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"impermanence": {
|
"impermanence": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1737831083,
|
"lastModified": 1734945620,
|
||||||
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
"narHash": "sha256-olIfsfJK4/GFmPH8mXMmBDAkzVQ1TWJmeGT3wBGfQPY=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "impermanence",
|
"repo": "impermanence",
|
||||||
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
"rev": "d000479f4f41390ff7cf9204979660ad5dd16176",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -159,35 +72,13 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpak": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": "flake-parts_2",
|
|
||||||
"hercules-ci-effects": "hercules-ci-effects",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744856645,
|
|
||||||
"narHash": "sha256-TgEsizZRX53LkX8qWIqoRd/d4mgGlCqh3OBEhMbXxvU=",
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"rev": "c99853b3e1973b95b86882e3f49763f9be168596",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744440957,
|
"lastModified": 1736061677,
|
||||||
"narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=",
|
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d",
|
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -197,84 +88,36 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"plasma-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": [
|
||||||
|
"home-manager"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743296961,
|
"lastModified": 1735049224,
|
||||||
"narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=",
|
"narHash": "sha256-fWUd9kyXdepphJ7cCzOsuSo7l0kbFCkUqfgKqZyFZzE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "plasma-manager",
|
||||||
"rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa",
|
"rev": "d16bbded0ae452bc088489e7dca3ef58d8d1830b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "plasma-manager",
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-unstable": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744932701,
|
|
||||||
"narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"aagl": "aagl",
|
"aagl": "aagl",
|
||||||
"disko": "disko",
|
|
||||||
"flake-parts": "flake-parts",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"nixpak": "nixpak",
|
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
"plasma-manager": "plasma-manager"
|
||||||
"secrets": "secrets",
|
|
||||||
"sops-nix": "sops-nix"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"secrets": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1737589360,
|
|
||||||
"narHash": "sha256-s4tCUlvzXpQQ1wJ7ZcslfVuszmQlmnp7bnoZRdnBZuw=",
|
|
||||||
"ref": "refs/heads/master",
|
|
||||||
"rev": "2cfed436d84594b4d4a73843095c75c644628dfe",
|
|
||||||
"revCount": 4,
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://git@git.caem.dev/caem/secrets.git"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://git@git.caem.dev/caem/secrets.git"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sops-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744669848,
|
|
||||||
"narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=",
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"rev": "61154300d945f0b147b30d24ddcafa159148026a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
59
flake.nix
|
@ -1,52 +1,31 @@
|
||||||
{
|
{
|
||||||
description = "My NixOS configuration files.";
|
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
secrets.url = "git+ssh://git@git.caem.dev/caem/secrets.git";
|
|
||||||
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
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";
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
|
|
||||||
disko = {
|
home-manager = {
|
||||||
url = "github:nix-community/disko/latest";
|
url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
sops-nix = {
|
plasma-manager = {
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:nix-community/plasma-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpak = {
|
|
||||||
url = "github:nixpak/nixpak";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.home-manager.follows = "home-manager";
|
||||||
};
|
};
|
||||||
|
|
||||||
aagl = {
|
aagl = {
|
||||||
url = "github:ezKEa/aagl-gtk-on-nix/release-24.11";
|
url = "github:ezKEa/aagl-gtk-on-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
nixpkgs-unstable,
|
|
||||||
flake-parts,
|
|
||||||
impermanence,
|
impermanence,
|
||||||
home-manager,
|
home-manager,
|
||||||
disko,
|
plasma-manager,
|
||||||
sops-nix,
|
|
||||||
secrets,
|
|
||||||
nixpak,
|
|
||||||
aagl,
|
aagl,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
|
@ -55,24 +34,16 @@
|
||||||
);
|
);
|
||||||
in {
|
in {
|
||||||
nixosConfigurations = lib.mkHosts {
|
nixosConfigurations = lib.mkHosts {
|
||||||
|
modules = [
|
||||||
|
home-manager.nixosModules.home-manager {
|
||||||
|
home-manager.sharedModules = [
|
||||||
|
plasma-manager.homeManagerModules.plasma-manager
|
||||||
|
];
|
||||||
|
}
|
||||||
|
impermanence.nixosModules.impermanence
|
||||||
|
];
|
||||||
nixpkgs = nixpkgs;
|
nixpkgs = nixpkgs;
|
||||||
inputs = inputs;
|
inputs = inputs;
|
||||||
user = "caem";
|
|
||||||
modules = [
|
|
||||||
impermanence.nixosModules.impermanence
|
|
||||||
disko.nixosModules.disko
|
|
||||||
sops-nix.nixosModules.sops
|
|
||||||
aagl.nixosModules.default
|
|
||||||
home-manager.nixosModules.home-manager {
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
extraSpecialArgs = {
|
|
||||||
inherit inputs;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
39
home/default.nix
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{ 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
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
24
home/persist.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
{ pkgs, lib, username, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./disko.nix
|
|
||||||
./packages.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "puter";
|
|
||||||
useDHCP = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
loader = {
|
|
||||||
efi.canTouchEfiVariables = true;
|
|
||||||
grub = {
|
|
||||||
enable = true;
|
|
||||||
# Keep "nodev" for efi systems
|
|
||||||
device = "nodev";
|
|
||||||
efiSupport = true;
|
|
||||||
gfxmodeEfi = "1920x1080";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
tmp.useTmpfs = true;
|
|
||||||
kernelPackages = pkgs.unstable.linuxPackages_xanmod_latest;
|
|
||||||
supportedFilesystems = [ "btfs" "vfat" "xfs" ];
|
|
||||||
initrd = {
|
|
||||||
availableKernelModules = [ "nvme" "xhci_pci" "ahci"
|
|
||||||
"usbhid" "usb_storage" "sd_mod" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
fstrim.enable = true;
|
|
||||||
btrfs.autoScrub.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
"/home/${username}/mounts/vault" = {
|
|
||||||
device = "/dev/disk/by-uuid/048d175b-0e3e-4ec7-955b-3d9a45f9f237";
|
|
||||||
options = [ "nofail" ];
|
|
||||||
fsType = "xfs";
|
|
||||||
};
|
|
||||||
|
|
||||||
"/home/${username}/mounts/attic" = {
|
|
||||||
device = "/dev/disk/by-uuid/ec32ce36-9f53-4f44-ac8f-2c9163f0b3d7";
|
|
||||||
options = [ "nofail" ];
|
|
||||||
fsType = "xfs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "24.11"; # [managed by install.sh] { state version }
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
disko.devices = {
|
|
||||||
disk = {
|
|
||||||
master = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/nvme0n1"; # [managed by install.sh]
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
efi = {
|
|
||||||
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" ];
|
|
||||||
subvolumes = {
|
|
||||||
/* Do not rename the root partition as it'll break impermanence */
|
|
||||||
"/root" = {
|
|
||||||
mountpoint = "/";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"/nix" = {
|
|
||||||
mountpoint = "/nix";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = let
|
|
||||||
modules = ../../modules/nixos;
|
|
||||||
in [
|
|
||||||
"${modules}/core"
|
|
||||||
"${modules}/hardware/audio"
|
|
||||||
"${modules}/hardware/gpu/nvidia"
|
|
||||||
"${modules}/hardware/cpu/amd"
|
|
||||||
"${modules}/multimedia"
|
|
||||||
"${modules}/desktop/gnome"
|
|
||||||
"${modules}/communication"
|
|
||||||
"${modules}/development"
|
|
||||||
"${modules}/edv"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
{ pkgs, lib, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./disko.nix
|
|
||||||
./packages.nix
|
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "vm";
|
|
||||||
useDHCP = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
loader = {
|
|
||||||
grub = {
|
|
||||||
enable = true;
|
|
||||||
# device = "/dev/sda"; # [managed by install.sh]
|
|
||||||
gfxmodeEfi = "1920x1080";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
tmp.useTmpfs = true;
|
|
||||||
kernelPackages = pkgs.linuxPackages_xanmod_latest;
|
|
||||||
supportedFilesystems = [ "btfs" "vfat" "xfs" ];
|
|
||||||
initrd = {
|
|
||||||
availableKernelModules = [ "nvme" "xhci_pci" "ahci"
|
|
||||||
"usbhid" "usb_storage" "sd_mod" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
fstrim.enable = true;
|
|
||||||
btrfs.autoScrub.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
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.
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "24.11"; # [managed by install.sh]
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
disko.devices = {
|
|
||||||
disk = {
|
|
||||||
master = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/vda"; # [managed by install.sh]
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
grub_mbr = {
|
|
||||||
size = "1M";
|
|
||||||
type = "EF02"; # for grub MBR
|
|
||||||
};
|
|
||||||
boot = {
|
|
||||||
size = "1G";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "ext4";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
root = {
|
|
||||||
size = "100%";
|
|
||||||
content = {
|
|
||||||
type = "btrfs";
|
|
||||||
extraArgs = [ "-f" "-L nixos" ];
|
|
||||||
subvolumes = {
|
|
||||||
/* Do not rename the root partition as it'll break impermanence */
|
|
||||||
"/root" = {
|
|
||||||
mountpoint = "/";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"/nix" = {
|
|
||||||
mountpoint = "/nix";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = let
|
|
||||||
modules = ../../modules/nixos;
|
|
||||||
in [
|
|
||||||
"${modules}/core"
|
|
||||||
"${modules}/hardware/audio"
|
|
||||||
"${modules}/hardware/gpu/graphics.nix"
|
|
||||||
"${modules}/multimedia"
|
|
||||||
"${modules}/desktop/gnome"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
96
hosts/workstation/default.nix
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
{ 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";
|
||||||
|
}
|
||||||
|
|
78
hosts/workstation/hardware-configuration.nix
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
{ 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;
|
||||||
|
}
|
||||||
|
|
23
hosts/workstation/persist.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,54 +1,78 @@
|
||||||
{ pkgs, lib, username, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./disko.nix
|
./hardware-configuration.nix
|
||||||
./packages.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
|
||||||
];
|
];
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
hardware.bluetooth.enable = true;
|
||||||
|
|
||||||
console = {
|
boot = {
|
||||||
earlySetup = true;
|
loader.grub = {
|
||||||
keyMap = "de";
|
enable = true;
|
||||||
|
device = "/dev/sda";
|
||||||
|
gfxmodeEfi = "1366x768";
|
||||||
|
};
|
||||||
|
kernelPackages = pkgs.linuxPackages_xanmod_latest;
|
||||||
|
supportedFilesystems = [ "btrfs" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "x220";
|
hostName = "x220";
|
||||||
useDHCP = lib.mkDefault true;
|
networkmanager.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
boot = {
|
users.users.hu.extraGroups = [ "networkmanager" ];
|
||||||
loader = {
|
|
||||||
efi.canTouchEfiVariables = true;
|
time.timeZone = "Europe/Berlin";
|
||||||
grub = {
|
|
||||||
enable = true;
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
# device = "/dev/sda"; # [managed by install.sh]
|
console = {
|
||||||
gfxmodeEfi = "1366x768";
|
font = "Lat2-Terminus16";
|
||||||
};
|
keyMap = "de";
|
||||||
};
|
# useXkbConfig = true;
|
||||||
|
};
|
||||||
tmp.useTmpfs = true;
|
|
||||||
kernelPackages = pkgs.unstable.linuxPackages_xanmod_latest;
|
nixpkgs.config.allowUnfree = true;
|
||||||
supportedFilesystems = [ "btfs" "vfat" "xfs" ];
|
|
||||||
initrd = {
|
programs.mtr.enable = true;
|
||||||
availableKernelModules = [ "ehci_pci" "ahci" "xhci_pci"
|
programs.gnupg.agent = {
|
||||||
"usb_storage" "sd_mod" "sdhci_pci" ];
|
enable = true;
|
||||||
|
enableSSHSupport = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa = {
|
||||||
|
enable = true;
|
||||||
|
support32Bit = true;
|
||||||
};
|
};
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services.tlp.enable = true;
|
||||||
fstrim.enable = true;
|
|
||||||
btrfs.autoScrub.enable = true;
|
nix = {
|
||||||
|
extraOptions = ''
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems = {
|
system.stateVersion = "24.05";
|
||||||
# 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.
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "24.11"; # [managed by install.sh] { state version }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
disko.devices = {
|
|
||||||
disk = {
|
|
||||||
master = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/sda"; # [managed by install.sh]
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
grub_mbr = {
|
|
||||||
size = "1M";
|
|
||||||
type = "EF02";
|
|
||||||
};
|
|
||||||
boot = {
|
|
||||||
size = "1G";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "ext4";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
luks = {
|
|
||||||
size = "100%";
|
|
||||||
content = {
|
|
||||||
type = "luks";
|
|
||||||
name = "crypted";
|
|
||||||
content = {
|
|
||||||
type = "btrfs";
|
|
||||||
extraArgs = [ "-f" "-L nixos" ];
|
|
||||||
subvolumes = {
|
|
||||||
/* Do not rename the root partition as it'll break impermanence */
|
|
||||||
"/root" = {
|
|
||||||
mountpoint = "/";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"/nix" = {
|
|
||||||
mountpoint = "/nix";
|
|
||||||
mountOptions = [
|
|
||||||
"noatime"
|
|
||||||
"compress=zstd"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
61
hosts/x220/hardware-configuration.nix
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{ 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;
|
||||||
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = let
|
|
||||||
modules = ../../modules/nixos;
|
|
||||||
in [
|
|
||||||
"${modules}/core"
|
|
||||||
"${modules}/hardware/audio"
|
|
||||||
"${modules}/hardware/cpu/intel"
|
|
||||||
"${modules}/multimedia/video"
|
|
||||||
"${modules}/multimedia/art"
|
|
||||||
"${modules}/multimedia/web"
|
|
||||||
"${modules}/multimedia/music"
|
|
||||||
"${modules}/desktop/gnome"
|
|
||||||
"${modules}/communication"
|
|
||||||
"${modules}/development"
|
|
||||||
"${modules}/edv"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
23
hosts/x220/persist.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
182
install.sh
|
@ -1,182 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
# Author: caem - https://caem.dev
|
|
||||||
|
|
||||||
# install.sh - Installation script for my NixOS configuration
|
|
||||||
#
|
|
||||||
# This script aims to automate the deployment of my configuration
|
|
||||||
# on a new machine.
|
|
||||||
|
|
||||||
args_ensure_extra_arg() {
|
|
||||||
if [ -z "$2" ] || [ "$(echo "$2" | cut -c 1-1)" = "-" ]; then
|
|
||||||
>&2 echo "Argument '$1' requires an extra argument. Run --help for more info."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
args_ensure_is_set() {
|
|
||||||
if [ -z "$2" ]; then
|
|
||||||
>&2 echo "Argument '$1' is required to be set. Please consult the README or run again with --help."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
args() {
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
case "$1" in
|
|
||||||
"-h" | "--help")
|
|
||||||
echo ""
|
|
||||||
echo "$0 - Installation script for my NixOS configuration"
|
|
||||||
echo ""
|
|
||||||
echo "arguments:"
|
|
||||||
echo " -h|--help Print this and exit"
|
|
||||||
echo " -d|--device [device] (required) The device you want to install NixOS on to"
|
|
||||||
echo " -o|--host [hostname] (required) The host from ./hosts you want to install"
|
|
||||||
echo " -b|--build Build the system without installing"
|
|
||||||
echo ""
|
|
||||||
echo "origin: https://github.com/c4em/caenix"
|
|
||||||
echo ""
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
"-d" | "--device")
|
|
||||||
args_ensure_extra_arg "$@"
|
|
||||||
if [ ! -b "$2" ]; then
|
|
||||||
>&2 echo "'$2' is not a valid block device. Make sure you selected the right drive"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
CAENIX_INSTALL_DEVICE="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
|
|
||||||
"-o" | "--host")
|
|
||||||
args_ensure_extra_arg "$@"
|
|
||||||
|
|
||||||
if [ ! -d "./hosts/$2" ]; then
|
|
||||||
>&2 echo "Invalid hostname '$2'. Make sure it exists in ./hosts"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
CAENIX_HOSTNAME="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
"-b" | "--build")
|
|
||||||
CAENIX_DO_ONLY_BUILD=1
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
>&2 echo "Unrecognized argument '$1'. Run with --help to view accepted arguments."
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
args_ensure_is_set "--host" "$CAENIX_HOSTNAME"
|
|
||||||
if [ -z "$CAENIX_DO_ONLY_BUILD" ]; then
|
|
||||||
args_ensure_is_set "--device" "$CAENIX_INSTALL_DEVICE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
sed_safe () {
|
|
||||||
# I got this off of some random StackOverflow answer. Don't put too much trust in this.
|
|
||||||
printf "%s" "$1" | sed -r 's/([\$\.\*\/\[\\^])/\\\1/g' | sed 's/[]]/\[]]/g'
|
|
||||||
}
|
|
||||||
|
|
||||||
update_managed_values() {
|
|
||||||
sed -i 's/\( *device = \)".*"\(; # [managed by install\.sh].*\)/\1"'"$(sed_safe "$CAENIX_INSTALL_DEVICE")"'"\2/' "./hosts/$CAENIX_HOSTNAME/default.nix"
|
|
||||||
sed -i 's/\( *device = \)".*"\(; #.*\)/\1"'"$(sed_safe "$CAENIX_INSTALL_DEVICE")"'"\2/' "./hosts/$CAENIX_HOSTNAME/disko.nix"
|
|
||||||
sed -i 's/\( *system.stateVersion = \)".*"\(; #.*\)/\1"'"$(sed_safe "$(nixos-version | cut -f1,2 -d '.')")"'"\2/' "./hosts/$CAENIX_HOSTNAME/default.nix"
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
nix build ".#nixosConfigurations.${CAENIX_HOSTNAME}.config.system.build.toplevel"
|
|
||||||
}
|
|
||||||
|
|
||||||
permissions() {
|
|
||||||
if [ "$(id -u)" = "0" ]; then
|
|
||||||
sudo () {
|
|
||||||
"$@"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sudo -v
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ensure_confirmation() {
|
|
||||||
printf "\e[1;31m=== ARE YOU SURE YOU WANT TO CONTINUE WITH THE INSTALLATION ===\e[0m\n\n"
|
|
||||||
printf "This will \e[1;31mIRREVERSIBLY\e[0m wipe all data in '%s'\n" "$CAENIX_INSTALL_DEVICE"
|
|
||||||
printf "This disk contains following partitions:\n\n"
|
|
||||||
lsblk -o NAME,SIZE,TYPE,FSTYPE "$CAENIX_INSTALL_DEVICE"
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
printf "Please write 'Yes, do as I say!' to continue with the installation\n> "
|
|
||||||
read -r install_prompt
|
|
||||||
if [ "$install_prompt" != "Yes, do as I say!" ]; then
|
|
||||||
echo "Cancelling installation"
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
CAENIX_CONFIRM_DISK_NUKE="yes"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
partition_disk() {
|
|
||||||
if [ "$CAENIX_CONFIRM_DISK_NUKE" = "yes" ]; then
|
|
||||||
sudo nix --experimental-features 'flakes nix-command' run github:nix-community/disko/latest -- \
|
|
||||||
--mode destroy,format,mount --yes-wipe-all-disks "./hosts/$CAENIX_HOSTNAME/disko.nix"
|
|
||||||
else
|
|
||||||
>&2 echo "Aborted installation due to invalid state in the partitioning step."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install() {
|
|
||||||
yes | sudo nixos-install --no-root-passwd --flake ".#$CAENIX_HOSTNAME"
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_files_to_new_install() {
|
|
||||||
username="$(grep user ./flake.nix | sed -e 's/.*user = "\(.*\)";.*/\1/')"
|
|
||||||
if [ -z "$username" ]; then
|
|
||||||
>&2 echo "Cannot determine username"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo cp -vr . /mnt/nix/config
|
|
||||||
sudo mkdir -p "/mnt/nix/persist/home/$username/programming/personal"
|
|
||||||
sudo ln -svf /nix/config "/mnt/nix/persist/home/$username/programming/personal/caenix"
|
|
||||||
sudo chown -R 1000:100 "/mnt/nix/persist/home/$username"
|
|
||||||
sudo chown -R 1000:100 "/mnt/nix/config"
|
|
||||||
}
|
|
||||||
|
|
||||||
reboot_on_consent() {
|
|
||||||
printf "\n\nInstallation finished. Would you like to reboot?\n[y/n] > "
|
|
||||||
read -r do_reboot
|
|
||||||
if [ "$do_reboot" = "y" ] || [ "$do_reboot" = "Y" ]; then
|
|
||||||
sudo reboot
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main () {
|
|
||||||
args "$@"
|
|
||||||
permissions
|
|
||||||
|
|
||||||
if [ -n "$CAENIX_DO_ONLY_BUILD" ]; then
|
|
||||||
if [ -n "$CAENIX_INSTALL_DEVICE" ]; then
|
|
||||||
update_managed_values
|
|
||||||
fi
|
|
||||||
|
|
||||||
build
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
ensure_confirmation
|
|
||||||
update_managed_values
|
|
||||||
partition_disk
|
|
||||||
copy_files_to_new_install
|
|
||||||
install
|
|
||||||
reboot_on_consent
|
|
||||||
}
|
|
||||||
|
|
||||||
set -e
|
|
||||||
main "$@"
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{ lib }:
|
{ lib }:
|
||||||
|
|
||||||
|
# todo: Write a function to import all of these automatically
|
||||||
|
|
||||||
let
|
let
|
||||||
fs = import ./fs.nix { inherit lib; };
|
fs = import ./fs.nix { inherit lib; };
|
||||||
hosts = import ./hosts.nix { inherit lib; };
|
hosts = import ./hosts.nix { inherit lib; };
|
||||||
|
|
|
@ -5,12 +5,6 @@
|
||||||
path: let
|
path: let
|
||||||
dirs = builtins.readDir path;
|
dirs = builtins.readDir path;
|
||||||
in
|
in
|
||||||
builtins.filter (type: dirs.${type} == "directory") (builtins.attrNames dirs);
|
builtins.filter (name: dirs.${name} == "directory") (builtins.attrNames dirs);
|
||||||
|
|
||||||
getModuleImports =
|
|
||||||
path: let
|
|
||||||
files = builtins.attrNames (builtins.removeAttrs (builtins.readDir path) ["default.nix"]);
|
|
||||||
in
|
|
||||||
map (file: "${path}/${file}") files;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,23 +2,15 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
mkHosts = {
|
mkHosts = {
|
||||||
|
modules,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
inputs,
|
inputs,
|
||||||
modules,
|
|
||||||
user,
|
|
||||||
}: builtins.listToAttrs (builtins.map (host: {
|
}: builtins.listToAttrs (builtins.map (host: {
|
||||||
name = host;
|
name = host;
|
||||||
value = nixpkgs.lib.nixosSystem {
|
value = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = modules ++ [
|
modules = modules ++ [ ../hosts/${host} ];
|
||||||
../hosts/${host}
|
specialArgs = { inherit inputs; };
|
||||||
../modules/nixos/user/${user}.nix
|
|
||||||
];
|
|
||||||
specialArgs = {
|
|
||||||
inherit inputs lib;
|
|
||||||
username = user;
|
|
||||||
cfgPath = ../.;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}) (lib.getDirsInDir ../hosts));
|
}) (lib.getDirsInDir ../hosts));
|
||||||
}
|
}
|
||||||
|
|
19
modules/desktop/apps/communication.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ 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
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
35
modules/desktop/apps/games.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ 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;
|
||||||
|
}
|
||||||
|
|
41
modules/desktop/apps/multimedia.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{ 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;
|
||||||
|
# };
|
||||||
|
}
|
||||||
|
|
218
modules/desktop/environments/hyprland.nix
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
{ 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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
209
modules/desktop/environments/kde.nix
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
{ 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
305
modules/desktop/environments/river.nix
Normal file
|
@ -0,0 +1,305 @@
|
||||||
|
{ 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
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{ lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = lib.getModuleImports ./.;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
{ config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
programs.gpg = {
|
|
||||||
enable = true;
|
|
||||||
homedir = "${config.xdg.dataHome}/gnupg";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
zstyle ':completion:*:git-checkout:*' sort false
|
|
||||||
zstyle ':completion:*:descriptions' format '[%d]'
|
|
||||||
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
|
|
||||||
zstyle ':completion:*' menu no
|
|
||||||
zstyle ':fzf-tab:*' fzf-flags --color 16 --bind=tab:accept
|
|
||||||
[ -n "$TMUX" ] && zstyle ':fzf-tab:*' fzf-command ftb-tmux-popup
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
local c0=$'%{\e[0m%}'
|
|
||||||
local c31=$'%{\e[31m%}'
|
|
||||||
local c33=$'%{\e[33m%}'
|
|
||||||
local c34=$'%{\e[34m%}'
|
|
||||||
local c35=$'%{\e[35m%}'
|
|
||||||
local c38=$'%{\e[38m%}'
|
|
||||||
|
|
||||||
local nix_shell_ps1_t=" $c34{$c33 shell$c34}$c0"
|
|
||||||
local path_no_ghostty="$(echo "$PATH" | sed -e 's/:\/nix\/store\/.*-ghostty-.*\/bin://g')"
|
|
||||||
if [ -n "$IN_NIX_SHELL" ]; then
|
|
||||||
local nix_shell_ps1="$nix_shell_ps1_t"
|
|
||||||
elif [[ "$path_no_ghostty" == *"/nix/store"* ]]; then
|
|
||||||
IN_NIX_SHELL=true
|
|
||||||
local nix_shell_ps1="$nix_shell_ps1_t"
|
|
||||||
fi
|
|
||||||
|
|
||||||
setopt prompt_subst
|
|
||||||
autoload -Uz vcs_info
|
|
||||||
zstyle ':vcs_info:*' enable git
|
|
||||||
zstyle ':vcs_info:*' formats " ${c34}${c0}${c31}(%b)${c0}"
|
|
||||||
precmd () { vcs_info }
|
|
||||||
|
|
||||||
export PS1='${c38}[${c35}%3~${c0}${vcs_info_msg_0_}${nix_shell_ps1}${c38}]${c0}# '
|
|
|
@ -1,87 +0,0 @@
|
||||||
{ pkgs, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
lsd
|
|
||||||
bat
|
|
||||||
fd
|
|
||||||
ripgrep
|
|
||||||
fzf
|
|
||||||
tre-command
|
|
||||||
btop
|
|
||||||
zsh-completions
|
|
||||||
nix-zsh-completions
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.bat = {
|
|
||||||
enable = true;
|
|
||||||
config = {
|
|
||||||
theme = "ansi";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.btop = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
color_theme = "TTY";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".zshenv".enable = false;
|
|
||||||
home.file.".config/zsh/conf.d" = {
|
|
||||||
source = ./conf.d;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
enableCompletion = true;
|
|
||||||
autosuggestion.enable = true;
|
|
||||||
syntaxHighlighting.enable = true;
|
|
||||||
dotDir = ".config/zsh";
|
|
||||||
autocd = true;
|
|
||||||
|
|
||||||
history.size = 10000;
|
|
||||||
history.ignoreAllDups = true;
|
|
||||||
/* Not persisted on purpose */
|
|
||||||
history.path = "${config.xdg.cacheHome}/zsh_history";
|
|
||||||
|
|
||||||
shellAliases = {
|
|
||||||
cat = "bat --paging=never --wrap=never --style='changes,snip,numbers'";
|
|
||||||
ls = "lsd";
|
|
||||||
tree = "tre";
|
|
||||||
};
|
|
||||||
|
|
||||||
initExtra = ''
|
|
||||||
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
|
|
||||||
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
|
|
||||||
|
|
||||||
for dotfile in "$ZDOTDIR/conf.d/"*; do
|
|
||||||
source "$dotfile"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
plugins = [
|
|
||||||
{
|
|
||||||
name = "zsh-nix-shell";
|
|
||||||
file = "nix-shell.plugin.zsh";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "chisui";
|
|
||||||
repo = "zsh-nix-shell";
|
|
||||||
rev = "v0.8.0";
|
|
||||||
sha256 = "1lzrn0n4fxfcgg65v0qhnj7wnybybqzs4adz7xsrkgmcsr0ii8b7";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "fzf-tab";
|
|
||||||
file = "fzf-tab.plugin.zsh";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "Aloxaf";
|
|
||||||
repo = "fzf-tab";
|
|
||||||
rev = "v1.2.0";
|
|
||||||
sha256 = "sha256-q26XVS/LcyZPRqDNwKKA9exgBByE0muyuNb0Bbar2lY=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
{ lib, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./packages.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home = {
|
|
||||||
username = "caem";
|
|
||||||
homeDirectory = "/home/caem";
|
|
||||||
stateVersion = "24.11";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file."${config.xdg.configHome}/user-dirs.dirs".force = lib.mkForce true;
|
|
||||||
xdg = {
|
|
||||||
enable = true;
|
|
||||||
userDirs = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
documents = "${config.home.homeDirectory}/documents";
|
|
||||||
download = "${config.home.homeDirectory}/download";
|
|
||||||
music = "${config.home.homeDirectory}/music";
|
|
||||||
pictures = "${config.home.homeDirectory}/images";
|
|
||||||
videos = "${config.home.homeDirectory}/videos";
|
|
||||||
|
|
||||||
/* I do not use these */
|
|
||||||
desktop = "${config.xdg.dataHome}/xdg/desktop";
|
|
||||||
publicShare = "${config.xdg.dataHome}/xdg/publicShare";
|
|
||||||
templates = "${config.xdg.dataHome}/xdg/templates";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,124 +0,0 @@
|
||||||
{ pkgs, lib, inputs, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
picture-uri = if builtins.hasAttr "wallpaper" inputs.secrets.paths
|
|
||||||
then builtins.toString inputs.secrets.paths.wallpaper
|
|
||||||
else builtins.toString ../../../../../assets/wallpaper.jpg;
|
|
||||||
in {
|
|
||||||
xdg.mimeApps = {
|
|
||||||
enable = true;
|
|
||||||
defaultApplications = {
|
|
||||||
"application/pdf" = "org.gnome.Evince.desktop";
|
|
||||||
"image/avif" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/apng" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/bmp" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/gif" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/jpeg" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/vnd.microsoft.icon" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/png" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/tiff" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/webp" = "org.gnome.Loupe.desktop";
|
|
||||||
"video/mp4" = "umpv.desktop";
|
|
||||||
"video/mpeg" = "umpv.desktop";
|
|
||||||
"video/ogg" = "umpv.desktop";
|
|
||||||
"video/webm" = "umpv.desktop";
|
|
||||||
"video/x-matroska" = "umpv.desktop";
|
|
||||||
"video/x-msvideo" = "umpv.desktop";
|
|
||||||
"video/quicktime" = "umpv.desktop";
|
|
||||||
"x-scheme-handler/mailto" = "tutanota-desktop.desktop";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk = {
|
|
||||||
enable = true;
|
|
||||||
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
|
||||||
gtk3.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings = {
|
|
||||||
"org/gnome/desktop/background".picture-uri = picture-uri;
|
|
||||||
"org/gnome/desktop/background".picture-uri-dark = picture-uri;
|
|
||||||
"org/gnome/desktop/screensaver".picture-uri = picture-uri;
|
|
||||||
"org/gnome/desktop/interface" = {
|
|
||||||
accent-color = "slate";
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
};
|
|
||||||
"org/gnome/desktop/input-sources" = {
|
|
||||||
sources = [
|
|
||||||
(lib.hm.gvariant.mkTuple ["xkb" "de"])
|
|
||||||
];
|
|
||||||
};
|
|
||||||
"org/gnome/desktop/peripherals/mouse" = {
|
|
||||||
accel-profile = "flat";
|
|
||||||
};
|
|
||||||
"org/gnome/shell" = {
|
|
||||||
disable-user-extensions = false;
|
|
||||||
allow-extension-installation = false;
|
|
||||||
enabled-extensions = with pkgs.gnomeExtensions; [
|
|
||||||
caffeine.extensionUuid
|
|
||||||
accent-directories.extensionUuid
|
|
||||||
just-perfection.extensionUuid
|
|
||||||
quick-settings-tweaker.extensionUuid
|
|
||||||
];
|
|
||||||
favorite-apps = [
|
|
||||||
"firefox-esr.desktop"
|
|
||||||
"com.mitchellh.ghostty.desktop"
|
|
||||||
"org.gnome.Nautilus.desktop"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
"org/gnome/shell/extensions/just-perfection" = {
|
|
||||||
calendar = false;
|
|
||||||
events-button = false;
|
|
||||||
quick-settings-dark-mode = false;
|
|
||||||
world-clock = false;
|
|
||||||
};
|
|
||||||
"org/gnome/shell/extensions/quick-settings-tweaks" = {
|
|
||||||
notifications-enabled = false;
|
|
||||||
};
|
|
||||||
"org/gnome/desktop/wm/preferences" = {
|
|
||||||
audible-bell = false;
|
|
||||||
num-workspaces = 9;
|
|
||||||
};
|
|
||||||
"org/gnome/mutter" = {
|
|
||||||
dynamic-workspaces = false;
|
|
||||||
};
|
|
||||||
"org/gnome/shell/window-switcher" = {
|
|
||||||
current-workspace-only = true;
|
|
||||||
};
|
|
||||||
"org/gnome/shell/keybindings" = {
|
|
||||||
switch-windows = ["<Super>Tab"];
|
|
||||||
activate-window-menu = [];
|
|
||||||
switch-to-application-1 = [];
|
|
||||||
switch-to-application-2 = [];
|
|
||||||
switch-to-application-3 = [];
|
|
||||||
switch-to-application-4 = [];
|
|
||||||
switch-to-application-5 = [];
|
|
||||||
switch-to-application-6 = [];
|
|
||||||
switch-to-application-7 = [];
|
|
||||||
switch-to-application-8 = [];
|
|
||||||
switch-to-application-9 = [];
|
|
||||||
};
|
|
||||||
"org/gnome/desktop/wm/keybindings" = {
|
|
||||||
switch-to-workspace-1 = ["<Super>1"];
|
|
||||||
switch-to-workspace-2 = ["<Super>2"];
|
|
||||||
switch-to-workspace-3 = ["<Super>3"];
|
|
||||||
switch-to-workspace-4 = ["<Super>4"];
|
|
||||||
switch-to-workspace-5 = ["<Super>5"];
|
|
||||||
switch-to-workspace-6 = ["<Super>6"];
|
|
||||||
switch-to-workspace-7 = ["<Super>7"];
|
|
||||||
switch-to-workspace-8 = ["<Super>8"];
|
|
||||||
switch-to-workspace-9 = ["<Super>9"];
|
|
||||||
move-to-workspace-1 = ["<Super><Shift>1"];
|
|
||||||
move-to-workspace-2 = ["<Super><Shift>2"];
|
|
||||||
move-to-workspace-3 = ["<Super><Shift>3"];
|
|
||||||
move-to-workspace-4 = ["<Super><Shift>4"];
|
|
||||||
move-to-workspace-5 = ["<Super><Shift>5"];
|
|
||||||
move-to-workspace-6 = ["<Super><Shift>6"];
|
|
||||||
move-to-workspace-7 = ["<Super><Shift>7"];
|
|
||||||
move-to-workspace-8 = ["<Super><Shift>8"];
|
|
||||||
move-to-workspace-9 = ["<Super><Shift>9"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
{ lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = lib.getModuleImports ./.;
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
{ pkgs, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
emacs-package = pkgs.emacs30-pgtk;
|
|
||||||
in {
|
|
||||||
services.emacs = {
|
|
||||||
enable = true;
|
|
||||||
package = emacs-package;
|
|
||||||
socketActivation.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.emacs = {
|
|
||||||
enable = true;
|
|
||||||
package = emacs-package;
|
|
||||||
extraPackages = epkgs: with epkgs; [
|
|
||||||
treesit-grammars.with-all-grammars
|
|
||||||
vterm
|
|
||||||
paredit
|
|
||||||
nix-mode
|
|
||||||
meson-mode
|
|
||||||
rainbow-delimiters
|
|
||||||
darktooth-theme
|
|
||||||
smex
|
|
||||||
amx
|
|
||||||
# Why the fuck would you put a '+' in your package's name
|
|
||||||
(builtins.getAttr "ido-completing-read+" epkgs)
|
|
||||||
no-littering
|
|
||||||
treesit-auto
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file."${config.xdg.configHome}/emacs".source = ./emacs.d;
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
(tool-bar-mode 0)
|
|
||||||
(menu-bar-mode 0)
|
|
||||||
(scroll-bar-mode 0)
|
|
||||||
|
|
||||||
(setq display-line-numbers-type 'relative)
|
|
||||||
(global-display-line-numbers-mode t)
|
|
||||||
(global-hl-line-mode t)
|
|
||||||
|
|
||||||
(add-to-list 'default-frame-alist
|
|
||||||
'(font . "Go Mono Nerd Font-12"))
|
|
||||||
|
|
||||||
(let ((opacity 95))
|
|
||||||
(set-frame-parameter nil 'alpha-background opacity)
|
|
||||||
(add-to-list 'default-frame-alist `(alpha-background . ,opacity)))
|
|
||||||
|
|
||||||
(setq compilation-scroll-output t)
|
|
||||||
|
|
||||||
(use-package rainbow-delimiters
|
|
||||||
:ensure nil
|
|
||||||
:hook
|
|
||||||
((prog-mode . rainbow-delimiters-mode)))
|
|
||||||
|
|
||||||
(use-package darktooth-theme
|
|
||||||
:ensure nil
|
|
||||||
:config
|
|
||||||
(load-theme 'darktooth-dark t)
|
|
||||||
(set-face-background 'hl-line "#262626"))
|
|
|
@ -1,17 +0,0 @@
|
||||||
(use-package smex
|
|
||||||
:ensure nil
|
|
||||||
:bind
|
|
||||||
(("M-x" . smex)
|
|
||||||
("M-X" . smex-major-mode-commands))
|
|
||||||
:config (smex-initialize))
|
|
||||||
|
|
||||||
(use-package ido-completing-read+
|
|
||||||
:ensure nil
|
|
||||||
:config (ido-ubiquitous-mode 1))
|
|
||||||
|
|
||||||
(use-package amx
|
|
||||||
:ensure nil
|
|
||||||
:config (amx-mode 1))
|
|
||||||
|
|
||||||
(ido-mode 1)
|
|
||||||
(ido-everywhere 1)
|
|