diff --git a/home-manager-modules/mails/default.nix b/home-manager-modules/mails/default.nix index 0a1a8e0..56f02b4 100644 --- a/home-manager-modules/mails/default.nix +++ b/home-manager-modules/mails/default.nix @@ -46,7 +46,6 @@ with lib; mbsync = { enable = true; create = "maildir"; - expunge = "both"; extraConfig.channel = { "CopyArrivalDate" = "yes"; }; @@ -68,7 +67,6 @@ with lib; mbsync = { enable = true; create = "maildir"; - expunge = "both"; extraConfig.channel = { "CopyArrivalDate" = "yes"; }; @@ -91,7 +89,6 @@ with lib; mbsync = { enable = true; create = "maildir"; - expunge = "both"; extraConfig.channel = { "CopyArrivalDate" = "yes"; }; @@ -114,7 +111,6 @@ with lib; mbsync = { enable = true; create = "maildir"; - expunge = "both"; extraConfig.channel = { "CopyArrivalDate" = "yes"; }; @@ -142,9 +138,6 @@ with lib; programs.notmuch = { enable = lib.mkDefault true; new.tags = [ "new" ]; - hooks.preNew = lib.mkDefault '' - ${pkgs.notmuch-mailmover}/bin/notmuch-mailmover --config ${./mailmover.lua} - ''; hooks.postNew = lib.mkDefault '' ${pkgs.afew}/bin/afew --tag --new ''; @@ -156,9 +149,13 @@ with lib; [FolderNameFilter] maildir_separator = / folder_lowercases = true + folder_blacklist = Sent + [ArchiveSentMailsFilter] + sent_tag = sent [Filter.1] - query = tag:new + query = tag:archive tags = -new + [InboxFilter] ''; }; diff --git a/home-manager-modules/mails/mailmover.lua b/home-manager-modules/mails/mailmover.lua deleted file mode 100644 index 0f0c046..0000000 --- a/home-manager-modules/mails/mailmover.lua +++ /dev/null @@ -1,173 +0,0 @@ -local match_modes = { - ALL = "all", - FIRST = "first", - UNIQUE = "unique", -} - ---- Execute a shell command and return its output -local function execute_command(cmd) - local handle = io.popen(cmd) - local result = handle:read("*a") - handle:close() - return result -end - ---- Get all folders from the Maildir structure -local function get_maildir_folders(maildir_path) - local cmd = "find " .. maildir_path .. " -type d -name cur | sed 's|/cur$||' | sed 's|" .. maildir_path .. "/||'" - local output = execute_command(cmd) - - local folders = {} - for folder in string.gmatch(output, "([^\n]+)") do - if folder ~= "" then - folders[#folders+1] = folder - end - end - - return folders -end - ---- Check if one path is a parent of another -local function is_parent_path(parent, child) - return child:match("^" .. parent .. "/") ~= nil -end - ---- Check if a folder contains "Archive" in its name -local function contains_archive(folder) - return string.find(folder, "Archive") ~= nil -end - ---- Generate rules based on folder structure -local function generate_rules(maildir_path) - local folders = get_maildir_folders(maildir_path) - local rules = {} - - -- Create a sorted copy of folders, from longest path to shortest - -- This ensures we process children before parents - local sorted_folders = {} - for _, folder in ipairs(folders) do - table.insert(sorted_folders, folder) - end - table.sort(sorted_folders, function(a, b) - return #a > #b - end) - - -- Store each folder's subfolder tags for exclusion - local subfolder_tags = {} - for _, folder in ipairs(sorted_folders) do - subfolder_tags[folder] = {} - end - - -- Collect all subfolder-specific tags for each folder - for _, folder in ipairs(sorted_folders) do - local parts = {} - for part in string.gmatch(folder, "([^/]+)") do - table.insert(parts, part) - end - - -- For each folder, find its parent folders and add its deepest tag to their exclusion list - if #parts > 0 then - local deepest_tag = string.lower(parts[#parts]) - local parent_path = "" - - for i = 1, #parts - 1 do - if i > 1 then - parent_path = parent_path .. "/" - end - parent_path = parent_path .. parts[i] - - -- Add this tag to the parent's exclusion list - if subfolder_tags[parent_path] then - table.insert(subfolder_tags[parent_path], deepest_tag) - end - end - end - end - - -- Now generate rules with proper exclusions - for _, folder in ipairs(folders) do - -- Skip Trash and Sent as they're already handled - if folder ~= "Trash" and folder ~= "Sent" then - local query_parts = {} - local exclusion_parts = {} - - -- Convert each folder component to a lowercase tag requirement - for part in string.gmatch(folder, "([^/]+)") do - table.insert(query_parts, "tag:" .. string.lower(part)) - end - - -- Add exclusions for subfolder-specific tags - if subfolder_tags[folder] then - for _, tag in ipairs(subfolder_tags[folder]) do - table.insert(exclusion_parts, "not tag:" .. tag) - end - end - - -- Add "not tag:sent" for any folder containing "Archive" - if contains_archive(folder) then - table.insert(exclusion_parts, "not tag:sent") - end - - -- Build the complete query - local query = table.concat(query_parts, " and ") - if #exclusion_parts > 0 then - query = query .. " and " .. table.concat(exclusion_parts, " and ") - end - - -- Add rule for this folder - rules[#rules+1] = { - folder = folder, - query = query, - } - end - end - - -- Sort rules by complexity (number of tags) - more specific rules first - table.sort(rules, function(a, b) - if a.folder == "Trash" then return true end - if b.folder == "Trash" then return false end - if a.folder == "Sent" then return true end - if b.folder == "Sent" then return false end - - local a_count = select(2, string.gsub(a.query, "tag:", "")) - local b_count = select(2, string.gsub(b.query, "tag:", "")) - return a_count > b_count - end) - - local final_rules = {} - for _, rule in ipairs(rules) do - if string.lower(rule.folder) ~= "drafts" then - table.insert(final_rules, rule) - end - end - - return final_rules -end - --- Path to maildir -local maildir_path = os.getenv("HOME") .. "/Maildir" - ---- Configuration for notmuch-mailmover. --- ---- @class config ---- @field maildir string Path to the maildir ---- @field notmuch_config string Path to the notmuch configuration ---- @field rename boolean Rename the files when moving ---- @field max_age_days number Maximum age (days) of the messages to be procssed ---- @field rule_match_mode config.match_mode Match mode for rules ---- @field rules rule[] List of rules ---- ---- @class rule ---- @field folder string Folder to move the messages to ---- @field query string Notmuch query to match the messages -local config = { - maildir = maildir_path, - notmuch_config = "/home/julien/.config/notmuch/default/config", - rename = true, - max_age_days = 356, - rule_match_mode = match_modes.UNIQUE, - rules = generate_rules(maildir_path), -} - - -return config diff --git a/lon.lock b/lon.lock index ab25b78..72c8dfc 100644 --- a/lon.lock +++ b/lon.lock @@ -7,9 +7,9 @@ "owner": "ryantm", "repo": "agenix", "branch": "main", - "revision": "96e078c646b711aee04b82ba01aefbff87004ded", - "url": "https://github.com/ryantm/agenix/archive/96e078c646b711aee04b82ba01aefbff87004ded.tar.gz", - "hash": "sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus=" + "revision": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", + "url": "https://github.com/ryantm/agenix/archive/e600439ec4c273cf11e06fe4d9d906fb98fa097c.tar.gz", + "hash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=" }, "buildbot-nix": { "type": "GitHub", @@ -27,9 +27,9 @@ "owner": "zhaofengli", "repo": "colmena", "branch": "main", - "revision": "2370d4336eda2a9ef29fce10fa7076ae011983ab", - "url": "https://github.com/zhaofengli/colmena/archive/2370d4336eda2a9ef29fce10fa7076ae011983ab.tar.gz", - "hash": "sha256-hPSLvw6AZQYrZyGI6Uq4XgST7benF/0zcCpugn/P0yM=" + "revision": "a6b51f5feae9bfb145daa37fd0220595acb7871e", + "url": "https://github.com/zhaofengli/colmena/archive/a6b51f5feae9bfb145daa37fd0220595acb7871e.tar.gz", + "hash": "sha256-LLpiqfOGBippRax9F33kSJ/Imt8gJXb6o0JwSBiNHCk=" }, "disko": { "type": "GitHub", @@ -37,9 +37,9 @@ "owner": "nix-community", "repo": "disko", "branch": "master", - "revision": "b5d1320ebc2f34dbea4655f95167f55e2130cdb3", - "url": "https://github.com/nix-community/disko/archive/b5d1320ebc2f34dbea4655f95167f55e2130cdb3.tar.gz", - "hash": "sha256-mLlkVX1kKbAa/Ns5u26wDYw4YW4ziMFM21fhtRmfirU=" + "revision": "e51159153b5fbe5c41caab41a7212df93c42d34b", + "url": "https://github.com/nix-community/disko/archive/e51159153b5fbe5c41caab41a7212df93c42d34b.tar.gz", + "hash": "sha256-sQzLVCRPfAV/TJXru/jhCyecMXinG/sW8KLoYg0nOpk=" }, "dns": { "type": "GitHub", @@ -57,9 +57,9 @@ "owner": "nix-community", "repo": "emacs-overlay", "branch": "master", - "revision": "c2f57f602ba4f7da96ac08537240774531cb0fb3", - "url": "https://github.com/nix-community/emacs-overlay/archive/c2f57f602ba4f7da96ac08537240774531cb0fb3.tar.gz", - "hash": "sha256-PT/AKx72aC7db9xBCtj3w/hOLw7AoBESMLwW48vCMqY=" + "revision": "7a9a25389a6ad9402f9aa5087ccb36f8383045a8", + "url": "https://github.com/nix-community/emacs-overlay/archive/7a9a25389a6ad9402f9aa5087ccb36f8383045a8.tar.gz", + "hash": "sha256-YMy01dURXhxyjx2W+Dv83b2RRnNq28K4t4+kvrRxFto=" }, "git-hooks": { "type": "GitHub", @@ -67,9 +67,9 @@ "owner": "cachix", "repo": "git-hooks.nix", "branch": "master", - "revision": "fa466640195d38ec97cf0493d6d6882bc4d14969", - "url": "https://github.com/cachix/git-hooks.nix/archive/fa466640195d38ec97cf0493d6d6882bc4d14969.tar.gz", - "hash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=" + "revision": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", + "url": "https://github.com/cachix/git-hooks.nix/archive/9364dc02281ce2d37a1f55b6e51f7c0f65a75f17.tar.gz", + "hash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=" }, "home-manager": { "type": "GitHub", @@ -77,9 +77,9 @@ "owner": "nix-community", "repo": "home-manager", "branch": "release-24.11", - "revision": "50eee705bbdbac942074a8c120e8194185633675", - "url": "https://github.com/nix-community/home-manager/archive/50eee705bbdbac942074a8c120e8194185633675.tar.gz", - "hash": "sha256-EyXUNSa+H+YvGVuQJP1nZskXAowxKYp79RNUsNdQTj4=" + "revision": "9d3d080aec2a35e05a15cedd281c2384767c2cfe", + "url": "https://github.com/nix-community/home-manager/archive/9d3d080aec2a35e05a15cedd281c2384767c2cfe.tar.gz", + "hash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=" }, "home-manager-unstable": { "type": "GitHub", @@ -87,9 +87,9 @@ "owner": "nix-community", "repo": "home-manager", "branch": "master", - "revision": "8a318641ac13d3bc0a53651feaee9560f9b2d89a", - "url": "https://github.com/nix-community/home-manager/archive/8a318641ac13d3bc0a53651feaee9560f9b2d89a.tar.gz", - "hash": "sha256-i6BoiQP0PasExESQHszC0reQHfO6D4aI2GzOwZMOI20=" + "revision": "c630dfa8abcc65984cc1e47fb25d4552c81dd37e", + "url": "https://github.com/nix-community/home-manager/archive/c630dfa8abcc65984cc1e47fb25d4552c81dd37e.tar.gz", + "hash": "sha256-gBlb8R9gnjUAT5XabJeel3C2iEUiBHx3+91651y3Sqo=" }, "impermanence": { "type": "GitHub", @@ -107,9 +107,9 @@ "owner": "nix-community", "repo": "lanzaboote", "branch": "master", - "revision": "995637eb3ab78eac33f8ee6b45cc2ecd5ede12ba", - "url": "https://github.com/nix-community/lanzaboote/archive/995637eb3ab78eac33f8ee6b45cc2ecd5ede12ba.tar.gz", - "hash": "sha256-4GAHjus6JRpYHVROMIhFIz/sgLDF/klBM3UHulbSK9s=" + "revision": "3bdeebbc484a09391c4f0ec8a37bb77809426660", + "url": "https://github.com/nix-community/lanzaboote/archive/3bdeebbc484a09391c4f0ec8a37bb77809426660.tar.gz", + "hash": "sha256-2j+sln9RwQn+g7J4GmdFFgvqXnLkvWBNMaUzONlkzUE=" }, "lila": { "type": "GitHub", @@ -117,9 +117,9 @@ "owner": "JulienMalka", "repo": "lila", "branch": "main", - "revision": "7e84b2a9656fd139c6e12ff3dadde07a495bd796", - "url": "https://github.com/JulienMalka/lila/archive/7e84b2a9656fd139c6e12ff3dadde07a495bd796.tar.gz", - "hash": "sha256-TIK8220a8M/PQ36pJSRd2yBHhM7/PfMUTtj62qTD94c=" + "revision": "9c52498d310c8ecca8de63e50658bd5089617e3a", + "url": "https://github.com/JulienMalka/lila/archive/9c52498d310c8ecca8de63e50658bd5089617e3a.tar.gz", + "hash": "sha256-GOXCyP1DjN7RV+FULaPxBmXnKaw3jTw5W9uDfhbY/CM=" }, "lon": { "type": "GitHub", @@ -127,9 +127,9 @@ "owner": "nikstur", "repo": "lon", "branch": "main", - "revision": "ad3bc97747c651e23fbc12c70a5849d3d8e9fdf4", - "url": "https://github.com/nikstur/lon/archive/ad3bc97747c651e23fbc12c70a5849d3d8e9fdf4.tar.gz", - "hash": "sha256-MgMDxS9xiiSkL/KsCTxLrr9wd9n1S/wq4lrA/NSyqBE=" + "revision": "a8b4406e5151af87b989564d4aa98ecd6d4d3500", + "url": "https://github.com/nikstur/lon/archive/a8b4406e5151af87b989564d4aa98ecd6d4d3500.tar.gz", + "hash": "sha256-VGvK0ahBl440NMs03WqmP7T4a1DP13yfX47YI84rlGU=" }, "nix-index-database": { "type": "GitHub", @@ -137,9 +137,9 @@ "owner": "mic92", "repo": "nix-index-database", "branch": "main", - "revision": "137fd2bd726fff343874f85601b51769b48685cc", - "url": "https://github.com/mic92/nix-index-database/archive/137fd2bd726fff343874f85601b51769b48685cc.tar.gz", - "hash": "sha256-ShizFaJCAST23tSrHHtFFGF0fwd72AG+KhPZFFQX/0o=" + "revision": "895d81b6228bbd50a6ef22f5a58a504ca99763ea", + "url": "https://github.com/mic92/nix-index-database/archive/895d81b6228bbd50a6ef22f5a58a504ca99763ea.tar.gz", + "hash": "sha256-/Ak+Quinhmdxa9m3shjm4lwwwqmzG8zzGhhhhgR1k9I=" }, "nixos-anywhere": { "type": "GitHub", @@ -147,9 +147,9 @@ "owner": "nix-community", "repo": "nixos-anywhere", "branch": "main", - "revision": "edf1adb89307f921575b5fcd0c6bb4e684fbd38b", - "url": "https://github.com/nix-community/nixos-anywhere/archive/edf1adb89307f921575b5fcd0c6bb4e684fbd38b.tar.gz", - "hash": "sha256-F9IekLaLYVG/UNUiaN194qu0n1pOgeqjGkD1l5OVEgM=" + "revision": "e8e5d63e46f99fc75d300fb0d0447456d5057698", + "url": "https://github.com/nix-community/nixos-anywhere/archive/e8e5d63e46f99fc75d300fb0d0447456d5057698.tar.gz", + "hash": "sha256-HC9kugsuRpPdR1dfRV0hTIqAn+PSR9rn8QWCETILI4o=" }, "nixpkgs": { "type": "GitHub", @@ -157,9 +157,9 @@ "owner": "nixos", "repo": "nixpkgs", "branch": "nixos-24.11", - "revision": "5b35d248e9206c1f3baf8de6a7683fee126364aa", - "url": "https://github.com/nixos/nixpkgs/archive/5b35d248e9206c1f3baf8de6a7683fee126364aa.tar.gz", - "hash": "sha256-NTtKOTLQv6dPfRe00OGSywg37A1FYqldS6xiNmqBUYc=" + "revision": "a880f49904d68b5e53338d1e8c7bf80f59903928", + "url": "https://github.com/nixos/nixpkgs/archive/a880f49904d68b5e53338d1e8c7bf80f59903928.tar.gz", + "hash": "sha256-o4FjFOUmjSRMK7dn0TFdAT0RRWUWD+WsspPHa+qEQT8=" }, "proxmox": { "type": "GitHub", @@ -167,9 +167,9 @@ "owner": "saumonnet", "repo": "proxmox-nixos", "branch": "main", - "revision": "4ebf07bd714747a9cd01e5bdb97dc0f04b92b7bc", - "url": "https://github.com/saumonnet/proxmox-nixos/archive/4ebf07bd714747a9cd01e5bdb97dc0f04b92b7bc.tar.gz", - "hash": "sha256-WtqTRYzXb2wTxPaIhzZof8lIp80lRZAlCZq2Q98jSZI=" + "revision": "4ad21ba619d779b229e308b58066bafd65d5153d", + "url": "https://github.com/saumonnet/proxmox-nixos/archive/4ad21ba619d779b229e308b58066bafd65d5153d.tar.gz", + "hash": "sha256-knX3c5OWE1C5QRDdvup+zqlWvwCLDHiME6+i18WwKsE=" }, "stateless-uptime-kuma": { "type": "Git", @@ -186,9 +186,9 @@ "owner": "nixos", "repo": "nixpkgs", "branch": "nixos-unstable", - "revision": "979daf34c8cacebcd917d540070b52a3c2b9b16e", - "url": "https://github.com/nixos/nixpkgs/archive/979daf34c8cacebcd917d540070b52a3c2b9b16e.tar.gz", - "hash": "sha256-uKCfuDs7ZM3QpCE/jnfubTg459CnKnJG/LwqEVEdEiw=" + "revision": "063dece00c5a77e4a0ea24e5e5a5bd75232806f8", + "url": "https://github.com/nixos/nixpkgs/archive/063dece00c5a77e4a0ea24e5e5a5bd75232806f8.tar.gz", + "hash": "sha256-nEo1t3Q0F+0jQ36HJfbJtiRU4OI+/0jX/iITURKe3EE=" } } } diff --git a/machines/arcadia/home-julien.nix b/machines/arcadia/home-julien.nix index 87e6148..edaace0 100644 --- a/machines/arcadia/home-julien.nix +++ b/machines/arcadia/home-julien.nix @@ -1,4 +1,4 @@ -{ pkgs, lib, ... }: +{ pkgs, ... }: { luj.hmgr.julien = { @@ -13,21 +13,6 @@ luj.programs.firefox.enable = true; luj.programs.pass.enable = true; - luj.emails.enable = true; - - services.mbsync.postExec = lib.mkForce null; - - services.mbsync.enable = lib.mkForce false; - programs.mbsync.enable = lib.mkForce false; - programs.notmuch.hooks.postNew = lib.mkForce ""; - - services.muchsync.remotes."gustave" = { - frequency = "minutely"; - local.checkForModifiedFiles = true; - remote.checkForModifiedFiles = true; - remote.host = "gustave"; - }; - programs.direnv = { enable = true; nix-direnv.enable = true; @@ -77,12 +62,6 @@ emacs-lsp-booster hunspellDicts.en_US hunspellDicts.fr-moderne - rust-analyzer - cargo - rustc - pyright - unstable.nixfmt-rfc-style - i3lock ] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); fonts.fontconfig.enable = true; diff --git a/machines/fischer/default.nix b/machines/fischer/default.nix index 333535d..abc71ee 100644 --- a/machines/fischer/default.nix +++ b/machines/fischer/default.nix @@ -5,55 +5,6 @@ inputs, ... }: -let - - stumpwmContrib = pkgs.fetchFromGitHub { - owner = "stumpwm"; - repo = "stumpwm-contrib"; - rev = "1e3fa7abae30e5d5498e69ba56da6a7e265144cc"; - hash = "sha256-ewPeamcEWcvAHY1pmnbsVmej8gSt2qIo+lSMjpKwF6k="; - - }; - sbcl_stump = pkgs.sbcl_2_4_6; - stumpwmWithDeps = sbcl_stump.pkgs.stumpwm.overrideLispAttrs (x: { - lispLibs = - x.lispLibs - ++ (with sbcl_stump.pkgs; [ - clx-truetype - slynk - ]); - }); - - stumpwmWithDepsRunnable = pkgs.runCommand "stuumpwm-with-deps-runnable" { } '' - mkdir -p "$out/bin" "$out/lib" - cp -r "${stumpwmContrib}" "contrib" - chmod u+rwX -R contrib - export HOME="$PWD" - FIRA_CODE_PATH="${pkgs.fira-code}/share/fonts/truetype" - POWERLINE_PATH="${pkgs.powerline-fonts}/share/fonts/truetype" - ln -s "${stumpwmWithDeps}" "$out/lib/stumpwm" - ${(sbcl_stump.withPackages (_: [ stumpwmWithDeps ]))}/bin/sbcl \ - --eval '(require :asdf)' --eval '(asdf:disable-output-translations)' \ - --eval '(require :stumpwm)' \ - --eval '(in-package :stumpwm)' \ - --eval '(setf *default-package* :stumpwm)' \ - --eval '(set-module-dir "contrib")' \ - --eval '(defvar stumpwm::*local-module-dir* "contrib")' \ - --eval '(load-module "mem")' \ - --eval '(load-module "cpu")' \ - --eval '(load-module "battery-portable")' \ - --eval '(load-module "net")' \ - --eval '(load-module "urgentwindows")' \ - --eval '(load-module "ttf-fonts")' \ - --eval '(require :slynk)' \ - --eval '(require :clx-truetype)' \ - --eval '(defvar *wallpaper* nil)' \ - --eval '(setf *wallpaper* "${./wallpaper.jpeg}")' \ - --eval "(setf clx-truetype:*font-dirs* (list \"$FIRA_CODE_PATH\" \"$POWERLINE_PATH\"))" \ - --eval "(sb-ext:save-lisp-and-die \"$out/bin/stumpwm\" :executable t :toplevel #'stumpwm:stumpwm)" - test -x "$out/bin/stumpwm" - ''; -in { imports = [ ./hardware.nix @@ -83,19 +34,6 @@ in }; boot.initrd.systemd.tpm2.enable = true; - services.xserver = { - enable = true; - displayManager.lightdm.enable = true; - windowManager.stumpwm.enable = true; - windowManager.stumpwm.package = stumpwmWithDepsRunnable; - }; - - services.picom = { - enable = true; - backend = "xr_glx_hybrid"; - vSync = true; - }; - services.pipewire = { enable = true; alsa.enable = true; @@ -124,41 +62,6 @@ in networking.networkmanager.dns = "systemd-resolved"; services.resolved.enable = true; - services.autorandr = { - enable = true; - profiles = { - default = { - fingerprint = { - eDP-1-1 = "00ffffffffffff0006af9af900000000141f0104a51e13780363f5a854489d240e505400000001010101010101010101010101010101fa3c80b870b0244010103e002dbc1000001ac83080b870b0244010103e002dbc1000001a000000fe004a38335646804231343055414e0000000000024101b2001100000a410a20200068"; - }; - config = { - eDP-1-1.enable = true; - }; - }; - dock-julien = { - fingerprint = { - eDP-1-1 = "00ffffffffffff0006af9af900000000141f0104a51e13780363f5a854489d240e505400000001010101010101010101010101010101fa3c80b870b0244010103e002dbc1000001ac83080b870b0244010103e002dbc1000001a000000fe004a38335646804231343055414e0000000000024101b2001100000a410a20200068"; - DP-1-5-3 = "00ffffffffffff0010ac42d1425439312021010380351e78eaa3d5ab524f9d240f5054a54b008100b300d100714fa9408180d1c00101565e00a0a0a02950302035000f282100001a000000ff004446354c5459330a2020202020000000fc0044454c4c205032343233440a20000000fd00314b1d711c000a2020202020200107020318b14d010203071112161304141f051065030c001000023a801871382d40582c45000f282100001e011d8018711c1620582c25000f282100009e011d007251d01e206e2855000f282100001e7e3900a080381f4030203a000f282100001a00000000000000000000000000000000000000000000000000000000000000c1"; - DP-1-5-1 = "00ffffffffffff0026cd6b610f01010117210104a5351e783be725a8554ea0260d5054bfef80d140d100d1c0b30095009040818081c0565e00a0a0a02950302035000f282100001a000000ff0031323134383332333030313335000000fd00314b0f5a19000a202020202020000000fc00504c32343933510a202020202001c5020320f153101f051404131e1d121116150f0e030207060123097f0783010000394e00a0a0a02250302035000f282100001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079"; - }; - config = { - eDP-1-1.enable = false; - DP-1-5-1 = { - enable = true; - primary = true; - position = "0x0"; - mode = "2560x1440"; - }; - DP-1-5-3 = { - enable = true; - position = "2560x0"; - mode = "2560x1440"; - }; - }; - }; - }; - }; - # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console = { @@ -171,50 +74,36 @@ in # Load nvidia driver for Xorg and Wayland services.xserver.videoDrivers = [ "nvidia" ]; - services.libinput.touchpad.tapping = false; - - hardware.nvidia.prime = { - sync.enable = true; - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; - }; - hardware.nvidia = { + # Modesetting is required. modesetting.enable = true; - powerManagement.enable = true; - #powerManagement.finegrained = true; + + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + powerManagement.enable = false; + # Fine-grained power management. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + powerManagement.finegrained = false; + + # Use the NVidia open source kernel module (not to be confused with the + # independent third-party "nouveau" open source driver). + # Support is limited to the Turing and later architectures. Full list of + # supported GPUs is at: + # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus + # Only available from driver 515.43.04+ + # Do not disable this unless your GPU is unsupported or if you have a good reason to. open = true; + + # Enable the Nvidia settings menu, + # accessible via `nvidia-settings`. nvidiaSettings = true; - dynamicBoost.enable = true; + + # Optionally, you may need to select the appropriate driver version for your specific GPU. package = config.boot.kernelPackages.nvidiaPackages.beta; }; - environment.variables = { - # Required to run the correct GBM backend for nvidia GPUs on wayland - GBM_BACKEND = "nvidia-drm"; - # Apparently, without this nouveau may attempt to be used instead - # (despite it being blacklisted) - __GLX_VENDOR_LIBRARY_NAME = "nvidia"; - # Hardware cursors are currently broken on wlroots - WLR_NO_HARDWARE_CURSORS = "1"; - }; - - boot.extraModprobeConfig = - "options nvidia " - + lib.concatStringsSep " " [ - # nvidia assume that by default your CPU does not support PAT, - # but this is effectively never the case in 2023 - "NVreg_UsePageAttributeTable=1" - # This is sometimes needed for ddc/ci support, see - # https://www.ddcutil.com/nvidia/ - # - # Current monitor does not support it, but this is useful for - # the future - "NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100" - ]; - boot.initrd.kernelModules = [ "nvidia" ]; + boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; programs.dconf.enable = true; @@ -234,7 +123,6 @@ in wl-mirror texlive.combined.scheme-full mu - stumpwmWithDepsRunnable ]; networking.hosts = { diff --git a/machines/fischer/hardware.nix b/machines/fischer/hardware.nix index 1761161..a5ee88f 100644 --- a/machines/fischer/hardware.nix +++ b/machines/fischer/hardware.nix @@ -1,48 +1,35 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: +{ config, lib, modulesPath, ... }: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = + [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ - "xhci_pci" - "thunderbolt" - "vmd" - "nvme" - "usb_storage" - "usbhid" - "sd_mod" - "rtsx_pci_sdmmc" - ]; + boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - boot.kernelPackages = pkgs.linuxPackages_latest; - fileSystems."/" = { - device = "/dev/disk/by-uuid/f7072a83-0478-48ea-9f55-074541c1c524"; - fsType = "btrfs"; - }; + fileSystems."/" = + { + device = "/dev/disk/by-uuid/f7072a83-0478-48ea-9f55-074541c1c524"; + fsType = "btrfs"; + }; - boot.initrd.luks.devices."cryptroot".device = - "/dev/disk/by-uuid/56dc5a16-94ca-4a9c-a215-51ed55aec6b5"; + boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/56dc5a16-94ca-4a9c-a215-51ed55aec6b5"; - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/9331-9E52"; - fsType = "vfat"; - }; + fileSystems."/boot" = + { + device = "/dev/disk/by-uuid/9331-9E52"; + fsType = "vfat"; + }; - swapDevices = [ { device = "/dev/disk/by-uuid/63debceb-44e6-4e27-94df-092dd59fd9e2"; } ]; + swapDevices = + [{ device = "/dev/disk/by-uuid/63debceb-44e6-4e27-94df-092dd59fd9e2"; }]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's diff --git a/machines/fischer/home-julien.nix b/machines/fischer/home-julien.nix index a271d3d..f3af91a 100644 --- a/machines/fischer/home-julien.nix +++ b/machines/fischer/home-julien.nix @@ -1,4 +1,4 @@ -{ pkgs, lib, ... }: +{ pkgs, ... }: { luj.hmgr.julien = { @@ -13,22 +13,8 @@ luj.programs.fish.enable = true; luj.programs.dunst.enable = true; luj.programs.firefox.enable = true; - luj.programs.hyprland.enable = true; - luj.emails.enable = true; - - services.mbsync.postExec = lib.mkForce null; - - services.mbsync.enable = lib.mkForce false; - programs.mbsync.enable = lib.mkForce false; - programs.notmuch.hooks.postNew = lib.mkForce ""; - - services.muchsync.remotes."gustave" = { - frequency = "minutely"; - local.checkForModifiedFiles = true; - remote.checkForModifiedFiles = true; - remote.host = "gustave"; - }; + luj.programs.hyprland.enable = true; programs.emacs = { enable = true; @@ -53,16 +39,6 @@ size = 15; }; - services.screen-locker = { - enable = true; - lockCmd = "XSECURELOCK_PASSWORD_PROMPT=time_hex ${pkgs.xsecurelock}/bin/xsecurelock"; - xautolock.enable = false; # means use xss-lock - xss-lock.extraOptions = [ - "--notifier=${pkgs.xsecurelock}/libexec/xsecurelock/dimmer" - "-l" # prevents suspend before locker is started - ]; - }; - home.packages = with pkgs; [ @@ -103,8 +79,6 @@ kanidm yubioath-flutter ltex-ls - powerline-fonts - drawio ] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts); diff --git a/machines/fischer/syncthing.nix b/machines/fischer/syncthing.nix index b933e17..5177bb6 100644 --- a/machines/fischer/syncthing.nix +++ b/machines/fischer/syncthing.nix @@ -27,13 +27,6 @@ ]; }; - "arcadia" = { - id = "E5CGH2H-3XMMCKQ-5PTMKKA-4C4VDS3-JCBZGRM-4GTAWHQ-QRJ367E-BXFMUAU"; - addresses = [ - "tcp://arcadia.luj:22000" - ]; - }; - }; folders = { "dev" = { @@ -41,7 +34,6 @@ devices = [ "gustave" "gallifrey" - "arcadia" ]; }; }; diff --git a/machines/fischer/wallpaper.jpeg b/machines/fischer/wallpaper.jpeg deleted file mode 100644 index 4dfbb05..0000000 Binary files a/machines/fischer/wallpaper.jpeg and /dev/null differ diff --git a/machines/gustave/disko.nix b/machines/gustave/disko.nix index ebe567d..8be9924 100644 --- a/machines/gustave/disko.nix +++ b/machines/gustave/disko.nix @@ -1,18 +1,17 @@ { devices = { disk = { - main = { + sda = { type = "disk"; - device = "/dev/sdb"; + device = "/dev/sda"; content = { type = "gpt"; partitions = { - boot = { - size = "1M"; - type = "EF02"; - }; ESP = { - size = "512M"; + priority = 1; + name = "ESP"; + start = "1M"; + end = "128M"; type = "EF00"; content = { type = "filesystem"; @@ -20,60 +19,35 @@ mountpoint = "/boot"; }; }; - swap = { - size = "16G"; - content = { - type = "swap"; - discardPolicy = "both"; - }; - }; root = { size = "100%"; content = { - type = "lvm_pv"; - vg = "mainpool"; + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountpoint = "/persistent"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; }; }; }; }; }; }; - lvm_vg = { - mainpool = { - type = "lvm_vg"; - lvs = { - root = { - size = "100G"; - pool = "mainpool"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/"; - mountOptions = [ "defaults" ]; - }; - }; - persistent = { - size = "1500G"; - pool = "mainpool"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/persistent"; - mountOptions = [ "defaults" ]; - }; - }; - - store = { - size = "200G"; - pool = "mainpool"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/nix"; - }; - }; - }; - }; - }; }; } diff --git a/machines/gustave/hardware.nix b/machines/gustave/hardware.nix index dd6472f..a383bfe 100644 --- a/machines/gustave/hardware.nix +++ b/machines/gustave/hardware.nix @@ -1,9 +1,4 @@ -{ - lib, - modulesPath, - pkgs, - ... -}: +{ lib, modulesPath, ... }: { imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; @@ -20,14 +15,33 @@ boot.kernelModules = [ ]; boot.extraModulePackages = [ ]; - boot.initrd.postDeviceCommands = '' - lvm lvremove --force /dev/mainpool/root || : - yes | lvm lvcreate --size 100G --name root mainpool - ${pkgs.e2fsprogs}/bin/mkfs.ext4 /dev/mainpool/root - ''; - fileSystems."/persistent".neededForBoot = lib.mkForce true; + boot.initrd.postDeviceCommands = lib.mkAfter '' + mkdir /btrfs_tmp + mount /dev/disk/by-partlabel/disk-sda-root /btrfs_tmp + if [[ -e /btrfs_tmp/root ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") + mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" + fi + + delete_subvolume_recursively() { + IFS=$'\n' + for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + delete_subvolume_recursively "/btrfs_tmp/$i" + done + btrfs subvolume delete "$1" + } + + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do + delete_subvolume_recursively "$i" + done + + btrfs subvolume create /btrfs_tmp/root + umount /btrfs_tmp + ''; + networking.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";