Compare commits

...
10 Commits
Author SHA1 Message Date
Theaninova 40660a57eb feat: update system 2026-07-26 15:08:50 +02:00
Theaninova cf55802ffa update system 2026-07-25 16:28:44 +02:00
Theaninova 7eae6f1678 feat: update system 2026-07-18 11:55:10 +02:00
Theaninova cbc6eaab1e update system 2026-07-14 14:33:45 +02:00
Theaninova 8d2607c8ad feat: gitsigns 2026-07-11 15:17:26 +02:00
Theaninova 0c8e8c27d4 feat: update nvim config 2026-07-06 13:58:29 +02:00
Theaninova 7b705fd938 feat: luci stuff 2026-07-06 10:21:34 +02:00
Theaninova 4ec11e92ab feat: update config 2026-07-01 17:05:05 +02:00
Theaninova 6fd42a30b0 feat: auto-session
feat: vim ui2
feat: harpoon
feat: nvim changes
2026-07-01 16:08:27 +02:00
Theaninova acf28da653 update system 2026-07-01 12:50:39 +02:00
38 changed files with 881 additions and 292 deletions
Generated
+34 -34
View File
@@ -24,11 +24,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1775706155,
"narHash": "sha256-h7Rw0vlb0n0Jsk21WJPm7H+1T1bG+PEuxE5cJ2TZl8A=",
"lastModified": 1784365424,
"narHash": "sha256-kJO1Tww/GkvLq5amrV4BKidYGr5YumM+cH/xYALAiw4=",
"owner": "abenz1267",
"repo": "elephant",
"rev": "376ee71c66db38683daabd57350bf3f6f086eaf8",
"rev": "23f37238367355cf46843015ad5e94706200176a",
"type": "github"
},
"original": {
@@ -45,11 +45,11 @@
]
},
"locked": {
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"lastModified": 1782949081,
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"type": "github"
},
"original": {
@@ -65,11 +65,11 @@
]
},
"locked": {
"lastModified": 1781009359,
"narHash": "sha256-w/mZkRscTatf8NWyUstli8ROzM/eopxZzi0WRjoeYkU=",
"lastModified": 1784913159,
"narHash": "sha256-JWq0BfjO4ktpH5USfQNQzdvHpIDT8fSKD5K7LvdMRFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c58ead12efcac436afffa93a22099a5595eb4157",
"rev": "079a3b5d1aa6a719920a51316253b7d6dd22738d",
"type": "github"
},
"original": {
@@ -86,16 +86,16 @@
"systems": "systems_2"
},
"locked": {
"lastModified": 1731508795,
"narHash": "sha256-+UibbVz5CTisKMms/5VXGe39FYr56qzaEtX4TWQPkjk=",
"lastModified": 1783421544,
"narHash": "sha256-msVlanBvdLsMeLdXnBQ6f9nRHKmDf7vhKoQMtyYbS8c=",
"owner": "InioX",
"repo": "matugen",
"rev": "cb9f81eb0150f6253895ea0adb1daa8534c15fc7",
"rev": "cf3c74c231e526121bd8e2ce0f1d04702301c342",
"type": "github"
},
"original": {
"owner": "InioX",
"ref": "v2.4.1",
"ref": "cf3c74c231e526121bd8e2ce0f1d04702301c342",
"repo": "matugen",
"type": "github"
}
@@ -112,11 +112,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1780944960,
"narHash": "sha256-/Tzx2TY0IVm/ptBvkKaLdOHADpM7xsUMfBKOpCibH1M=",
"lastModified": 1784874881,
"narHash": "sha256-u4jhSIf/Un0qZB+Cn3hTTaHSI20XeAxYbA5o4faqdJs=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "da6577a9bef8a4d7a9d7a2a0dc1e1089edb46bed",
"rev": "ef7a2a3d719af46b906c22a3ebfb7d65627b2cd2",
"type": "github"
},
"original": {
@@ -145,11 +145,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1780938415,
"narHash": "sha256-QHyIMGSbCQW8d5qbOrMsm6gem10bO3Au2YLa3alJfHo=",
"lastModified": 1784570726,
"narHash": "sha256-9EMn69JBcFWFgUM7f0VBAX+jBby5b9H3M59U75+5yI4=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "6f1a2c5f0e8274223d4204b1f8d6f7f91538967e",
"rev": "7f26c3ee804fb6ed458ef7fb0e3c794f14e0b3bc",
"type": "github"
},
"original": {
@@ -176,11 +176,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1780749050,
"narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=",
"lastModified": 1784796856,
"narHash": "sha256-wWFrV5/Qbm+lyt5x20E/bSbfJiGKMo4RCxZV8cl/WZI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a799d3e3886da994fa307f817a6bc705ae538eeb",
"rev": "e2587caef70cea85dd97d7daab492899902dbf5d",
"type": "github"
},
"original": {
@@ -192,11 +192,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1780511130,
"narHash": "sha256-2v9lT4ya59Lh1FqPeLnz1MoX9y/wz2huqfe9RtQZITk=",
"lastModified": 1782847189,
"narHash": "sha256-twXPFqFsrrY5r28Zh7Homgcp2gUMBgQ6WDS98Q/3xFI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "535f3e6942cb1cead3929c604320d3db54b542b9",
"rev": "b6018f87da91d19d0ab4cf979885689b469cdd41",
"type": "github"
},
"original": {
@@ -215,11 +215,11 @@
"systems": "systems_3"
},
"locked": {
"lastModified": 1780995253,
"narHash": "sha256-6Lsoyw2XPvY8YNMCtPnsyw0JVVtHsXP2xtrFJBBTAOQ=",
"lastModified": 1784814601,
"narHash": "sha256-T32JXjZ7kIbhBn8/Har171yGg6IBdl97cxAWameqZDE=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "43a7e6f82978ac975c3bba6728869b231e7a1ba0",
"rev": "f316e949e0ed9df0e1e0bf645c6dce721d4e230e",
"type": "github"
},
"original": {
@@ -404,11 +404,11 @@
"systems": "systems_4"
},
"locked": {
"lastModified": 1777789924,
"narHash": "sha256-fX3ErzTmHRO9z1SzHC2VZUgKOgRfO13X/joC5a3QN7Q=",
"lastModified": 1784217994,
"narHash": "sha256-gxHJsrJZo2qbKK47Kf/9ho3i/HhRwkL8XvPnczGPd9E=",
"owner": "abenz1267",
"repo": "walker",
"rev": "93d44d1cb41732e1370e4b949429ae8e34ea05a4",
"rev": "42b3ed88abf50bc52638fb2835b7f17e3ea3ac4c",
"type": "github"
},
"original": {
@@ -437,11 +437,11 @@
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1779745227,
"narHash": "sha256-yqY7RtEJGJiENzR0GwL6q69tSAy6xAAmAcLuIhLjPf8=",
"lastModified": 1784679892,
"narHash": "sha256-Mb7jpqnrcYCfNSItIkkHpuR3YxWFxPuIBfcwNKlRBkk=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "5d1efbc9dc3ab1c10160b656e0247f3325daf0f2",
"rev": "8d135d3b2854b30fd01ea6cd6c27e523dd50a839",
"type": "github"
},
"original": {
+2 -1
View File
@@ -6,7 +6,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
matugen = {
url = "github:InioX/matugen?ref=v2.4.1";
url = "github:InioX/matugen?ref=cf3c74c231e526121bd8e2ce0f1d04702301c342";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
@@ -60,6 +60,7 @@
allowUnfree = true;
allowUnsupportedSystem = true;
experimental-features = "nix-command flakes";
permittedInsecurePackages = [ "pnpm-10.29.2" ];
};
overlays = [
niri.overlays.niri
+2
View File
@@ -32,6 +32,7 @@
svelte.enable = true;
docker.enable = true;
};
flatpak.enable = true;
windows-vm.enable = true;
};
@@ -190,6 +191,7 @@
p7zip
fzf
eza
yazi
# docker
ausweisapp
];
+26
View File
@@ -27,4 +27,30 @@
accel_profile = "flat";
}
];
programs.git = {
enable = true;
signing = {
format = "openpgp";
key = "6C9E EFC5 1AE0 0131 78DE B9C8 68FF FB1E C187 88CA";
signByDefault = true;
};
settings = {
user = {
email = "dev@theaninova.de";
name = "Thea Schöbl";
};
pull.rebase = true;
init.defaultBranch = "main";
merge = {
tool = "nvim-mergetool";
conflictstyle = "diff3";
};
mergetool.nvim-mergetool = {
cmd = # sh
''nvim -f -c "MergetoolStart" "$MERGED" "$BASE" "$LOCAL" "$REMOTE"'';
trustExitCode = true;
};
mergetool.prompt = false;
};
};
}
+1
View File
@@ -166,6 +166,7 @@
p7zip
fzf
eza
yazi
];
networking = {
-1
View File
@@ -29,7 +29,6 @@
mfact = 0.65;
always_keep_position = true;
};
input.kb_options = "lv3:caps_switch";
};
monitor = [
{
+5 -6
View File
@@ -60,15 +60,11 @@
locale.preset.theaninova.enable = true;
services.xserver = {
xkb = {
#variant = "altgr-intl";
#layout = "us";
layout = "de";
};
videoDrivers = [ "nvidia" ];
};
services.airprint.enable = true;
services.languagetool.enable = true;
hardware = {
q3279vwf.enable = true;
@@ -83,7 +79,7 @@
};
};
};
cc1.enable = true;
luci-keyboard.enable = true;
nvidia.preset.proprietary.enable = true;
@@ -155,6 +151,7 @@
"audio"
"video"
"plugdev"
"dialout"
"cdrom"
"kvm"
];
@@ -178,6 +175,7 @@
nfs-utils
opensc
openssl
github-copilot-cli
# secure boot / tmp2
sbctl
tpm2-tss
@@ -188,6 +186,7 @@
p7zip
fzf
eza
yazi
];
networking = {
-1
View File
@@ -23,7 +23,6 @@
})
];
};
wayland.windowManager.hyprland.settings.config.input.kb_options = "lv3:caps_switch";
services.nextcloud-client.enable = true;
systemd.user.services = {
nm-applet = {
-1
View File
@@ -12,7 +12,6 @@
imports = [
./programs/neovide.nix
./programs/nixvim.nix
./programs/git.nix
./packages
./programs
./services
@@ -0,0 +1,50 @@
{ lib, config, ... }:
let
cfg = config.presets.auto-session;
in
{
options.presets.auto-session = {
enable = lib.mkEnableOption "auto session";
};
config = lib.mkIf cfg.enable {
opts.sessionoptions = lib.mkDefault (
lib.strings.concatStringsSep "," [
"blank"
"buffers"
"curdir"
"folds"
"help"
"tabpages"
"winsize"
"winpos"
"terminal"
"localoptions"
"globals"
]
);
plugins = {
auto-session = {
enable = lib.mkDefault true;
settings = {
cwd_change_handling = lib.mkDefault true;
lazy_support = false;
show_auto_restore_notif = true;
bypass_save_filetypes = [ "neo-tree" ];
};
};
lz-n.enable = true;
neo-tree.lazyLoad = {
enable = true;
settings.cmd = "Neotree";
};
fidget.lazyLoad = {
enable = true;
settings = {
event = [ "LspAttach" ];
};
};
};
};
}
@@ -29,6 +29,10 @@ in
copilot-lua = lib.mkIf cfg.copilot {
enable = true;
settings.suggestion.auto_trigger = true;
lazyLoad = {
enable = true;
settings.event = [ "InsertEnter" ];
};
};
minuet = lib.mkIf cfg.ollama {
enable = true;
@@ -107,7 +111,7 @@ in
};
documentation = {
border = "solid";
zindex = 10;
zindex = 9;
};
};
};
@@ -18,8 +18,10 @@ in
enable = true;
settings.formatters_by_ft = lib.mkIf cfg.prettier {
javascript = [ "prettierd" ];
javascriptreact = [ "prettierd" ];
markdown = [ "prettierd" ];
typescript = [ "prettierd" ];
typescriptreact = [ "prettierd" ];
json = [ "prettierd" ];
yaml = [ "prettierd" ];
html = [ "prettierd" ];
@@ -31,12 +31,6 @@ in
settings = {
options = {
globalstatus = true;
/*
section_separators = {
left = "";
right = "";
};
*/
component_separators = {
left = "";
right = "";
@@ -46,25 +40,14 @@ in
lualine_a = [
{
__unkeyed-1 = "mode";
/*
separator = {
right = "";
left = "";
};
*/
icon = "";
}
];
lualine_c = [ ];
lualine_x = lib.mkAfter [ { __unkeyed-1 = "filetype"; } ];
lualine_z = [
{
__unkeyed-1 = "location";
/*
separator = {
right = "";
left = "";
};
*/
}
];
};
@@ -26,6 +26,7 @@ in
grammarPackages = pkgs.vimPlugins.nvim-treesitter.allGrammars;
nixvimInjections = true;
};
treesitter-textobjects.enable = lib.mkDefault true;
indent-blankline = {
enable = lib.mkDefault true;
settings = {
@@ -0,0 +1,135 @@
{ lib, config, ... }:
let
cfg = config.presets.base.tabs;
in
{
options.presets.base.tabs = {
enable = lib.mkEnableOption "Tabs";
};
config = lib.mkIf cfg.enable {
keymaps = [
{
key = "<A-f>";
action = # vim
"<cmd>BufferPrevious<CR>";
options.desc = "Navigate Buffer Left";
}
{
key = "<A-h>";
action = # vim
"<cmd>BufferNext<CR>";
options.desc = "Navigate Buffer Right";
}
{
key = "<A-F>";
action = # vim
"<cmd>BufferMovePrevious<CR>";
options.desc = "Move Buffer Left";
}
{
key = "<A-H>";
action = # vim
"<cmd>BufferMoveNext<CR>";
options.desc = "Move Buffer Right";
}
{
key = "<A-p>";
action = # vim
"<cmd>BufferPin<CR>";
options.desc = "Pin Buffer";
}
{
key = "<A-c>";
action = # vim
"<cmd>BufferClose<CR>";
options.desc = "Close Buffer";
}
{
key = "<A-C>";
action = # vim
"<cmd>BufferRestore<CR>";
options.desc = "Close Buffer";
}
{
key = "gb";
action = # vim
"<cmd>BufferPick<CR>";
options.desc = "Pick Buffer";
}
];
plugins = {
barbar = {
enable = true;
settings = {
highlight_inactive_file_icons = true;
icons = {
button = "";
separator = {
left = "";
right = "";
};
modified.button = "";
separator_at_end = false;
pinned = {
button = "";
filename = true;
};
current = {
filetype.custom_colors = true;
separator = {
left = "";
right = "";
};
};
inactive = {
separator = {
left = "";
right = "";
};
};
};
minimum_padding = 1;
maximum_padding = 1;
letters = "etarfkcdmhsunobwgiyzqxvplj.,-ETARFKCDMHSUNOBWGIYZQXVPLJ";
};
};
auto-session.settings = {
pre_save_cmds = [
{
__raw = ''
function()
-- require("scope.session").save_state()
vim.api.nvim_exec_autocmds('User', {pattern = 'SessionSavePre'})
end
'';
}
];
post_restore_cmds = [
{
__raw = ''
function()
-- require("scope.session").load_state()
end
'';
}
];
};
scope = {
enable = false;
settings.hooks = {
pre_tab_leave.__raw = ''
function()
vim.api.nvim_exec_autocmds('User', {pattern = 'ScopeTabLeavePre'})
end
'';
post_tab_enter.__raw = ''
function()
vim.api.nvim_exec_autocmds('User', {pattern = 'ScopeTabEnterPost'})
end
'';
};
};
};
};
}
@@ -20,23 +20,18 @@ in
web-devicons.enable = true;
neo-tree = {
enable = true;
lazyLoad = {
enable = true;
settings.cmd = "Neotree";
};
settings = {
event_handlers = [
{
event = "neo_tree_buffer_leave";
handler.__raw = ''
function()
require('neo-tree').close_all()
end
'';
}
];
window.position = "float";
filesystem = {
use_libuv_file_watcher = true;
follow_current_file.enabled = true;
filtered_items.visible = true;
};
popupBorderStyle = "rounded";
popup_border_style = "";
};
};
which-key.settings.spec = [
@@ -0,0 +1,47 @@
{ lib, config, ... }:
let
cfg = config.presets.base.yazi;
in
{
options.presets.base.yazi = {
enable = lib.mkEnableOption "yazi";
};
config = lib.mkIf cfg.enable {
keymaps = [
{
key = "<leader>y";
mode = [
"n"
"v"
];
action = # vim
"<cmd>Yazi<CR>";
}
];
globals.loaded_netrwPlugin = 1;
plugins = {
web-devicons.enable = true;
yazi = {
enable = true;
settings = {
enable_mouse_support = true;
open_for_directories = true;
yazi_floating_window_border = "none";
keymaps.show_help = "<?>";
};
lazyLoad = {
enable = true;
settings.cmd = "Yazi";
};
};
which-key.settings.spec = [
{
__unkeyed-1 = "<leader>y";
desc = "Yazi";
icon = "󰙅";
}
];
};
};
}
@@ -17,6 +17,7 @@
./aerial.nix
./auto-save.nix
./auto-session.nix
./auto-format.nix
./harpoon.nix
./mergetool.nix
@@ -33,7 +34,9 @@
./base/spellcheck.nix
./base/status-line.nix
./base/syntax.nix
./base/tabs.nix
./base/tree.nix
./base/yazi.nix
./languages/angular.nix
./languages/c.nix
@@ -49,6 +52,7 @@
./languages/shell.nix
./languages/strudel.nix
./languages/svelte.nix
./languages/typst.nix
./remaps/half-page-scroll.nix
./remaps/no-accidental-macro.nix
+51 -40
View File
@@ -10,49 +10,60 @@ in
config = lib.mkIf cfg.enable {
keymaps = [
{
key = "hh";
key = "<leader>m";
mode = "n";
action = ":Telescope harpoon marks<CR>";
action.__raw = ''
function() require("harpoon"):list():add() end
'';
options.desc = "Mark";
}
{
key = "<leader><leader>";
mode = "n";
action.__raw = ''
function()
local harpoon = require("harpoon")
local conf = require("telescope.config").values
local harpoon_files = harpoon:list()
local file_paths = {}
for _, item in ipairs(harpoon_files.items) do
table.insert(file_paths, item.value)
end
require("telescope.pickers").new({}, {
prompt_title = "Harpoon",
finder = require("telescope.finders").new_table({
results = file_paths,
}),
previewer = conf.file_previewer({}),
sorter = conf.generic_sorter({}),
}):find()
end
'';
options.desc = "Harpoon List";
}
{
key = "<C-n>";
mode = "n";
action.__raw = ''
function() require("harpoon"):list():next() end
'';
options.desc = "Harpoon Next";
}
{
key = "<C-p>";
mode = "n";
action.__raw = ''
function() require("harpoon"):list():prev() end
'';
options.desc = "Harpoon Prev";
}
];
plugins = {
telescope.enable = true;
harpoon = {
enable = true;
enableTelescope = true;
keymaps = {
addFile = "hm";
navNext = "hn";
navPrev = "hp";
};
};
which-key.settings.spec = [
{
__unkeyed-1 = "h";
group = "Harpoon";
icon = "󱀺";
}
{
__unkeyed-1 = "hh";
desc = "Marks";
icon = "󰈢";
}
{
__unkeyed-1 = "hm";
desc = "Add File";
icon = "󱪝";
}
{
__unkeyed-1 = "hn";
desc = "Next";
icon = "";
}
{
__unkeyed-1 = "hp";
desc = "Prev";
icon = "";
}
];
plugins.harpoon = {
enable = true;
enableTelescope = true;
};
};
}
@@ -15,7 +15,9 @@ in
plugins = {
godot.enable = true;
conform-nvim.settings.formatters_by_ft.gdscript = [ "gdscript-formatter" ];
lsp.servers.gdscript = {
};
lsp.servers = {
gdscript = {
enable = true;
package = null;
config = {
@@ -24,6 +26,7 @@ in
root_markers = [ "project.godot" ];
};
};
gdshader_lsp.enable = true;
};
};
}
@@ -14,7 +14,13 @@ in
config = lib.mkIf cfg.enable {
plugins = {
strudel.enable = true;
strudel = {
enable = true;
lazyLoad = {
enable = true;
settings.ft = [ "strudel" ];
};
};
web-devicons.customIcons = {
str = {
icon = " ";
@@ -0,0 +1,24 @@
{
lib,
config,
...
}:
let
cfg = config.presets.languages.typst;
in
{
options.presets.languages.typst = {
enable = lib.mkEnableOption "Typst";
};
config = lib.mkIf cfg.enable {
lsp.servers.tinymist.enable = true;
plugins.typst-preview = {
enable = true;
lazyLoad = {
enable = true;
settings.ft = [ "typst" ];
};
};
};
}
@@ -64,6 +64,7 @@ in
settings = {
direction = lib.mkDefault "vertical";
size = lib.mkDefault 60;
float_opts.border = config.opts.winborder;
};
};
+2 -8
View File
@@ -15,18 +15,14 @@
};
};
home.packages = with pkgs; [
# nix
cachix
# lorri
vulnix
# gccdiag
# browsers
firefox
chromium
# media
yt-dlp
f3d
makemkv
libfaketime
@@ -39,13 +35,10 @@
# chat apps
vesktop
discord
thunderbird
signal-desktop
# cinny-desktop
# office
libreoffice
apostrophe
# creative
@@ -55,12 +48,13 @@
audacity
pinta
losslesscut-bin
shotcut
pkgsRocm.blender
# development
ghidra
kdePackages.kate
tinymist
typewriter
# utils
kdePackages.ark
-29
View File
@@ -1,29 +0,0 @@
{ ... }:
{
programs.git = {
enable = true;
signing = {
format = "openpgp";
key = "6C9E EFC5 1AE0 0131 78DE B9C8 68FF FB1E C187 88CA";
signByDefault = true;
};
settings = {
user = {
email = "dev@theaninova.de";
name = "Thea Schöbl";
};
pull.rebase = true;
init.defaultBranch = "main";
merge = {
tool = "nvim-mergetool";
conflictstyle = "diff3";
};
mergetool.nvim-mergetool = {
cmd = # sh
''nvim -f -c "MergetoolStart" "$MERGED" "$BASE" "$LOCAL" "$REMOTE"'';
trustExitCode = true;
};
mergetool.prompt = false;
};
};
}
+55 -4
View File
@@ -4,11 +4,27 @@
enable = true;
defaultEditor = true;
vimAlias = true;
nixpkgs.useGlobalPackages = true;
performance.byteCompileLua = {
enable = true;
configs = true;
initLua = true;
luaLib = true;
nvimRuntime = true;
plugins = true;
};
extraConfigLuaPre = ''
require('vim._core.ui2').enable()
'';
opts = {
number = true;
relativenumber = true;
cmdheight = 0;
tabstop = 2;
softtabstop = 2;
shiftwidth = 2;
@@ -27,6 +43,9 @@
updatetime = 50;
fillchars.eob = " ";
winborder = "solid";
pumborder = "solid";
};
clipboard = {
register = "unnamedplus";
@@ -36,16 +55,15 @@
presets = {
auto-save.enable = true;
auto-session.enable = true;
auto-format.enable = true;
lazygit.enable = true;
mergetool.enable = true;
undotree.enable = true;
aerial.enable = true;
base = {
completion = {
enable = true;
copilot = true;
ollama = false;
};
diagnostics.enable = true;
coverage.enable = false;
@@ -58,6 +76,7 @@
spellcheck.enable = true;
status-line.enable = true;
syntax.enable = true;
tabs.enable = true;
tree.enable = true;
};
languages = {
@@ -81,6 +100,7 @@
shell.enable = true;
strudel.enable = true;
svelte.enable = true;
typst.enable = true;
};
remaps = {
half-page-scroll.enable = true;
@@ -94,10 +114,41 @@
which-key.enable = true;
schemastore.enable = true;
todo-comments.enable = true;
origami.enable = false;
nvim-surround.enable = true;
lensline.enable = false; # Maybe?
ccc.enable = false; # Maybe?
spider.enable = false; # Maybe?
fidget.enable = true;
vim-tidal.enable = true;
gitsigns = {
enable = true;
settings = {
current_line_blame = true;
signcolumn = true;
numhl = true;
diff_opts = {
ignore_blank_lines = true;
ignore_whitespace_change = true;
ignore_whitespace_change_at_eol = true;
};
signs_staged = {
add.text = " ";
change.text = "🮙 ";
delete.text = " ";
topdelete.text = "🮂 ";
changedelete.text = " ";
untracked.text = " ";
};
signs = {
add.text = " ";
change.text = "🮙 ";
delete.text = " ";
topdelete.text = "🮂 ";
changedelete.text = " ";
untracked.text = " ";
};
};
};
treesitter-context = {
enable = false; # TODO: looks weird with Neovide
settings.line_numbers = false;
+1 -3
View File
@@ -37,7 +37,7 @@ hl.config({
},
})
hl.curve("default", { type = "spring", mass = 1, stiffness = 90, dampening = 30 })
hl.curve("default", { type = "spring", mass = 1, stiffness = 270, dampening = 30 })
hl.curve("linear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.5, 0.5 } } })
hl.animation({ leaf = "windows", enabled = true, speed = 1, spring = "default", style = "slide" })
@@ -49,5 +49,3 @@ hl.animation({ leaf = "border", enabled = true, speed = 1, spring = "default" })
hl.animation({ leaf = "fade", enabled = true, speed = 3, bezier = "linear" })
hl.animation({ leaf = "fadeShadow", enabled = true, speed = 4, bezier = "linear" })
hl.animation({ leaf = "fadeDim", enabled = true, speed = 4, bezier = "linear" })
hl.animation({ leaf = "workspaces", enabled = true, speed = 1, spring = "default", style = "slidevert" })
+47 -124
View File
@@ -23,16 +23,18 @@ in
};
flavour = lib.mkOption {
type = lib.types.enum [
"content"
"expressive"
"fidelity"
"fruit-salad"
"monochrome"
"neutral"
"rainbow"
"tonal-spot"
"SchemeContent"
"SchemeExpressive"
"SchemeFidelity"
"SchemeFruitSalad"
"SchemeMonochrome"
"SchemeNeutral"
"SchemeRainbow"
"SchemeTonalSpot"
"SchemeVibrant"
"SchemeSmart"
];
default = "tonal-spot";
default = "SchemeSmart";
description = "The flavour of the theme";
};
contrast = lib.mkOption {
@@ -189,106 +191,14 @@ in
pkgs.zenity
pkgs.sunwait
];
text =
# sh
''
WALLPAPER=${config.xdg.configHome}/matugen/wallpaper
STATE=${config.xdg.stateHome}/md3-evo
SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme)
if [ "$SCHEME" = "'prefer-light'" ]; then
MODE="light"
else
MODE="dark"
fi
if [ ! -d "$STATE" ]; then
mkdir -p "$STATE"
fi
if [ -f "$STATE/mode" ]; then
MODE=$(cat "$STATE/mode")
fi
if [ $# -eq 0 ]; then
echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper"
exit 1
elif [ "$1" = "mode" ]; then
echo -e "$MODE"
exit 0
elif [ "$1" = "wallpaper" ]; then
if [ $# -eq 1 ]; then
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
cp "$PICKED" "$WALLPAPER"
else
cp "$2" "$WALLPAPER"
fi
elif [ "$1" = "toggle" ]; then
if [ "$MODE" = "light" ]; then
MODE="dark"
else
MODE="light"
fi
echo "$MODE" > "$STATE/mode"
elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then
MODE="$1"
echo "$MODE" > "$STATE/mode"
elif [ "$1" = "init" ]; then
echo -e "\033[1mSetting up matugen\033[0m"
else
echo -e "\033[31mInvalid argument\033[0m"
exit 1
fi
if [ ! -f $WALLPAPER ]; then
echo -e "\033[31,1mNo wallpaper set\033[0m"
exit 1
fi
THEME_SERVICE_PATH="${config.xdg.configHome}/systemd/user/theme-init.timer"
if [ "$MODE" = "auto" ]; then
TIME=$(sunwait poll ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E || :)
if [ "$TIME" = "DAY" ]; then
MODE="light"
NEXT=6
else
MODE="dark"
NEXT=4
fi
NEXT=$(sunwait report ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E | awk "/Daylight:/ {print \$$NEXT}")
cat <<EOF | tee "$THEME_SERVICE_PATH" > /dev/null
[Unit]
Description=Next theme change timer
[Timer]
OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00
AccuracySec=1min
[Install]
WantedBy=timers.target
EOF
else
rm -f "$THEME_SERVICE_PATH"
fi
systemctl --user daemon-reload &> /dev/null || :
systemctl --user restart theme-init.timer &> /dev/null || :
if command -v niri &> /dev/null; then
niri msg action do-screen-transition --delay-ms 500
fi
if [ "$MODE" = "light" ]; then
GTK_THEME="adw-gtk3"
else
GTK_THEME="adw-gtk3-dark"
fi
matugen image "$WALLPAPER" --type scheme-${cfg.flavour} --contrast ${builtins.toString cfg.contrast} --mode "$MODE"
awww img "$WALLPAPER"
dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'"
dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'"
dconf write /org/gnome/desktop/interface/icon-theme "'Tela'"
'';
runtimeEnv = {
STATE = "/home/theaninova/.local/state/md3-evo";
THEME_SERVICE_PATH = "${config.xdg.configHome}/systemd/user/theme-init.timer";
FLAVOUR = toString cfg.flavour;
LAT = "${toString cfg.auto-dark.lat}N";
LON = "${toString cfg.auto-dark.lon}E";
};
text = builtins.readFile ./theme.sh;
}
);
in
@@ -297,9 +207,12 @@ in
pkgs.adw-gtk3
pkgs.awww
pkgs.tela-icon-theme
pkgs.adwaita-icon-theme
pkgs.adwaita-icon-theme-legacy
pkgs.bibata-cursors
pkgs.gnome-themes-extra
theme-script
];
gtk = {
gtk3.extraCss = # css
"@import './theme.css';";
@@ -399,6 +312,10 @@ in
settings = {
config = {
version_check = false;
source_color_index = 0;
contrast = cfg.contrast;
type = cfg.flavour;
reload_apps_list = {
waybar = config.programs.waybar.enable;
@@ -436,20 +353,26 @@ in
info = mkColor "semantic" "info";
};
custom_keywords = {
inherit (cfg) flavour;
padding = builtins.toString cfg.padding;
double_padding = builtins.toString (cfg.padding * 2);
radius = builtins.toString cfg.radius;
transparency = builtins.toString cfg.transparency;
blur = builtins.toString cfg.blur;
contrast = builtins.toString cfg.contrast;
transparency_hex =
let
zeroPad = hex: if builtins.stringLength hex == 1 then "0${hex}" else hex;
in
zeroPad (lib.trivial.toHexString (builtins.floor (cfg.transparency * 255)));
};
import_json_files = [
(pkgs.writeText "keywords.json" (
builtins.toJSON {
custom = {
inherit (cfg) flavour;
padding = toString cfg.padding;
double_padding = toString (cfg.padding * 2);
radius = toString cfg.radius;
transparency = toString cfg.transparency;
blur = toString cfg.blur;
contrast = toString cfg.contrast;
transparency_hex =
let
zeroPad = hex: if builtins.stringLength hex == 1 then "0${hex}" else hex;
in
zeroPad (lib.trivial.toHexString (builtins.floor (cfg.transparency * 255)));
};
}
))
];
};
templates =
+60 -5
View File
@@ -37,7 +37,7 @@ let g:terminal_color_14 = "{{colors.cyan.default.hex}}"
let g:terminal_color_15 = "{{colors.on_surface_variant.default.hex}}"
set termguicolors
set background={{mode | to_lower}}
set background={{mode | lower_case}}
if exists("g:neovide")
hi! Normal guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
@@ -115,15 +115,49 @@ hi! SpellRare gui=undercurl guisp={{colors.success.default.hex}}
hi! SpellLocal gui=undercurl guisp={{colors.success.default.hex}}
hi! DiffAdd guibg={{colors.green_container.default.hex}} guifg={{colors.on_green_container.default.hex}}
hi! DiffChange guibg={{colors.yellow_container.default.hex}} guifg={{colors.on_yellow_container.default.hex}}
hi! DiffChange guibg={{colors.blue_container.default.hex}} guifg={{colors.on_blue_container.default.hex}}
hi! DiffDelete guibg={{colors.red_container.default.hex}} guifg={{colors.on_red_container.default.hex}}
hi! DiffText guibg={{colors.blue_container.default.hex}} guifg={{colors.on_blue_container.default.hex}}
hi! DiffText guibg={{colors.yellow_container.default.hex}} guifg={{colors.on_yellow_container.default.hex}}
hi Added guifg={{colors.green.default.hex}}
hi Changed guifg={{colors.blue.default.hex}}
hi Removed guifg={{colors.red.default.hex}}
hi GitSignsAdd guibg={{colors.green_container.default.hex}} guifg={{colors.green.default.hex | auto_lightness: 40.0}}
hi GitSignsChange guibg={{colors.blue_container.default.hex}} guifg={{colors.blue.default.hex | auto_lightness: 30.0}}
hi GitSignsDelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex | auto_lightness: 40.0}}
hi GitSignsTopdelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex | auto_lightness: 40.0}}
hi GitSignsChangedelete guibg={{colors.yellow_container.default.hex}} guifg={{colors.yellow.default.hex | auto_lightness: 30.0}}
hi GitSignsUntracked guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex | auto_lightness: 30.0}}
hi GitSignsStagedAdd guibg={{colors.green_container.default.hex}} guifg={{colors.green.default.hex}}
hi GitSignsStagedChange guibg={{colors.blue_container.default.hex}} guifg={{colors.blue.default.hex}}
hi GitSignsStagedDelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}}
hi GitSignsStagedTopdelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}}
hi GitSignsStagedChangedelete guibg={{colors.yellow_container.default.hex}} guifg={{colors.yellow.default.hex}}
hi GitSignsStagedUntracked guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi GitSignsAddNr guibg={{colors.green_container.default.hex}} guifg={{colors.on_green_container.default.hex}}
hi GitSignsChangeNr guibg={{colors.blue_container.default.hex}} guifg={{colors.on_blue_container.default.hex}}
hi GitSignsDeleteNr guibg={{colors.red_container.default.hex}} guifg={{colors.on_red_container.default.hex}}
hi GitSignsTopdeleteNr guibg={{colors.red_container.default.hex}} guifg={{colors.on_red_container.default.hex}}
hi GitSignsChangedeleteNr guibg={{colors.yellow_container.default.hex}} guifg={{colors.on_yellow_container.default.hex}}
hi GitSignsUntrackedNr guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi GitSignsStagedAddNr guibg={{colors.green_container.default.hex}} guifg={{colors.on_green_container.default.hex}}
hi GitSignsStagedChangeNr guibg={{colors.blue_container.default.hex}} guifg={{colors.on_blue_container.default.hex}}
hi GitSignsStagedDeleteNr guibg={{colors.red_container.default.hex}} guifg={{colors.on_red_container.default.hex}}
hi GitSignsStagedTopdeleteNr guibg={{colors.red_container.default.hex}} guifg={{colors.on_red_container.default.hex}}
hi GitSignsStagedChangedeleteNr guibg={{colors.yellow_container.default.hex}} guifg={{colors.on_yellow_container.default.hex}}
hi GitSignsStagedUntrackedNr guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi GitSignsCurrentLineBlame guifg={{colors.outline.default.hex}}
hi! NeoTreeGitAdded guifg={{colors.green.default.hex}}
hi! NeoTreeGitDeleted guifg={{colors.red.default.hex}}
hi! NeoTreeGitModified guifg={{colors.yellow.default.hex}}
hi! NeoTreeGitModified guifg={{colors.blue.default.hex}}
hi! NeoTreeGitConflict guifg={{colors.danger.default.hex}}
hi! NeoTreeGitUntracked guifg={{colors.blue.default.hex}}
hi! NeoTreeGitUntracked guifg={{colors.yellow.default.hex}}
hi! NonText guifg={{colors.outline_variant.default.hex}}
hi! CursorLineNr guifg={{colors.on_surface.default.hex}}
@@ -221,6 +255,27 @@ hi! MatchParen gui=none guibg={{colors.surface_container_highest.default.hex}}
hi! LspInlayHint gui=italic guifg={{colors.outline.default.hex}} guibg={{colors.surface_container_highest.default.hex}}
hi BufferCurrent guibg={{colors.primary.default.hex}} guifg={{colors.on_primary.default.hex}}
hi BufferCurrentMod guibg={{colors.primary.default.hex}} guifg={{colors.on_primary.default.hex}}
hi BufferCurrentIcon guibg={{colors.primary.default.hex}} guifg={{colors.on_primary.default.hex}}
hi BufferCurrentSign guibg={{colors.surface.default.hex}} guifg={{colors.primary.default.hex}}
hi BufferCurrentTarget guibg={{colors.primary.default.hex}} guifg={{colors.on_primary.default.hex}}
hi BufferVisible guibg={{colors.primary_container.default.hex}} guifg={{colors.on_primary_container.default.hex}}
hi BufferVisibleIcon guibg={{colors.primary_container.default.hex}}
hi BufferVisibleSign guibg={{colors.surface.default.hex}} guifg={{colors.primary_container.default.hex}}
hi BufferVisibleTarget guibg={{colors.primary_container.default.hex}} guifg={{colors.primary.default.hex}}
hi BufferInactive guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi BufferInactiveIcon guibg={{colors.surface.default.hex}}
hi BufferInactiveSign guibg={{colors.surface.default.hex}} guifg={{colors.outline.default.hex}}
hi BufferInactiveTarget guibg={{colors.surface.default.hex}} guifg={{colors.primary.default.hex}}
hi BufferTabpageFill guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi BufferScrollArrow guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
hi BufferTabpages guibg={{colors.surface.default.hex}} guifg={{colors.secondary.default.hex}}
hi BufferTabpagesSep guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}}
let g:lualine_theme = {
\ "insert": {
\ "a": {"fg": "{{colors.on_green.default.hex}}", "bg": "{{colors.green.default.hex}}", "gui": "bold"},
+101
View File
@@ -0,0 +1,101 @@
SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme)
if [ "$SCHEME" = "'prefer-light'" ]; then
MODE="light"
else
MODE="dark"
fi
if [ ! -d "$STATE" ]; then
mkdir -p "$STATE"
fi
if [ -f "$STATE/mode" ]; then
MODE=$(cat "$STATE/mode")
fi
if [ $# -eq 0 ]; then
echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper"
exit 1
elif [ "$1" = "mode" ]; then
echo -e "$MODE"
exit 0
elif [ "$1" = "wallpaper" ]; then
if [ $# -eq 1 ]; then
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
else
dconf write /org/gnome/desktop/background/picture-uri "'file://$2'"
fi
dconf write /org/gnome/desktop/background/picture-uri "'file://$PICKED'"
elif [ "$1" = "wallpaper-dark" ]; then
if [ $# -eq 1 ]; then
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
else
dconf write /org/gnome/desktop/background/picture-uri-dark "'file://$2'"
fi
dconf write /org/gnome/desktop/background/picture-uri-dark "'file://$PICKED'"
elif [ "$1" = "toggle" ]; then
if [ "$MODE" = "light" ]; then
MODE="dark"
else
MODE="light"
fi
echo "$MODE" >"$STATE/mode"
elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then
MODE="$1"
echo "$MODE" >"$STATE/mode"
elif [ "$1" = "init" ]; then
echo -e "\033[1mSetting up matugen\033[0m"
else
echo -e "\033[31mInvalid argument\033[0m"
exit 1
fi
if [ "$MODE" = "auto" ]; then
TIME=$(sunwait poll "$LAT" "$LON" || :)
if [ "$TIME" = "DAY" ]; then
MODE="light"
NEXT=6
else
MODE="dark"
NEXT=4
fi
NEXT=$(sunwait report "$LAT" "$LON" | awk "/Daylight:/ {print \$$NEXT}")
cat <<EOF | tee "$THEME_SERVICE_PATH" >/dev/null
[Unit]
Description=Next theme change timer
[Timer]
OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00
AccuracySec=1min
[Install]
WantedBy=timers.target
EOF
else
rm -f "$THEME_SERVICE_PATH"
fi
systemctl --user daemon-reload &>/dev/null || :
systemctl --user restart theme-init.timer &>/dev/null || :
if command -v niri &>/dev/null; then
niri msg action do-screen-transition --delay-ms 500
fi
if [ "$MODE" = "light" ]; then
GTK_THEME="adw-gtk3"
WALLPAPER=$(dconf read /org/gnome/desktop/background/picture-uri | sed "s/'file:\/\///;s/'//g")
else
GTK_THEME="adw-gtk3-dark"
WALLPAPER=$(dconf read /org/gnome/desktop/background/picture-uri-dark | sed "s/'file:\/\///;s/'//g")
fi
if [ ! -f "$WALLPAPER" ]; then
echo -e "\033[31,1mNo wallpaper set\033[0m"
exit 1
fi
matugen image "$WALLPAPER" --mode "$MODE"
awww img "$WALLPAPER"
dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'"
dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'"
dconf write /org/gnome/desktop/interface/icon-theme "'Tela'"
+2
View File
@@ -15,6 +15,7 @@
./hardware/astro-a50.nix
./hardware/audio.nix
./hardware/gbmonctl.nix
./hardware/luci-keyboard.nix
./hardware/nvidia-proprietary.nix
./hardware/nvidia-nouveau.nix
./hardware/amdgpu.nix
@@ -28,6 +29,7 @@
./usecases/3d-printing.nix
./usecases/development.nix
./usecases/flatpak.nix
./usecases/gaming.nix
./usecases/localai.nix
./usecases/nix-ld.nix
+5 -2
View File
@@ -16,7 +16,10 @@ in
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ glib ];
environment.systemPackages = with pkgs; [
glib
adwaita-icon-theme
];
programs.hyprland = {
enable = true;
@@ -90,7 +93,7 @@ in
services = {
kmscon = {
enable = true;
hwRender = true;
config.hwaccel = true;
};
greetd = {
enable = true;
+1 -1
View File
@@ -137,7 +137,7 @@ in
services = {
kmscon = {
enable = true;
hwRender = true;
config.hwaccel = true;
};
greetd = {
enable = true;
+7
View File
@@ -56,6 +56,13 @@ in
no_break_fs_vrr = 1;
};
};
animation = {
leaf = "workspaces";
enabled = true;
speed = 1;
spring = "default";
style = "slidevert";
};
monitor = {
output = "DP-3";
mode = "3840x2160@144";
+18
View File
@@ -0,0 +1,18 @@
xkb_symbols "luci-keyboard"
{
include "de(basic)"
key <CAPS> {[backslash, bar]};
key <INS> {
type="ONE_LEVEL",
symbols[Group1] = [ bar ]
};
key <PGUP> {[braceleft]};
key <PGDN> {[braceright]};
key <HOME> {
type="ONE_LEVEL",
symbols[Group1] = [ at ]
};
key <END> {[asciitilde]};
};
+33
View File
@@ -0,0 +1,33 @@
{
pkgs,
lib,
config,
username,
...
}:
with lib;
let
cfg = config.hardware.luci-keyboard;
in
{
options.hardware.luci-keyboard = {
enable = mkEnableOption "Enable Luci Keyboard Layout";
};
config = mkIf cfg.enable {
home-manager.users."${username}".xdg.configFile."xkb/symbols/luci-keyboard".source =
./luci-keyboard;
console.useXkbConfig = true;
services.xserver.xkb = {
layout = "luci-keyboard";
extraLayouts.luci-keyboard = {
description = "Luci's optimized layout";
languages = [
"ger"
];
symbolsFile = ./luci-keyboard;
};
};
};
}
+3
View File
@@ -24,6 +24,9 @@ in
# Bambu Network Plugin
networking.firewall.allowedUDPPorts = [ 2021 ];
home-manager.users.${username} = {
home.packages = with pkgs; [
orca-slicer
];
programs = {
lazygit.enable = true;
};
+138
View File
@@ -0,0 +1,138 @@
{
config,
lib,
pkgs,
username,
...
}:
with lib;
let
cfg = config.usecases.flatpak;
home-path = "${config.home-manager.users.${username}.home.path}";
home-files = "${config.home-manager.users.${username}.home-files}";
icon_theme_name = "${config.home-manager.users.${username}.gtk.iconTheme.name}";
theme_name = "${config.home-manager.users.${username}.gtk.theme.name}";
cursor_theme_name = "${config.home-manager.users.${username}.gtk.cursorTheme.name}";
in
let
gawk = "${pkgs.gawk}/bin/gawk";
flatpak = "${pkgs.flatpak}/bin/flatpak";
su = "${pkgs.su}/bin/su";
cursor_theme_path = "${home-files}/.local/share/icons/${cursor_theme_name}";
icon_theme_path = "${home-files}/.local/share/icons/${icon_theme_name}";
theme_path = "${home-files}/.local/share/themes/${theme_name}";
icon_theme_path_1 = "${home-path}/share/icons/${icon_theme_name}";
theme_path_1 = "${home-path}/share/themes/${theme_name}";
in
let
workaround =
# sh
''
if [ ! -f /var/lib/flatpak/overrides/global ]; then
touch /var/lib/flatpak/overrides/global
fi
${gawk} -i inplace '{gsub(/\/nix\/store[^;]*;|!\/nix\/store[^;]*;/,""); print}' /var/lib/flatpak/overrides/global
${gawk} -i inplace '{gsub(/filesystems=/,"filesystems=${icon_theme_path};${theme_path};${cursor_theme_path};"); print}' /var/lib/flatpak/overrides/global
${gawk} -i inplace '{gsub(/\/nix\/store[^;]*;|!\/nix\/store[^;]*;/,""); print}' "/home/${username}/.local/share/flatpak/overrides/global"
${gawk} -i inplace '{gsub(/filesystems=/,"filesystems=${icon_theme_path};${theme_path};${cursor_theme_path};"); print}' "/home/${username}/.local/share/flatpak/overrides/global"
${flatpak} override --env=GTK_THEME=${theme_name}
${su} "${username}" -c '${flatpak} override --user --env=GTK_THEME=${theme_name}'
'';
in
{
options.usecases.flatpak = {
enable = mkEnableOption "Enable flatpak stuff";
};
config = mkIf cfg.enable {
fonts.fontDir.enable = true;
# Need to run
# flatpak --user override --filesystem=$HOME/.local/share/fonts:ro
# flatpak --user override --filesystem=$HOME/.icons:ro
# flatpak --user override --filesystem=/nix/store:ro
# flatpak --user override --filesystem=/run/current-system/sw/share/X11/fonts:ro
system.fsPackages = [ pkgs.bindfs ];
fileSystems =
let
mkRoSymBind = path: {
device = path;
fsType = "fuse.bindfs";
options = [
"ro"
"resolve-symlinks"
"x-gvfs-hide"
];
};
fontsPkgs =
config.fonts.packages
++ (with pkgs; [
# Add your cursor themes and icon packages here
bibata-cursors
gnome-themes-extra
adwaita-icon-theme
tela-icon-theme
# etc.
]);
x11Fonts =
pkgs.runCommand "X11-fonts"
{
preferLocalBuild = true;
nativeBuildInputs = with pkgs; [
gzip
mkfontdir
];
}
(
''
mkdir -p "$out/share/fonts"
font_regexp='.*\.\(ttf\|ttc\|otb\|otf\|pcf\|pfa\|pfb\|bdf\)\(\.gz\)?'
''
+ (builtins.concatStringsSep "\n" (
builtins.map (pkg: ''
find ${toString pkg} -regex "$font_regexp" \
-exec ln -sf -t "$out/share/fonts" '{}' \;
'') fontsPkgs
))
+ ''
cd "$out/share/fonts"
mkfontscale
mkfontdir
cat $(find ${pkgs.font-alias}/ -name fonts.alias) >fonts.alias
''
);
aggregatedIcons = pkgs.buildEnv {
name = "system-icons";
paths = fontsPkgs;
pathsToLink = [
"/share/icons"
];
};
in
{
"/usr/share/icons" = mkRoSymBind (aggregatedIcons + "/share/icons");
"/usr/share/fonts" = mkRoSymBind (x11Fonts + "/share/fonts");
};
services.flatpak.enable = true;
##workaround for themes and icons
systemd.services.workaround-for-theme-and-icons = {
wantedBy = [ "multi-user.target" ];
after = [ "systemd-user-sessions.service" ];
before = [ "getty.target" ];
script = workaround;
};
home-manager.users.${username}.home.file = {
".local/share/icons/${icon_theme_name}".source =
config.home-manager.users.${username}.lib.file.mkOutOfStoreSymlink
"${icon_theme_path_1}";
".local/share/themes/${theme_name}".source =
config.home-manager.users.${username}.lib.file.mkOutOfStoreSymlink
"${theme_path_1}";
};
};
}