aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatasha Moongrave <natasha@256phi.eu>2026-04-10 19:20:58 +0200
committerNatasha Moongrave <natasha@256phi.eu>2026-04-10 19:20:58 +0200
commitadcc6ca839c4780a8adb82de712ec3c9e4da33f3 (patch)
treecafb7b744316ad79aef2bb2c899f920c4ae2cc83
parenta414126dbda913dcc33d5f9546a9f99859d1557f (diff)
parent84d39cf904e7008434c1e5ed8257cf09b1875bea (diff)
Merge branch 'schrott-extract-rice'
-rwxr-xr-xflake.lock30
-rw-r--r--flake.nix4
-rw-r--r--home/mun/default.nix4
-rw-r--r--home/mun/programs/nvim.nix279
-rw-r--r--home/rices/schrottkatze/browser.nix399
-rw-r--r--home/rices/schrottkatze/default.nix4
-rw-r--r--home/rices/schrottkatze/eww.nix6
-rw-r--r--home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck77
-rw-r--r--home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck37
-rw-r--r--home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck18
-rw-r--r--home/rices/schrottkatze/eww/configDir/eww.css58
-rw-r--r--home/rices/schrottkatze/eww/configDir/eww.yuck36
-rwxr-xr-xhome/rices/schrottkatze/eww/configDir/scripts/bat.nu78
-rwxr-xr-xhome/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu38
-rw-r--r--home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck22
-rw-r--r--home/rices/schrottkatze/eww/configDir/topBar/time.yuck10
-rw-r--r--home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck55
-rw-r--r--home/rices/schrottkatze/eww/configDir/util.yuck10
-rw-r--r--home/rices/schrottkatze/fuzzel.nix26
-rw-r--r--home/rices/schrottkatze/home.nix43
-rw-r--r--home/rices/schrottkatze/layaway.nix24
-rw-r--r--home/rices/schrottkatze/niri.nix40
-rw-r--r--home/rices/schrottkatze/niri/kdl/binds.kdl124
-rw-r--r--home/rices/schrottkatze/niri/kdl/input.kdl22
-rw-r--r--home/rices/schrottkatze/niri/kdl/overviews.kdl19
-rw-r--r--home/rices/schrottkatze/niri/kdl/privacy.kdl12
-rw-r--r--home/rices/schrottkatze/niri/kdl/quirks.kdl42
-rw-r--r--home/rices/schrottkatze/niri/kdl/screenshot.kdl6
-rw-r--r--home/rices/schrottkatze/niri/kdl/style.kdl84
-rw-r--r--home/rices/schrottkatze/niri/kdl/workspaces.kdl.disabled63
-rwxr-xr-xhome/rices/schrottkatze/niri/scripts/cpdate.sh20
-rw-r--r--home/rices/schrottkatze/niri/shaders/arc.frag131
-rw-r--r--home/rices/schrottkatze/niri/wallpaper.jpgbin0 -> 8827762 bytes
-rw-r--r--home/rices/schrottkatze/notifications.nix21
-rw-r--r--home/rices/schrottkatze/stylix.nix24
-rw-r--r--home/rices/schrottkatze/swayidle.nix15
-rw-r--r--home/rices/schrottkatze/system.nix123
-rw-r--r--home/rices/schrottkatze/terminal.nix36
-rw-r--r--hosts/herra/packages.nix30
39 files changed, 2035 insertions, 35 deletions
diff --git a/flake.lock b/flake.lock
index 4e98da3..80adf4c 100755
--- a/flake.lock
+++ b/flake.lock
@@ -70,11 +70,11 @@
},
"crane": {
"locked": {
- "lastModified": 1775236976,
- "narHash": "sha256-gCgX+AXN7K1gAIEqcLcZHxmC+QoZcwn9m6Z9r2Az+N8=",
+ "lastModified": 1775790182,
+ "narHash": "sha256-pG2RWVQY0Pe+rmmXJx+Jpyi+JcgjWzS18m7fcD1B64Q=",
"owner": "ipetkov",
"repo": "crane",
- "rev": "6c23998526351a53ce734f0ac84940da988ccef1",
+ "rev": "534982f1c41834b101e381b07b1121a4f065a374",
"type": "github"
},
"original": {
@@ -91,11 +91,11 @@
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
- "lastModified": 1775547409,
- "narHash": "sha256-dNIhLmwrR7N78amgliAJvFx58RjrhDWorV9B9Kiayeo=",
+ "lastModified": 1775807984,
+ "narHash": "sha256-Redoe3D9zGN5I9QPHWL9vfMVQBehY1fKsMiRXQ83X3w=",
"owner": "nix-community",
"repo": "fenix",
- "rev": "a260dea172f86c7afa65cec0c6e6a9dd91530017",
+ "rev": "fcf90c0c4d368b2ca917a7afa6d08e98a397e5fd",
"type": "github"
},
"original": {
@@ -199,11 +199,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1775305101,
- "narHash": "sha256-/74n1oQPtKG52Yw41cbToxspxHbYz6O3vi+XEw16Qe8=",
+ "lastModified": 1775595990,
+ "narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "36a601196c4ebf49e035270e10b2d103fe39076b",
+ "rev": "4e92bbcdb030f3b4782be4751dc08e6b6cb6ccf2",
"type": "github"
},
"original": {
@@ -215,11 +215,11 @@
},
"nixpkgs-unstable": {
"locked": {
- "lastModified": 1775423009,
- "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
+ "lastModified": 1775710090,
+ "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
+ "rev": "4c1018dae018162ec878d42fec712642d214fdfa",
"type": "github"
},
"original": {
@@ -267,11 +267,11 @@
"rust-analyzer-src": {
"flake": false,
"locked": {
- "lastModified": 1775499626,
- "narHash": "sha256-6PyDFl9fJu12xfdjgEiQKEVjX6/cdkN1DeKRLKwUz44=",
+ "lastModified": 1775745684,
+ "narHash": "sha256-8MbfLwd60FNa8dRFkjE+G3TT/x21G3Rsplm1bMBQUtU=",
"owner": "rust-lang",
"repo": "rust-analyzer",
- "rev": "129f6167ab924c42fb16d4e3d1b31b6e725c7523",
+ "rev": "64ddb549bc9a70d011328746fa46a8883f937b6b",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 5d348f8..a565e62 100644
--- a/flake.nix
+++ b/flake.nix
@@ -95,8 +95,8 @@
};
in {
nixosConfigurations = {
- kronos = mkSystem "kronos" "nord-blue";
- herra = mkSystem "herra" "plasma6";
+ kronos = mkSystem "kronos" "schrottkatze";
+ herra = mkSystem "herra" "schrottkatze";
mystra = mkSystem "mystra" "nord-blue";
};
};
diff --git a/home/mun/default.nix b/home/mun/default.nix
index b109dac..f6b419d 100644
--- a/home/mun/default.nix
+++ b/home/mun/default.nix
@@ -7,7 +7,8 @@
./programs/zsh.nix
./programs/ssh.nix
./programs/git.nix
- ];
+ ./programs/nvim.nix
+];
home = {
username = "mun";
@@ -34,6 +35,7 @@
openrocket
kicad
evolution
+ signal-desktop
# Utilities
pay-respects
diff --git a/home/mun/programs/nvim.nix b/home/mun/programs/nvim.nix
new file mode 100644
index 0000000..9677c57
--- /dev/null
+++ b/home/mun/programs/nvim.nix
@@ -0,0 +1,279 @@
+{pkgs, ...}: {
+ home.packages = with pkgs; [
+ zathura
+ ripgrep
+ fd
+ lazygit
+ stylua
+ alejandra
+ black
+ shfmt
+
+ # Language servers
+ lua-language-server
+ nil
+ rust-analyzer
+ pyright
+ bash-language-server
+ texlab
+ ];
+
+ programs.neovim = {
+ enable = true;
+ defaultEditor = true;
+ viAlias = true;
+ vimAlias = true;
+
+ plugins = with pkgs.vimPlugins; [
+ # UI
+ catppuccin-nvim
+ nvim-web-devicons
+ which-key-nvim
+ gitsigns-nvim
+
+ # Syntax
+ (nvim-treesitter.withPlugins (p: [
+ p.lua
+ p.nix
+ p.rust
+ p.python
+ p.bash
+ p.latex
+ p.c
+ ]))
+
+ # LSP
+ nvim-lspconfig
+
+ # Completion / snippets
+ nvim-cmp
+ cmp-nvim-lsp
+ cmp_luasnip
+ luasnip
+ friendly-snippets
+ nvim-autopairs
+
+ # Formatting
+ conform-nvim
+ comment-nvim
+
+ # Navigation
+ telescope-nvim
+ plenary-nvim
+ nvim-tree-lua
+
+ # Terminal
+ toggleterm-nvim
+
+ # Writing
+ vimtex
+ orgmode
+
+ # Start screen
+ {
+ plugin = vim-startify;
+ config = "let g:startify_change_to_vcs_root = 0";
+ }
+ ];
+
+ extraLuaConfig = ''
+ -------------------------------------------------
+ -- LEADER
+ -------------------------------------------------
+ vim.g.mapleader = " "
+
+ -------------------------------------------------
+ -- BASIC OPTIONS
+ -------------------------------------------------
+ vim.opt.number = true
+ vim.opt.relativenumber = true
+ vim.opt.clipboard = "unnamedplus"
+ vim.opt.showtabline = 2
+ vim.o.timeout = true
+ vim.o.timeoutlen = 300
+
+ -------------------------------------------------
+ -- THEME
+ -------------------------------------------------
+ require("catppuccin").setup({
+ flavour = "mocha",
+ })
+ vim.cmd.colorscheme("catppuccin")
+
+ -------------------------------------------------
+ -- GITSIGNS
+ -------------------------------------------------
+ require("gitsigns").setup()
+
+ -------------------------------------------------
+ -- TREESITTER
+ -------------------------------------------------
+ require("nvim-treesitter.configs").setup({
+ highlight = { enable = true },
+ indent = { enable = true },
+ })
+
+ vim.opt.foldmethod = "expr"
+ vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
+ vim.opt.foldenable = false
+
+ -------------------------------------------------
+ -- SNIPPETS
+ -------------------------------------------------
+ require("luasnip.loaders.from_vscode").lazy_load()
+
+ -------------------------------------------------
+ -- COMPLETION
+ -------------------------------------------------
+ local cmp = require("cmp")
+ local luasnip = require("luasnip")
+
+ cmp.setup({
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ mapping = cmp.mapping.preset.insert({
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<CR>"] = cmp.mapping.confirm({ select = true }),
+ }),
+ sources = {
+ { name = "nvim_lsp" },
+ { name = "luasnip" },
+ },
+ })
+
+ require("nvim-autopairs").setup({})
+
+ -------------------------------------------------
+ -- LSP
+ -------------------------------------------------
+ local capabilities = require("cmp_nvim_lsp").default_capabilities()
+
+ local servers = {
+ "lua_ls",
+ "nil_ls",
+ "rust_analyzer",
+ "pyright",
+ "bashls",
+ "texlab",
+ }
+
+ for _, server in ipairs(servers) do
+ vim.lsp.config(server, {
+ capabilities = capabilities
+ })
+ vim.lsp.enable(server)
+ end
+
+ -------------------------------------------------
+ -- LSP KEYMAPS
+ -------------------------------------------------
+ vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition)
+ vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration)
+ vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation)
+ vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references)
+ vim.keymap.set("n", "lh", vim.lsp.buf.hover)
+ vim.keymap.set("n", "ln", vim.lsp.buf.rename)
+ vim.keymap.set("n", "la", vim.lsp.buf.code_action)
+ vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end)
+
+ -------------------------------------------------
+ -- DIAGNOSTICS
+ -------------------------------------------------
+ vim.keymap.set("n", "lj", vim.diagnostic.goto_next)
+ vim.keymap.set("n", "lk", vim.diagnostic.goto_prev)
+ vim.keymap.set("n", "le", vim.diagnostic.open_float)
+
+ -------------------------------------------------
+ -- FORMATTER
+ -------------------------------------------------
+ require("conform").setup({
+ format_on_save = {
+ timeout_ms = 500,
+ lsp_format = "fallback",
+ },
+ formatters_by_ft = {
+ lua = { "stylua" },
+ nix = { "alejandra" },
+ rust = { "rustfmt" },
+ python = { "black" },
+ bash = { "shfmt" },
+ },
+ })
+
+ require("Comment").setup()
+
+ -------------------------------------------------
+ -- TELESCOPE
+ -------------------------------------------------
+ local builtin = require("telescope.builtin")
+
+ require("telescope").setup({
+ defaults = {
+ layout_strategy = "horizontal",
+ sorting_strategy = "ascending",
+ file_ignore_patterns = { "node_modules", ".git/" },
+ },
+ })
+
+ vim.keymap.set("n", "<leader><leader>", builtin.find_files)
+ vim.keymap.set("n", "<leader>fg", builtin.live_grep)
+ vim.keymap.set("n", "<leader>fb", builtin.buffers)
+
+ -------------------------------------------------
+ -- WHICH KEY
+ -------------------------------------------------
+ local wk = require("which-key")
+ wk.add({
+ { "<leader>l", desc = "LSP" }
+ })
+
+ -------------------------------------------------
+ -- NVIM TREE
+ -------------------------------------------------
+ require("nvim-tree").setup({})
+ vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>")
+
+ -------------------------------------------------
+ -- TERMINAL
+ -------------------------------------------------
+ require("toggleterm").setup({
+ direction = "float",
+ })
+
+ local Terminal = require("toggleterm.terminal").Terminal
+
+ local lazygit = Terminal:new({
+ cmd = "lazygit",
+ hidden = true,
+ direction = "float",
+ })
+
+ vim.keymap.set("n", "<leader>gg", function()
+ lazygit:toggle()
+ end)
+
+ -------------------------------------------------
+ -- ORGMODE
+ -------------------------------------------------
+ local projects = {
+ "~/Documents/2_Writing/0_SOC/**/*.org",
+ "~/Documents/2_Writing/2_Notes/**/*.org",
+ "~/Documents/1_Projects/6_CRC-Altura/**/*.org",
+ "~/ORG/**/*.org"
+ }
+
+ require("orgmode").setup({
+ org_agenda_files = projects,
+ org_default_notes_file = "~/INBOX.org"
+ })
+
+ -------------------------------------------------
+ -- VIMTEX
+ -------------------------------------------------
+ vim.g.vimtex_view_method = "zathura"
+ '';
+ };
+}
diff --git a/home/rices/schrottkatze/browser.nix b/home/rices/schrottkatze/browser.nix
new file mode 100644
index 0000000..c2d979d
--- /dev/null
+++ b/home/rices/schrottkatze/browser.nix
@@ -0,0 +1,399 @@
+{pkgs, ...}: {
+ home.file = {
+ ".tridactylrc" = {
+ text = ''
+ set editorcmd kitty hx %f +%l
+ set newtab about:blank
+ '';
+ };
+ };
+ programs.firefox = {
+ enable = true;
+ package = pkgs.firefox.override {
+ nativeMessagingHosts = [
+ pkgs.tridactyl-native
+ ];
+ };
+ policies = {
+ DefaultDownloadDirectory = "\${home}/Downloads";
+ Extensions.Install = map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [
+ "bitwarden-password-manager"
+ "darkreader"
+ "indie-wiki-buddy"
+ "kagi-search-for-firefox"
+ "multi-account-containers"
+ "privacy-badger17"
+ "return-youtube-dislikes"
+ "sponsorblock"
+ "styl-us"
+ "tabby-cat-friend"
+ "torproject-snowflake"
+ "tridactyl-vim"
+ "ublock-origin"
+ "web-clipper-obsidian"
+ "web-scrobbler"
+ ];
+ Extensions.Uninstall = [
+ "ddg@search.mozilla.org"
+ "google@search.mozilla.org"
+ "bing@search.mozilla.org"
+ "amazondotcom@search.mozilla.org"
+ "ebay@search.mozilla.org"
+ "twitter@search.mozilla.org"
+ ];
+ "DisableFirefoxStudies" = true;
+ "DisableTelemetry" = true;
+ "DisableFeedbackCommands" = true;
+ "DisablePocket" = true;
+ };
+ profiles.mun = {
+ search = {
+ force = true;
+ default = "Kagi";
+ engines = {
+ "Kagi".urls = [
+ {
+ template = "https://kagi.com/search";
+ params = [
+ {
+ name = "q";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ "duckduckbleh" = {
+ urls = [
+ {
+ template = "https://noai.duckduckgo.com/";
+ params = [
+ {
+ name = "q";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ definedAliases = [
+ "duck"
+ "d"
+ "ddg"
+ ];
+ };
+ "Nix Packages" = {
+ urls = [
+ {
+ template = "https://search.nixos.org/packages";
+ params = [
+ {
+ name = "query";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = ["pkgs"];
+ };
+ "Nix Options" = {
+ urls = [
+ {
+ template = "https://search.nixos.org/options";
+ params = [
+ {
+ name = "query";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = ["opts"];
+ };
+ "Home manager Options" = {
+ urls = [
+ {
+ template = "https://home-manager-options.extranix.com/";
+ params = [
+ {
+ name = "query";
+ value = "{searchTerms}";
+ }
+ {
+ name = "release";
+ value = "master";
+ }
+ ];
+ }
+ ];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = ["hm"];
+ };
+ "NixOS Wiki" = {
+ urls = [
+ {
+ template = "https://nixos.wiki/index.php";
+ params = [
+ {
+ name = "search";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = ["nxwk"];
+ };
+ "Noogle" = {
+ urls = [
+ {
+ template = "https://noogle.dev/q";
+ params = [
+ {
+ name = "term";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ definedAliases = ["ngl"];
+ };
+ "lib.rs" = {
+ urls = [
+ {
+ template = "https://lib.rs/search";
+ params = [
+ {
+ name = "q";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ definedAliases = ["libs"];
+ };
+ "rust docs" = {
+ urls = [
+ {
+ template = "https://docs.rs/releases/search";
+ params = [
+ {
+ name = "query";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ definedAliases = ["docs"];
+ };
+ "rust docs direct open" = {
+ urls = [
+ {
+ template = "https://docs.rs/{searchTerms}";
+ }
+ ];
+ definedAliases = [
+ "rd"
+ ];
+ };
+ "rust std docs" = {
+ urls = [
+ {
+ template = "https://docs.rust-lang.org/std/index.html";
+ params = [
+ {
+ name = "search";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ definedAliases = ["std"];
+ };
+ "MDN" = {
+ urls = [
+ {
+ template = "https://developer.mozilla.org/search";
+ params = [
+ {
+ name = "q";
+ value = "{searchTerms}";
+ }
+ ];
+ }
+ ];
+ };
+ "bing".metaData.hidden = true;
+ "google".metaData.hidden = true;
+ "Amazon.de".metaData.hidden = true;
+ };
+ };
+ settings = {
+ "devtools.editor.keymap" = "vim";
+ "devtools.toolbox.host" = "right";
+ "devtools.theme" = "dark";
+ "webgl.disabled" = false;
+ "browser.urlbar.decodeURLsOnCopy" = true;
+ "browser.urlbar.unitConversion.enabled" = true;
+ "browser.urlbar.suggest.calculator" = true;
+ "browser.compactmode.show" = true;
+ "browser.uidensity" = 1;
+ "screenshots.browser.component.enabled" = true;
+ "browser.aboutConfig.showWarning" = false;
+ "browser.aboutwelcome.showModal" = false;
+ "browser.aboutwelcome.enabled" = false;
+ "browser.preferences.moreFromMozilla" = false;
+ "browser.menu.showViewImageInfo" = true;
+ "browser.shopping.experience2023.active" = false;
+ "browser.shopping.experience2023.survey.enabled" = false;
+
+ "identity.fxaccounts.enabled" = true;
+ "browser.tabs.firefox-view" = true;
+ "browser.tabs.firefox-view-next" = true;
+ "browser.newtabpage.activity-stream.showSponsored" = false;
+ "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
+ "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false;
+ "privacy.trackingprotection.emailtracking.enabled" = true;
+ "privacy.trackingprotection.enabled" = true;
+ "privacy.trackingprotection.socialtracking.enabled" = true;
+
+ "browser.ml.chat.enabled" = false;
+ "browser.ml.chat.hideLocalhost" = false;
+ "browser.ml.chat.prompt.prefix" = "";
+ "browser.ml.chat.prompts.0" = "";
+ "browser.ml.chat.prompts.1" = "";
+ "browser.ml.chat.prompts.2" = "";
+ "browser.ml.chat.prompts.3" = "";
+ "browser.ml.chat.provider" = "";
+ "browser.ml.chat.shortcuts" = false;
+ "browser.ml.chat.shortcuts.custom" = false;
+ "browser.ml.chat.shortcuts.longPress" = "";
+ "browser.ml.chat.sidebar" = false;
+
+ "geo.provider.network.logging.enabled" = true;
+ "extensions.getAddons.showPane" = false;
+ "extensions.htmlaboutaddons.recommendations.enabled" = false;
+ "browser.discovery.enabled" = false;
+ "browser.shopping.experience2023.enabled" = false;
+ "datareporting.policy.dataSubmissionEnabled" = false;
+ "datareporting.healthreport.uploadEnabled" = false;
+ "toolkit.telemetry.unified" = false;
+ "toolkit.telemetry.enabled" = false;
+ "toolkit.telemetry.server" = "data:,";
+ "toolkit.telemetry.archive.enabled" = false;
+ "toolkit.telemetry.newProfilePing.enabled" = false;
+ "toolkit.telemetry.shutdownPingSender.enabled" = false;
+ "toolkit.telemetry.updatePing.enabled" = false;
+ "toolkit.telemetry.bhrPing.enabled" = false;
+ "toolkit.telemetry.firstShutdownPing.enabled" = false;
+ "toolkit.telemetry.coverage.opt-out" = true;
+ "toolkit.coverage.opt-out" = true;
+ "toolkit.coverage.endpoint.base" = "";
+ "browser.ping-centre.telemetry" = false;
+ "browser.newtabpage.activity-stream.feeds.telemetry" = false;
+ "browser.newtabpage.activity-stream.telemetry" = false;
+ "app.shield.optoutstudies.enabled" = false;
+ "app.normandy.enabled" = false;
+ "app.normandy.api_url" = "";
+ "dom.private-attribution.submission.enabled" = false;
+ "browser.newtabpage.activity-stream.feeds.showWeather" = false;
+ "browser.newtabpage.activity-stream.feeds.weatherfeed" = false;
+
+ "browser.safebrowsing.malware.enabled" = false;
+ "browser.safebrowsing.phishing.enabled" = false;
+ "browser.safebrowsing.downloads.enabled" = false;
+ "browser.safebrowsing.downloads.remote.enabled" = false;
+ "browser.safebrowsing.downloads.remote.url" = "";
+ "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false;
+ "browser.safebrowsing.downloads.remote.block_uncommon" = false;
+ "browser.safebrowsing.allowOverride" = false;
+
+ "network.prefetch-next" = false;
+ "network.dns.disablePrefetch" = true;
+ "network.dns.disablePrefetchFromHTTPS" = true;
+ "network.predictor.enabled" = false;
+ "network.predictor.enable-prefetch" = false;
+ "network.http.speculative-parallel-limit" = 0;
+ "browser.places.speculativeConnect.enabled" = false;
+ "browser.send_pings" = false;
+
+ "browser.urlbar.pocket.featureGate" = false;
+ "browser.urlbar.weather.featureGate" = false;
+ "browser.urlbar.speculativeConnect.enabled" = false;
+ "browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
+ "browser.urlbar.suggest.quicksuggest.sponsored" = false;
+ "browser.search.suggest.enabled" = false;
+ "browser.urlbar.suggest.searches" = false;
+ "browser.urlbar.trending.featureGate" = false;
+
+ "security.ssl.require_safe_negotiation" = true;
+ "security.remote_settings.crlite_filters.enabled" = true;
+ "security.pki.crlite_mode" = 2;
+
+ "dom.security.https_only_mode" = true;
+ "dom.security.https_only_mode_pbm" = true;
+ "security.ssl.treat_unsafe_negotiation_as_broken" = true;
+ "browser.xul.error_pages.expert_bad_cert" = true;
+ "network.http.referer.XOriginTrimmingPolicy" = 2;
+
+ "privacy.userContext.enabled" = true;
+ "privacy.userContext.ui.enabled" = true;
+ "privacy.userContext.newTabContainerOnLeftClick.enabled" = true;
+
+ "dom.disable_window_move_resize" = true;
+
+ "browser.uitour.enabled" = false;
+ "browser.uitour.url" = "";
+ "permissions.manager.defaultsUrl" = "";
+ "webchannel.allowObject.urlWhitelist" = "";
+
+ "network.IDN_show_punycode" = true;
+ "pdfjs.disabled" = false;
+ "pdfjs.enableScripting" = false;
+ "browser.tabs.searchclipboardfor.middleclick" = false;
+ "browser.download.useDownloadDir" = false;
+ "browser.download.alwaysOpenPanel" = false;
+
+ "browser.download.manager.addToRecentDocs" = false;
+
+ "browser.download.always_ask_before_handling_new_types" = true;
+ "privacy.resistFingerprinting" = true;
+ "privacy.resistFingerprinting.pbmode" = true;
+ "privacy.resistFingerprinting.exemptedDomains" =
+ let
+ domains = [
+ "bahn.expert"
+ "flugzeug.expert"
+ "traewelling.de"
+ "katzen.cafe"
+ "catgirl.cloud"
+ "nekover.se"
+ "zug.network"
+ "girlcock.club"
+ "hamburg.ccc.de"
+ "codeberg.org"
+ ];
+ in
+ domains ++ (map (domain: "*." + domain) domains);
+ "privacy.window.maxInnerWidth" = 1600;
+ "privacy.window.maxInnerHeight" = 900;
+ "privacy.resistFingerprinting.block_mozAddonManager" = true;
+ "privacy.resistFingerprinting.letterboxing" = false;
+ "widget.non-native-theme.enabled" = true;
+ "browser.link.open_newwindow" = 3;
+ "browser.link.open_newwindow.restriction" = 0;
+ "signon.rememberSignons" = false;
+ "dom.popup_allowed_events" = "click dblclick mousedown pointerdown";
+ "browser.pagethumbnails.capturing_disabled" = true;
+
+ "geo.enabled" = false;
+ "full-screen-api.enabled" = false;
+ "permissions.default.geo" = 0;
+ "permissions.default.camera" = 0;
+ "permissions.default.microphone" = 0;
+ "permissions.default.desktop-notification" = 0;
+ "permissions.default.xr" = 0;
+ };
+ };
+ };
+}
diff --git a/home/rices/schrottkatze/default.nix b/home/rices/schrottkatze/default.nix
new file mode 100644
index 0000000..6b7865d
--- /dev/null
+++ b/home/rices/schrottkatze/default.nix
@@ -0,0 +1,4 @@
+{
+ system = import ./system.nix;
+ home = import ./home.nix;
+}
diff --git a/home/rices/schrottkatze/eww.nix b/home/rices/schrottkatze/eww.nix
new file mode 100644
index 0000000..599738a
--- /dev/null
+++ b/home/rices/schrottkatze/eww.nix
@@ -0,0 +1,6 @@
+{...}: {
+ programs.eww = {
+ enable = true;
+ configDir = ./eww/configDir;
+ };
+}
diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck
new file mode 100644
index 0000000..d955d31
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck
@@ -0,0 +1,77 @@
+(include "bottomBar/workspaces.yuck")
+(include "bottomBar/traveldings.yuck")
+
+(defwindow bottomBar
+ :monitor 0
+ :stacking "fg"
+ :wm-ignore true
+ :exclusive true
+ :geometry (geometry
+ :width "100%"
+ :height "33px"
+ :anchor "bottom center")
+ (bottomBar))
+
+(defwidget bottomBar []
+ (overlay
+ :class "bottomBar"
+ (transform
+ :translate-y "1.5px"
+ (centerbox
+ (box
+ :halign "start"
+ (workspaceWidget)
+ )
+ (box
+ :halign "center"
+ (traveldings)
+ )
+ (box
+ :halign "end"
+ ; (label :text "${iceData.speed}km/h")
+ (mullvadThing)
+ )
+ )
+ )
+ (box
+ :class "lesbianFlag"
+ :height 1
+ ( flagEl :flipped true :color "#D52D00")
+ ( flagEl :flipped true :color "#EF7627")
+ ( flagEl :flipped true :color "#FF9A56")
+ ( flagEl :flipped true :color "#FFFFFF")
+ ( flagEl :flipped true :color "#D162A4")
+ ( flagEl :flipped true :color "#B55690")
+ ( flagEl :flipped true :color "#A30262")
+ )
+ )
+)
+
+(deflisten mullvad
+ :initial "{\"state\":\"init\"}"
+ `mullvad status -j listen`
+)
+
+(defwidget mullvadThing []
+ (box
+ :class "container"
+ (button
+ :height 16
+ :width 16
+ :class "mullvad-state-${mullvad.state}"
+ )
+ )
+)
+
+(defwidget iceTacho []
+ (box
+ :class "iceTacho"
+ :tooltip "Tz${iceTachoData.tzn} (BR ${iceTachoData.br})"
+ (label :text "${iceTachoData.speed} km/h")
+ )
+)
+
+(deflisten iceTachoData
+ :initial "null"
+ { "~/.config/eww/scripts/iceTacho.nu" }
+)
diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck
new file mode 100644
index 0000000..62de26e
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck
@@ -0,0 +1,37 @@
+(defwidget traveldings []
+ (revealer
+ :class "traveldings"
+ :transition "crossfade"
+ :reveal { traveldings_data != "null" }
+ (traveldingsBarWidget)
+ )
+)
+
+(defwidget traveldingsBarWidget []
+ (overlay
+ (box
+ :width 640
+ (label
+ :halign "start"
+ :text "${traveldings_data.line} -> ${strlength(traveldings_data.arrival_station) > 24 ? "${substring(traveldings_data.arrival_station, 0, 24)}…" : traveldings_data.arrival_station}${traveldings_data.arrival_platform_data_available ? " (Gl. ${traveldings_data.arrival_platform_real})" : ""}"
+ )
+ (label
+ :halign "end"
+ :text { traveldings_data.time_left >= 3600 ? formattime(traveldings_data.time_left, "noch %-Hh %-Mmin", "Etc/UTC") : formattime(traveldings_data.time_left, "noch %-Mmin", "Etc/UTC") }
+ )
+ )
+ (box
+ (progress
+ :class { traveldings_data.live ? "traveldings_live" : "traveldings_disconnected" }
+ :value {traveldings_data.progress * 100}
+ :orientation "horizontal"
+ )
+ )
+ )
+)
+
+
+(deflisten traveldings_data
+ :initial "null"
+ "traveldings current"
+)
diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck
new file mode 100644
index 0000000..2709e1b
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck
@@ -0,0 +1,18 @@
+(defwidget workspaceWidget []
+ (box
+ :class "workspaces"
+ (for workspace in workspaces
+ (button
+ :style "border-bottom: 4px solid ${workspace.color}${workspace.active ? "; background-color: #3c3836" : ""}"
+ :class "${workspace.focused ? "focused" : ""}"
+ :onclick "niri msg action focus-workspace ${workspace.idx}"
+ (label :text "${workspace.icon ?: workspace.idx}")
+ )
+ )
+ )
+)
+
+(deflisten workspaces
+ :initial "[]"
+ "bar-ws-monitor"
+)
diff --git a/home/rices/schrottkatze/eww/configDir/eww.css b/home/rices/schrottkatze/eww/configDir/eww.css
new file mode 100644
index 0000000..2ce2ac5
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/eww.css
@@ -0,0 +1,58 @@
+label {
+ font: 14pt "Departure Mono Nerd Font";
+}
+
+button {
+ border-radius: 0px;
+ padding: 0;
+}
+
+.background {
+ background-color: #1d2021;
+}
+
+.workspaces button {
+ border: 0px;
+ padding: 5px 4px 0 4px;
+}
+
+.workspaces button.focused {
+ background-color: #504935;
+}
+
+.traveldings progressbar trough {
+ border: none;
+ background-color: #3c3836;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.traveldings progressbar.traveldings_live progress {
+ background-color: #79740e;
+ border-bottom-left-radius: 0;
+}
+
+.traveldings progressbar.traveldings_disconnected progress {
+ background-color: #cc241d;
+}
+
+
+.traveldingsWindow {
+ border-radius: 15px;
+}
+
+.mullvad-state-connected {
+ background-color: #98971a
+}
+
+.mullvad-state-connecting {
+ background-color: #d79921
+}
+
+.mullvad-state-disconnected {
+ background-color: #cc241d
+}
+
+.mullvad-state-init {
+ background-color: #458588
+}
diff --git a/home/rices/schrottkatze/eww/configDir/eww.yuck b/home/rices/schrottkatze/eww/configDir/eww.yuck
new file mode 100644
index 0000000..f6f20f5
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/eww.yuck
@@ -0,0 +1,36 @@
+(include "topBar/topBar.yuck")
+(include "bottomBar/bottomBar.yuck")
+
+(include "topBar/time.yuck")
+
+(defwindow streamUi
+ :monitor 0
+ :stacking "fg"
+ :wm-ignore true
+ :exclusive true
+ :geometry (geometry
+ :width "640px"
+ :height "100%"
+ :anchor "center right")
+ (centerbox
+ :style "padding: 0 3px"
+ :orientation "vertical"
+ (label :text "hi")
+ (label :text "hi")
+ (centerbox
+ :valign "end"
+ (box
+ :halign "start"
+ (systray
+ :icon-size 18
+ :spacing 3
+ )
+ )
+ (box)
+ (box
+ :halign "end"
+ (time)
+ )
+ )
+ )
+)
diff --git a/home/rices/schrottkatze/eww/configDir/scripts/bat.nu b/home/rices/schrottkatze/eww/configDir/scripts/bat.nu
new file mode 100755
index 0000000..fd34c50
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/scripts/bat.nu
@@ -0,0 +1,78 @@
+#!/usr/bin/env nu
+
+const ICONS = [
+ [ normal charging];
+ [ 󰂎 󰢟 ]
+ [ 󰁺 󰢜 ]
+ [ 󰁻 󰂆 ]
+ [ 󰁼 󰂇 ]
+ [ 󰁽 󰂈 ]
+ [ 󰁾 󰢝 ]
+ [ 󰁿 󰂉 ]
+ [ 󰂀 󰢞 ]
+ [ 󰂁 󰂊 ]
+ [ 󰂂 󰂋 ]
+ [ 󰁹 󰂅 ]
+];
+
+const DELAY = 2sec;
+
+def "main auto" [] {
+ loop {
+ let paths = ls "/sys/class/power_supply"
+ | each {|it| $it.name | path basename}
+ | filter {|it| $it starts-with "BAT"};
+
+ if ($paths | is-not-empty) {
+ let result = $paths
+ | each {|it| get_and_format $it}
+ | str join " | "
+ | prepend "| "
+ | str join;
+
+ print $result
+ } else {
+ print ""
+ }
+ sleep $DELAY;
+ }
+}
+
+def main [ path: string ] {
+ loop {
+ print (get_and_format $path)
+ sleep $DELAY;
+ }
+}
+
+def get_and_format [ path: string ] {
+ let fract = get_bat_charge_fraction $path;
+ let is_charging = get_bat_charging_status $path;
+ let percent = ($fract * 100) | math round;
+
+ return $"<span foreground=\"#d65d0e\">(get_bat_icon $fract $is_charging)</span> ($percent)<span foreground=\"#7c6f64\">%</span>";
+}
+
+def get_bat_charge_fraction [
+ path: string
+] {
+ let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float;
+ let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float;
+
+ $energy_now / $energy_full
+}
+
+def get_bat_charging_status [
+ path: string
+] {
+ let status = open $"/sys/class/power_supply/($path)/status";
+
+ $status like Charging
+}
+
+def get_bat_icon [
+ frac: float
+ is_charging = false
+] {
+ $ICONS | get (($frac * 10) | math round) | get (if ($is_charging) { "charging" } else { "normal" })
+}
diff --git a/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu b/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu
new file mode 100755
index 0000000..5225dc2
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu
@@ -0,0 +1,38 @@
+#!/usr/bin/env nu
+
+const TABLE = {
+ 401: 280
+ 402: 280
+ 403: 330
+ 406: 330
+ 407: 320
+ 408: 320
+ 411: 230
+ 415: 230
+ 412: 265
+ 605: 200
+};
+
+def main [ ] {
+ loop {
+ if ((iw dev wlp4s0 link | lines | filter {|it| $it =~ "WIFIonICE" } | length) == 1) {
+ let iceData = http get https://iceportal.de/api1/rs/status;
+ let tzn = $iceData.tzn;
+ let br = $iceData.series;
+ let speed = $iceData.speed;
+ let speedfrac = $speed / ($TABLE | get $br);
+
+ print ({
+ tzn: $tzn,
+ br: $br,
+ speed: $speed,
+ frac: $speedfrac
+ } | to json -r);
+
+ sleep 2sec;
+ } else {
+ print "null";
+ sleep 5sec;
+ }
+ }
+}
diff --git a/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck b/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck
new file mode 100644
index 0000000..c37838a
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck
@@ -0,0 +1,22 @@
+(deflisten bat
+ :initial "<span foreground=\"#cc241d\">BAT0 ERR</span>"
+ { "~/.config/eww/scripts/bat.nu auto"}
+)
+
+(defwidget cpu []
+ (box
+ :class "cpuIndicator"
+ (label
+ :markup "<span foreground=\"#d65d0e\"></span> ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}<span foreground=\"#7c6f64\">%</span>"
+ )
+ )
+)
+
+(defwidget mem []
+ (box
+ :class "memIndicator"
+ (label
+ :markup "<span foreground=\"#d65d0e\"> </span> ${round(EWW_RAM.used_mem_perc, 0)}<span foreground=\"#7c6f64\">%</span>"
+ )
+ )
+)
diff --git a/home/rices/schrottkatze/eww/configDir/topBar/time.yuck b/home/rices/schrottkatze/eww/configDir/topBar/time.yuck
new file mode 100644
index 0000000..ba22883
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/topBar/time.yuck
@@ -0,0 +1,10 @@
+(defwidget time []
+ (label
+ :markup {
+ formattime(
+ EWW_TIME,
+ "<span foreground=\"#d65d0e\"></span> %Y<span foreground=\"#7c6f64\">-</span>%m<span foreground=\"#7c6f64\">-</span>%d <span foreground=\"#d65d0e\"></span> %H<span foreground=\"#7c6f64\">:</span>%M<span foreground=\"#7c6f64\">:</span>%S "
+ )
+ }
+ )
+)
diff --git a/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck b/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck
new file mode 100644
index 0000000..4aee71f
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck
@@ -0,0 +1,55 @@
+(include "topBar/time.yuck")
+(include "topBar/sysinfo.yuck")
+(include "util.yuck")
+
+(defwindow topBar
+ :monitor 0
+ :stacking "fg"
+ :wm-ignore true
+ :exclusive true
+ :geometry (geometry
+ :width "100%"
+ :height "33px"
+ :anchor "top center")
+ (topBar))
+
+(defwidget topBar []
+ (overlay
+ :class "topBar"
+ (transform
+ :translate-y "-1.5px"
+ (centerbox
+ (box
+ :halign "start"
+ :spacing 12
+ :space-evenly false
+ (label :text " ")
+ (cpu)
+ (sep)
+ (mem)
+ (label :markup bat)
+ )
+ (box
+ :halign "center"
+ (systray
+ :icon-size 18
+ :spacing 3
+ )
+ )
+ (box
+ :halign "end"
+ (time)
+ )
+ )
+ )
+ (box
+ :class "transFlag"
+ :height 1
+ ( flagEl :flipped false :color "#5BCEFA")
+ ( flagEl :flipped false :color "#F5A9B8")
+ ( flagEl :flipped false :color "#FFFFFF")
+ ( flagEl :flipped false :color "#F5A9B8")
+ ( flagEl :flipped false :color "#5BCEFA")
+ )
+ )
+)
diff --git a/home/rices/schrottkatze/eww/configDir/util.yuck b/home/rices/schrottkatze/eww/configDir/util.yuck
new file mode 100644
index 0000000..3df84ab
--- /dev/null
+++ b/home/rices/schrottkatze/eww/configDir/util.yuck
@@ -0,0 +1,10 @@
+(defwidget flagEl [color ?flipped]
+ (box
+ :style "border-${flipped ? "top" : "bottom"}: 3px solid ${color}"
+ :halign "fill"
+ )
+)
+
+(defwidget sep []
+ (label :text "|")
+)
diff --git a/home/rices/schrottkatze/fuzzel.nix b/home/rices/schrottkatze/fuzzel.nix
new file mode 100644
index 0000000..d31dee7
--- /dev/null
+++ b/home/rices/schrottkatze/fuzzel.nix
@@ -0,0 +1,26 @@
+{lib, ...}: {
+ programs.fuzzel = {
+ enable = true;
+ settings = {
+ main = {
+ font = lib.mkForce "Departure Mono:size=13";
+ terminal = "kitty";
+ lines = 15;
+ width = 50;
+ horizontal-pad = 20;
+ vertical-pad = 12;
+ };
+ colors = {
+ background = lib.mkForce "282828ff";
+ match = lib.mkForce "d65d0eff";
+ selection-match = lib.mkForce "fe8019ff";
+ border = lib.mkForce "bab9e5ff";
+ };
+ border = {
+ radius = 10;
+ selection-radius = 3;
+ width = 3;
+ };
+ };
+ };
+}
diff --git a/home/rices/schrottkatze/home.nix b/home/rices/schrottkatze/home.nix
new file mode 100644
index 0000000..62d9aeb
--- /dev/null
+++ b/home/rices/schrottkatze/home.nix
@@ -0,0 +1,43 @@
+{pkgs, ...}: {
+ imports = [
+ ./terminal.nix
+ ./notifications.nix
+ ./fuzzel.nix
+ ./swayidle.nix
+ ./browser.nix
+ ./niri.nix
+ ./eww.nix
+ # ./layaway.nix
+ ./stylix.nix
+ ];
+
+ programs.swaylock.enable = true;
+ services.network-manager-applet.enable = true;
+ xsession.enable = true;
+
+ home.packages = with pkgs; [
+ fluent-reader
+ obsidian
+ zsh
+ hyprpicker
+ bemoji
+ librsvg
+ cairo
+ xwayland-satellite
+ ];
+
+ services.gpg-agent = {
+ enable = true;
+ enableSshSupport = true;
+ };
+
+ fonts.fontconfig = {
+ enable = true;
+ defaultFonts = {
+ emoji = ["Noto Color Emoji"];
+ monospace = [];
+ sansSerif = ["Atkinson Hyperlegible"];
+ serif = [];
+ };
+ };
+}
diff --git a/home/rices/schrottkatze/layaway.nix b/home/rices/schrottkatze/layaway.nix
new file mode 100644
index 0000000..35db5ee
--- /dev/null
+++ b/home/rices/schrottkatze/layaway.nix
@@ -0,0 +1,24 @@
+{pkgs, lib, ...}:
+let
+ layaway = pkgs.rustPlatform.buildRustPackage rec {
+ pname = "layaway";
+ version = "0.2.0";
+
+ src = pkgs.fetchFromGitHub {
+ owner = "MultisampledNight";
+ repo = pname;
+ rev = "v${version}";
+ hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0=";
+ };
+
+ cargoHash = "sha256-QVxlkE+sq4U048LnshI/tq6HInKiSgjQLAdR+27/wEI=";
+
+ meta = with lib; {
+ description = "Layout creation for Sway via a relative and human-readable DSL.";
+ homepage = "https://github.com/MultisampledNight/layaway";
+ maintainers = [maintainers.multisn8];
+ };
+ };
+in {
+ home.packages = [layaway];
+}
diff --git a/home/rices/schrottkatze/niri.nix b/home/rices/schrottkatze/niri.nix
new file mode 100644
index 0000000..32e145f
--- /dev/null
+++ b/home/rices/schrottkatze/niri.nix
@@ -0,0 +1,40 @@
+# this file must only be saved via autosave due to the formatter.
+# else it will be ugly
+{
+ pkgs,
+ lib,
+ ...
+}: {
+ home.packages = with pkgs; [
+ zenity
+ xwayland-satellite
+ swaybg
+ ];
+
+ xdg.configFile."niri/live.kdl".text = "";
+
+ home.file."config" = let
+ kdlfiles =
+ lib.mapAttrsToList
+ (filename: _value: "include \"${./niri/kdl}/${filename}\"")
+ (lib.filterAttrs (key: value: value == "regular") (builtins.readDir ./niri/kdl));
+ startups =
+ map (it: "spawn-at-startup ${it}")
+ (map (lib.concatStringsSep " ")
+ (map (map (word: "\"${word}\""))
+ [
+ ["eww" "open-many" "topBar" "bottomBar"]
+ ["sh" "-c" "sleep 1 && swaybg -o eDP-1 -i ${../../../assets/wallpapers/insert_coin.jpeg} -m fill"]
+ ["touch" ".config/niri/live.kdl"]
+ ]));
+ other = [
+ "include \"live.kdl\""
+ "output \"eDP-1\" { scale 1.1; }"
+ "animations { window-open { duration-ms 3000; curve \"linear\"; custom-shader r\"\n${builtins.readFile ./niri/shaders/arc.frag}\";};}"
+ "binds {Mod+Shift+I { spawn \"${./niri/scripts/cpdate.sh}\"; }; }"
+ ];
+ in {
+ target = ".config/niri/config.kdl";
+ text = lib.concatLines (startups ++ kdlfiles ++ other);
+ };
+}
diff --git a/home/rices/schrottkatze/niri/kdl/binds.kdl b/home/rices/schrottkatze/niri/kdl/binds.kdl
new file mode 100644
index 0000000..e79b3fc
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/binds.kdl
@@ -0,0 +1,124 @@
+binds {
+ // spawn terminal
+ Mod+Return repeat=false { spawn "kitty"; }
+ Mod+D repeat=false { spawn "fuzzel"; }
+ Mod+M repeat=false { spawn "hyprpicker"; }
+ Mod+I repeat=false { spawn "bemoji" "-n"; }
+ Mod+N repeat=false { spawn "firefox"; }
+ Mod+E repeat=false { spawn "kitty" "vi" "~/.config/niri/live.kdl"; }
+
+ Mod+Ctrl+Shift+E { quit; }
+ Mod+Q { close-window; }
+ Mod+Ctrl+Shift+P { power-off-monitors; }
+
+ Mod+Shift+Ctrl+Slash allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
+
+ Mod+Shift+Slash { show-hotkey-overlay; }
+
+ Mod+Shift+C { set-dynamic-cast-window; }
+ Mod+Ctrl+C { set-dynamic-cast-monitor; }
+ Mod+Shift+Ctrl+C { clear-dynamic-cast-target; }
+
+ // window/columns controls (focus: vim keys)
+ Mod+H { focus-column-left; }
+ Mod+J { focus-window-down; }
+ Mod+K { focus-window-up; }
+ Mod+L { focus-column-right; }
+
+ // window/columns controls (focus: arrow keys)
+ Mod+Left { focus-column-left; }
+ Mod+Down { focus-window-down; }
+ Mod+Up { focus-window-up; }
+ Mod+Right { focus-column-right; }
+
+ // move windows (vim keys)
+ Mod+Shift+H { move-column-left; }
+ Mod+Shift+J { move-window-down; }
+ Mod+Shift+K { move-window-up; }
+ Mod+Shift+L { move-column-right; }
+
+ // move windows (arrow keys)
+ Mod+Shift+Left { move-column-left; }
+ Mod+Shift+Down { move-window-down; }
+ Mod+Shift+Up { move-window-up; }
+ Mod+Shift+Right { move-column-right; }
+
+ Mod+R { switch-preset-column-width; }
+
+ Mod+Space { toggle-overview; }
+
+ Mod+V { toggle-window-floating; }
+ Mod+Shift+V { switch-focus-between-floating-and-tiling; }
+
+ // workspace navigation
+ Mod+P { focus-workspace-up; }
+ Mod+Ctrl+P { move-workspace-up; }
+ Mod+Shift+P { move-column-to-workspace-up; }
+ Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
+ Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
+ Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
+ Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
+ Mod+1 { focus-workspace 1; }
+ Mod+2 { focus-workspace 2; }
+ Mod+3 { focus-workspace 3; }
+ Mod+4 { focus-workspace 4; }
+ Mod+5 { focus-workspace 5; }
+ Mod+6 { focus-workspace 6; }
+ Mod+7 { focus-workspace 7; }
+ Mod+8 { focus-workspace 8; }
+ Mod+9 { focus-workspace 9; }
+ Mod+Ctrl+1 { move-column-to-workspace 1; }
+ Mod+Ctrl+2 { move-column-to-workspace 2; }
+ Mod+Ctrl+3 { move-column-to-workspace 3; }
+ Mod+Ctrl+4 { move-column-to-workspace 4; }
+ Mod+Ctrl+5 { move-column-to-workspace 5; }
+ Mod+Ctrl+6 { move-column-to-workspace 6; }
+ Mod+Ctrl+7 { move-column-to-workspace 7; }
+ Mod+Ctrl+8 { move-column-to-workspace 8; }
+ Mod+Ctrl+9 { move-column-to-workspace 9; }
+
+ // monitor controls
+ Mod+Ctrl+H { focus-monitor-left; }
+ Mod+Ctrl+J { focus-monitor-down; }
+ Mod+Ctrl+K { focus-monitor-up; }
+ Mod+Ctrl+L { focus-monitor-right; }
+ Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
+
+ // column editing stuffs
+ Mod+BracketLeft { consume-or-expel-window-left; }
+ Mod+BracketRight { consume-or-expel-window-right; }
+ Mod+C { center-column; }
+ Mod+Minus { set-column-width "-5%"; }
+ Mod+Equal { set-column-width "+5%"; }
+ Mod+Shift+Minus { set-window-height "-10%"; }
+ Mod+Shift+Equal { set-window-height "+10%"; }
+ Mod+Shift+W { toggle-column-tabbed-display; }
+
+ Mod+F { maximize-column; }
+ Alt+F { expand-column-to-available-width; }
+ Mod+Shift+F { maximize-window-to-edges; }
+ Mod+Ctrl+F { fullscreen-window; }
+
+ Mod+Shift+Ctrl+F { toggle-windowed-fullscreen; }
+
+ // media keys
+ XF86AudioLowerVolume \
+ allow-when-locked=true \
+ { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"; }
+ XF86AudioMicMute \
+ allow-when-locked=true \
+ { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
+ XF86AudioMute \
+ allow-when-locked=true \
+ { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
+ XF86AudioRaiseVolume \
+ allow-when-locked=true \
+ { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%+"; }
+
+ // brightness keys
+ XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "set" "5%+"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "set" "5%-"; }
+}
diff --git a/home/rices/schrottkatze/niri/kdl/input.kdl b/home/rices/schrottkatze/niri/kdl/input.kdl
new file mode 100644
index 0000000..fa398b2
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/input.kdl
@@ -0,0 +1,22 @@
+input {
+ keyboard {
+ xkb {
+ layout "cz"
+ options "eurosign:e,caps:escape"
+ }
+
+ repeat-delay 600
+ repeat-rate 25
+ track-layout "global"
+ }
+
+ touchpad {
+ dwt
+ dwtp
+ natural-scroll
+ }
+
+ mouse {
+ accel-profile "flat"
+ }
+}
diff --git a/home/rices/schrottkatze/niri/kdl/overviews.kdl b/home/rices/schrottkatze/niri/kdl/overviews.kdl
new file mode 100644
index 0000000..5cb4443
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/overviews.kdl
@@ -0,0 +1,19 @@
+overview {
+ backdrop-color "110000"
+ zoom 0.381966
+ workspace-shadow {
+ offset x=0 y=10
+ softness 60
+ color "#7f00008f"
+ }
+}
+
+recent-windows {
+ debounce-ms 1500
+ open-delay-ms 300
+ highlight {
+ active-color "f69ecf"
+ padding 5
+ corner-radius 2.5
+ }
+}
diff --git a/home/rices/schrottkatze/niri/kdl/privacy.kdl b/home/rices/schrottkatze/niri/kdl/privacy.kdl
new file mode 100644
index 0000000..1190aeb
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/privacy.kdl
@@ -0,0 +1,12 @@
+layer-rule {
+ match namespace="notifications"
+ block-out-from "screen-capture"
+}
+
+window-rule {
+ match app-id="^signal|Element|org.gnome.Evolution$"
+ match title="^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$"
+ exclude title="^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$"
+ exclude is-floating=true
+ block-out-from "screen-capture"
+}
diff --git a/home/rices/schrottkatze/niri/kdl/quirks.kdl b/home/rices/schrottkatze/niri/kdl/quirks.kdl
new file mode 100644
index 0000000..07fa886
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/quirks.kdl
@@ -0,0 +1,42 @@
+// handle steam grabbing focus 1000 times on startup
+window-rule {
+ match app-id="steam" title="Steam"
+ open-focused false
+}
+
+// position steam notifs correctly: https://github.com/YaLTeR/niri/wiki/Application-Issues
+window-rule {
+ match app-id="steam" title="^notificationtoasts_[\\d]+_desktop$"
+ open-focused false
+ border { off; }
+ shadow { off; }
+ baba-is-float false
+ default-floating-position relative-to="bottom-right" x=0 y=0
+}
+
+// fix guild wars
+window-rule {
+ match app-id="steam_app_1284210" title="Guild Wars 2"
+ match app-id="(steam_app_[0-9]+|[Mm]inecraft.*|gamescope)"
+ border { off; }
+ shadow { off; }
+}
+
+window-rule {
+ match app-id="chromium-browser"
+ geometry-corner-radius 6 6 1 1
+}
+
+window-rule {
+ match app-id="vesktop" is-floating=true
+ geometry-corner-radius 6
+}
+
+environment {
+ ELECTRON_OZONE_PLATFORM_HINT "auto"
+}
+
+window-rule {
+ match app-id="zenity"
+ geometry-corner-radius 16
+}
diff --git a/home/rices/schrottkatze/niri/kdl/screenshot.kdl b/home/rices/schrottkatze/niri/kdl/screenshot.kdl
new file mode 100644
index 0000000..5a5966b
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/screenshot.kdl
@@ -0,0 +1,6 @@
+screenshot-path "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png"
+binds {
+ Mod+Ctrl+S { screenshot-screen; }
+ Mod+Shift+S { screenshot; }
+ Mod+S { screenshot-window; }
+}
diff --git a/home/rices/schrottkatze/niri/kdl/style.kdl b/home/rices/schrottkatze/niri/kdl/style.kdl
new file mode 100644
index 0000000..fccf795
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/style.kdl
@@ -0,0 +1,84 @@
+prefer-no-csd
+
+cursor {
+ xcursor-theme "phinger-cursors-dark"
+ xcursor-size 32
+ hide-when-typing
+ hide-after-inactive-ms 10000
+}
+
+layout {
+ gaps 15
+ struts {
+ left 0
+ right 0
+ top 0
+ bottom 0
+ }
+ focus-ring { off; }
+ border {
+ on
+ width 3
+ active-gradient angle=135 from="#f69ecf" in="oklch shorter hue" relative-to="window" to="#5bcefa"
+ inactive-gradient angle=135 from="#f69ecf" in="oklch shorter hue" relative-to="window" to="#ff9a56"
+ }
+ tab-indicator {
+ hide-when-single-tab
+ gap 2
+ width 5
+ length total-proportion=0.500000
+ position "left"
+ gaps-between-tabs 0
+ corner-radius 3
+ active-color "#5bcefa"
+ inactive-color "#3c3836"
+ }
+ default-column-width
+ center-focused-column "never"
+}
+
+window-rule {
+ match is-floating=true
+ exclude app-id="steam_app_[0-9]+"
+ shadow {
+ on
+ offset x=0 y=0
+ softness 40
+ color "#bab9e5af"
+ inactive-color "#fa9d99af"
+ }
+}
+
+window-rule {
+ geometry-corner-radius 1
+ clip-to-geometry true
+}
+
+window-rule {
+ match is-window-cast-target=true
+ border {
+ on
+ active-gradient angle=135 \
+ from="#64de50" \
+ in="oklch shorter hue" \
+ relative-to="window" \
+ to="#5bcefa"
+ inactive-gradient angle=135 \
+ from="#64de50" \
+ in="oklch shorter hue" \
+ relative-to="window" \
+ to="#ff9a56"
+ }
+}
+
+layer-rule {
+ match namespace="launcher"
+ geometry-corner-radius 10
+ shadow {
+ on
+ offset x=0 y=0
+ softness 40
+ color "#bab9e5af"
+ }
+ baba-is-float true
+}
diff --git a/home/rices/schrottkatze/niri/kdl/workspaces.kdl.disabled b/home/rices/schrottkatze/niri/kdl/workspaces.kdl.disabled
new file mode 100644
index 0000000..e5b51b4
--- /dev/null
+++ b/home/rices/schrottkatze/niri/kdl/workspaces.kdl.disabled
@@ -0,0 +1,63 @@
+// WS Social
+workspace "social"
+
+spawn-at-startup "signal-desktop"
+spawn-at-startup ".evolution-wrapped_"
+spawn-at-startup "vesktop"
+spawn-at-startup "deltachat"
+
+window-rule {
+ match app-id="^(signal|Element|org.gnome.Evolution|discord|steam|DeltaChat)$"
+ open-on-workspace "social"
+}
+
+// WS Browser
+workspace "browser"
+
+spawn-at-startup "firefox"
+spawn-at-startup "obsidian"
+
+window-rule {
+ match app-id="^firefox|Chromium-browser|obsidian$"
+ open-on-workspace "browser"
+}
+
+binds {
+ Mod+P { focus-workspace-up; }
+ Mod+N { focus-workspace-down; }
+ Mod+Ctrl+P { move-workspace-up; }
+ Mod+Ctrl+N { move-workspace-down; }
+ Mod+Shift+P { move-column-to-workspace-up; }
+ Mod+Shift+N { move-column-to-workspace-down; }
+
+ Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
+ Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
+ Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
+ Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
+
+ Mod+Q { focus-workspace "social"; }
+ Mod+W { focus-workspace "browser"; }
+ Mod+E { focus-workspace 3; }
+ Mod+Ctrl+Q { move-column-to-workspace "social"; }
+ Mod+Ctrl+W { move-column-to-workspace "browser"; }
+ Mod+Ctrl+E { move-column-to-workspace 3; }
+
+ Mod+1 { focus-workspace 4; }
+ Mod+2 { focus-workspace 5; }
+ Mod+3 { focus-workspace 6; }
+ Mod+4 { focus-workspace 7; }
+ Mod+5 { focus-workspace 8; }
+ Mod+6 { focus-workspace 9; }
+ Mod+7 { focus-workspace 10; }
+ Mod+8 { focus-workspace 11; }
+ Mod+9 { focus-workspace 12; }
+ Mod+Ctrl+1 { move-column-to-workspace 4; }
+ Mod+Ctrl+2 { move-column-to-workspace 5; }
+ Mod+Ctrl+3 { move-column-to-workspace 6; }
+ Mod+Ctrl+4 { move-column-to-workspace 7; }
+ Mod+Ctrl+5 { move-column-to-workspace 8; }
+ Mod+Ctrl+6 { move-column-to-workspace 9; }
+ Mod+Ctrl+7 { move-column-to-workspace 10; }
+ Mod+Ctrl+8 { move-column-to-workspace 11; }
+ Mod+Ctrl+9 { move-column-to-workspace 12; }
+}
diff --git a/home/rices/schrottkatze/niri/scripts/cpdate.sh b/home/rices/schrottkatze/niri/scripts/cpdate.sh
new file mode 100755
index 0000000..acc2994
--- /dev/null
+++ b/home/rices/schrottkatze/niri/scripts/cpdate.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env nu
+
+const FORMATS = [
+ "%F"
+ "%R"
+ "%d.%m.%Y"
+ "%d.%m"
+ "%T"
+ "%FT%H"
+ "%FT%R"
+ "%F %R"
+ "%F %T"
+];
+
+def main [] {
+ let date = date now;
+ let len = $FORMATS | length;
+
+ $FORMATS | each {|it| $date | format date $it } | to text | fuzzel -dl $len | str trim | wl-copy
+}
diff --git a/home/rices/schrottkatze/niri/shaders/arc.frag b/home/rices/schrottkatze/niri/shaders/arc.frag
new file mode 100644
index 0000000..301357c
--- /dev/null
+++ b/home/rices/schrottkatze/niri/shaders/arc.frag
@@ -0,0 +1,131 @@
+
+#define PI 3.14159
+
+#define TAU 6.28319
+
+#define WIDTH 3.
+#define RADIUS 1.
+
+#define WIPE_DURATION .2
+#define BORDER_LOOPS 3.
+#define FADE_ITS 2.
+
+vec4 gradi(float pos, vec4 bg, vec4 fg, float fac, float mask) {
+ if (mask < 0.2) {
+ return bg;
+ }
+
+ vec4 trans = vec4(0.);
+ vec4 purple = vec4(0.45, 0.13, 0.49, 1.0) * vec4(mask);
+ vec4 blue = vec4(0.25, 0.74, 0.81, 1.0) * vec4(mask);
+ vec4 white = vec4(mask);
+ float mult = 4. * fac;
+
+ if (pos <= 0.125) {
+ return mix(bg, purple, max(0., pos * mult));
+ } else if (pos <= 0.25) {
+ return mix(purple, blue, (pos * mult) - 1.);
+ } else if (pos <= 0.5) {
+ return mix(blue, white, (pos * mult) - 2.);
+ } else {
+ return fg;
+ }
+
+}
+
+// from niri source code: https://github.com/YaLTeR/niri/blob/f30db163b5748e8cf95c05aba77d0d3736f40543/src/render_helpers/shaders/border.frag#L211-L234
+float rounding_alpha(vec2 coords, vec2 size, vec4 corner_radius) {
+ vec2 center;
+ float radius;
+
+ if (coords.x < corner_radius.x && coords.y < corner_radius.x) {
+ radius = corner_radius.x;
+ center = vec2(radius, radius);
+ } else if (size.x - corner_radius.y < coords.x && coords.y < corner_radius.y) {
+ radius = corner_radius.y;
+ center = vec2(size.x - radius, radius);
+ } else if (size.x - corner_radius.z < coords.x && size.y - corner_radius.z < coords.y) {
+ radius = corner_radius.z;
+ center = vec2(size.x - radius, size.y - radius);
+ } else if (coords.x < corner_radius.w && size.y - corner_radius.w < coords.y) {
+ radius = corner_radius.w;
+ center = vec2(radius, size.y - radius);
+ } else {
+ return 1.0;//
+ }
+
+ float dist = distance(coords, center);
+ float half_px = 0.5;
+ return 1.0 - smoothstep(radius - half_px, radius + half_px, dist);
+}
+
+vec4 open_color(vec3 coords_geo, vec3 size_geo) {
+ vec4 bg1 = vec4(.1, .1, .18, 1.0);
+ vec4 bg2 = vec4(.09, .05, .11, 1.0);
+
+ vec3 coords_tex = niri_geo_to_tex * coords_geo;
+ vec4 color = texture2D(niri_tex, coords_tex.st);
+
+ float pi = radians(180.);
+
+ if (0.0 <= coords_geo.x && coords_geo.x <= 1.0
+ && 0.0 <= coords_geo.y && coords_geo.y <= 1.0)
+ {
+ float pos = (coords_tex.x - ((1. / WIPE_DURATION) * niri_clamped_progress) * 2.) + 1.;
+ vec2 coords = (coords_geo.xy - vec2(0.5, 0.5)) * size_geo.xy * 2.0;
+ vec2 coords_abs = coords_geo.xy * size_geo.xy;
+
+ float border_a = 1.;
+
+ border_a *= rounding_alpha(
+ coords_abs.xy,
+ size_geo.xy,
+ vec4(RADIUS + WIDTH)
+ );
+
+ vec4 bg = mix(bg1, bg2, length(coords_tex.xy - vec2(1., 0.))) * border_a;
+
+ color = gradi(pos, color, bg, 2.0, border_a);
+
+ float angle = (atan(coords.y, coords.x) + PI) / TAU;
+ float spinny_angle = mod((angle + niri_clamped_progress * BORDER_LOOPS), 1.0) / 2.;
+
+ vec2 border = WIDTH / size_geo.xy;
+
+ float temp = border_a;
+ float round_a = 1. - rounding_alpha(
+ coords_abs.xy - WIDTH,
+ size_geo.xy - WIDTH * 2.,
+ vec4(RADIUS)
+ );
+
+ if (coords_geo.x <= border.x || coords_geo.x >= (1. - border.x) ||
+ coords_geo.y <= border.y || coords_geo.y >= (1. - border.y)) {
+ border_a *= round_a;
+ }
+
+ float rest = 0.;
+ if (border_a + temp == 1.) {
+ rest = 1.;
+ }
+
+ border_a *= round_a;
+ border_a += rest;
+
+ vec4 grad = gradi(
+ spinny_angle,
+ vec4(.48, .37, .5, 1.),
+ vec4(1., 0., 0., 1.),
+ 2.0, // DO NOT TOUCH
+ border_a
+ );
+
+ if ((1. - niri_clamped_progress) < FADE_ITS / BORDER_LOOPS) {
+ border_a *= (1. - niri_clamped_progress) / (FADE_ITS / BORDER_LOOPS);
+ }
+ color = mix(color, grad, border_a);
+
+ }
+
+ return color;
+}
diff --git a/home/rices/schrottkatze/niri/wallpaper.jpg b/home/rices/schrottkatze/niri/wallpaper.jpg
new file mode 100644
index 0000000..5b31b96
--- /dev/null
+++ b/home/rices/schrottkatze/niri/wallpaper.jpg
Binary files differ
diff --git a/home/rices/schrottkatze/notifications.nix b/home/rices/schrottkatze/notifications.nix
new file mode 100644
index 0000000..37390e9
--- /dev/null
+++ b/home/rices/schrottkatze/notifications.nix
@@ -0,0 +1,21 @@
+{pkgs, ...}: {
+ home.packages = [
+ pkgs.libnotify
+ ];
+ services.dunst = {
+ enable = true;
+ settings = {
+ global = {
+ dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst";
+ browser = "${pkgs.firefox}/bin/firefox";
+ mouse_left_click = "context";
+ mouse_middle_click = "close_current";
+ background = "#282828";
+ foreground = "#ebdbb2";
+ frame_color = "#504945";
+ frame_width = 2;
+ font = "Atkinson Hyperlegible";
+ };
+ };
+ };
+}
diff --git a/home/rices/schrottkatze/stylix.nix b/home/rices/schrottkatze/stylix.nix
new file mode 100644
index 0000000..4c9d500
--- /dev/null
+++ b/home/rices/schrottkatze/stylix.nix
@@ -0,0 +1,24 @@
+{pkgs, ...}: {
+ stylix.targets = {
+ firefox.profileNames = ["mun"];
+ helix.enable = false;
+ btop.enable = false;
+ nushell.enable = false;
+ starship.enable = false;
+ kitty.enable = false;
+ dunst.enable = false;
+ wofi.enable = false;
+ };
+ gtk = {
+ enable = true;
+ cursorTheme = {
+ package = pkgs.phinger-cursors;
+ name = "phinger-cursors";
+ size = 30;
+ };
+ iconTheme = {
+ package = pkgs.gruvbox-dark-icons-gtk;
+ name = "gruvbox-dark-icons";
+ };
+ };
+}
diff --git a/home/rices/schrottkatze/swayidle.nix b/home/rices/schrottkatze/swayidle.nix
new file mode 100644
index 0000000..6d8525c
--- /dev/null
+++ b/home/rices/schrottkatze/swayidle.nix
@@ -0,0 +1,15 @@
+{pkgs, ...}: {
+ services.swayidle = {
+ enable = true;
+ events = [
+ {
+ event = "before-sleep";
+ command = "${pkgs.swaylock}/bin/swaylock -fF -c 442244";
+ }
+ {
+ event = "lock";
+ command = "swaylock -c 441144";
+ }
+ ];
+ };
+}
diff --git a/home/rices/schrottkatze/system.nix b/home/rices/schrottkatze/system.nix
new file mode 100644
index 0000000..13e1516
--- /dev/null
+++ b/home/rices/schrottkatze/system.nix
@@ -0,0 +1,123 @@
+{
+ pkgs,
+ lib,
+ ...
+}: {
+ # Desktop environment - Niri compositor
+ programs.niri.enable = true;
+
+ # Default session
+ services.displayManager.defaultSession = "niri";
+
+ services.xserver.xkb = {
+ layout = "cz";
+ options = "eurosign:e,caps:escape";
+ };
+ # Polkit fix for Niri
+ security.polkit.enable = true;
+ systemd.user.services.niri-flake-polkit.enable = false;
+ systemd.user.services.polkit-gnome-authentication-agent-1 = {
+ description = "polkit-gnome-authentication-agent-1";
+ wantedBy = ["graphical-session.target"];
+ wants = ["graphical-session.target"];
+ after = ["graphical-session.target"];
+ serviceConfig = {
+ Type = "simple";
+ ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
+ Restart = "on-failure";
+ RestartSec = 1;
+ TimeoutStopSec = 10;
+ };
+ };
+
+ # Audio - Pipewire
+ programs.noisetorch.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ };
+ environment.systemPackages = with pkgs; [
+ playerctl
+ pulsemixer
+ ];
+
+ # XDG portals
+ xdg.portal.extraPortals = [
+ pkgs.xdg-desktop-portal-cosmic
+ ];
+ xdg.portal.config.common.default = [
+ "gnome"
+ ];
+
+ # Fonts
+ nixpkgs.config.packageOverrides = pkgs: {
+ google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: {
+ src = pkgs.fetchFromGitHub {
+ owner = "google";
+ repo = "fonts";
+ rev = "0bd2d5599819aa0774f5ca64c8ac3f54ae3fd54f";
+ sha256 = "sha256-E89GYJKG65Dh7TPI6TVre/4LCxXnxvTAPYS/OPj7nPg=";
+ };
+ installPhase =
+ oldAttrs.installPhase
+ + "mv $out/share/fonts/truetype $out/share/fonts/ttf\n"
+ + "rm $out/share/fonts/ttf/Noto*Emoji*.ttf";
+ });
+ };
+
+ fonts = {
+ packages = with pkgs; [
+ nerd-fonts.fira-code
+ nerd-fonts.departure-mono
+ google-fonts
+ noto-fonts-color-emoji
+ montserrat
+ atkinson-hyperlegible
+ arkpandora_ttf
+ liberation_ttf
+ caladea
+ carlito
+ garamond-libre
+ ocr-a
+ amiri
+ libertine
+ inter
+ b612
+ departure-mono
+ yasashisa-gothic
+ ];
+ fontDir.enable = true;
+ };
+
+ # Stylix configuration - Gruvbox Dark Hard
+ stylix = {
+ enable = true;
+ polarity = "dark";
+ base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
+ fonts = {
+ serif = {
+ package = pkgs.libertine;
+ name = "Linux Libertine O";
+ };
+ sansSerif = {
+ package = pkgs.atkinson-hyperlegible;
+ name = "Atkinson Hyperlegible";
+ };
+ monospace = {
+ package = pkgs.nerd-fonts.departure-mono;
+ name = "Departure Mono Nerd Font";
+ };
+ emoji = {
+ package = pkgs.noto-fonts-color-emoji;
+ name = "Noto Color Emoji";
+ };
+ };
+ };
+
+ # Flatpak & misc services
+ services.flatpak.enable = true;
+ services.illum.enable = true;
+ services.upower.enable = true;
+}
diff --git a/home/rices/schrottkatze/terminal.nix b/home/rices/schrottkatze/terminal.nix
new file mode 100644
index 0000000..403449c
--- /dev/null
+++ b/home/rices/schrottkatze/terminal.nix
@@ -0,0 +1,36 @@
+{...}: {
+ programs.kitty = {
+ enable = true;
+ font.size = 12;
+ font.name = "Departure Mono Nerd Font";
+ keybindings = {
+ "ctrl+shift+n" = "new_os_window_with_cwd";
+ };
+ settings = rec {
+ adjust_column_width = "95%";
+ color0 = "#282828";
+ color8 = "#928374";
+ color1 = "#cc241d";
+ color9 = "#fb4934";
+ color2 = "#98971a";
+ color10 = "#b8bb26";
+ color3 = "#d79921";
+ color11 = "#fabd2f";
+ color4 = "#458588";
+ color12 = "#83a598";
+ color5 = "#b16286";
+ color13 = "#d3869b";
+ color6 = "#689d6a";
+ color14 = "#8ec07c";
+ color7 = "#a89984";
+ color15 = "#ebdbb2";
+ foreground = color15;
+ background = "#1d2021";
+ confirm_os_window_close = 0;
+ hide_window_decorations = true;
+ };
+ };
+ home.sessionVariables = {
+ TERMINAL = "kitty";
+ };
+}
diff --git a/hosts/herra/packages.nix b/hosts/herra/packages.nix
index 989f7a5..517ceec 100644
--- a/hosts/herra/packages.nix
+++ b/hosts/herra/packages.nix
@@ -9,23 +9,19 @@
obs-studio
easyeffects
- # OBS with plugins
- (obs-studio.override {
- plugins = with pkgs.obs-studio-plugins; [
- distroav
- obs-vkcapture
- obs-pipewire-audio-capture
- # obs-source-switcher
- obs-source-record
- obs-source-clone
- # obs-media-control
- # obs-scene-as-transition
- # advanced-scene-switcher
- obs-retro-effects
- obs-dvd-screensaver
- obs-composite-blur
- ];
- })
+ # OBS plugins
+ #obs-studio-plugins.distroav # Stale upstream hash
+ obs-studio-plugins.obs-vkcapture
+ obs-studio-plugins.obs-pipewire-audio-capture
+ # obs-studio-plugins.obs-source-switcher
+ obs-studio-plugins.obs-source-record
+ obs-studio-plugins.obs-source-clone
+ # obs-studio-plugins.obs-media-control
+ # obs-studio-plugins.obs-scene-as-transition
+ # obs-studio-plugins.advanced-scene-switcher
+ obs-studio-plugins.obs-retro-effects
+ obs-studio-plugins.obs-dvd-screensaver
+ obs-studio-plugins.obs-composite-blur
# Audio
pavucontrol