diff --git a/flake.lock b/flake.lock index da4e55b..92ba9c5 100644 --- a/flake.lock +++ b/flake.lock @@ -56,6 +56,26 @@ "type": "github" } }, + "nix-private": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1753832018, + "narHash": "sha256-5Bzgfzy6PNppiZC9TmunBVyxZYh4pbctHyizxyNgiq8=", + "ref": "main", + "rev": "a87fde2a8776983419bf8828dcde50835e094798", + "shallow": true, + "type": "git", + "url": "ssh://git@git.epha.se:24422/ephase/nix-private.git" + }, + "original": { + "ref": "main", + "shallow": true, + "type": "git", + "url": "ssh://git@git.epha.se:24422/ephase/nix-private.git" + } + }, "nixgl": { "inputs": { "flake-utils": "flake-utils", @@ -78,6 +98,20 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1753722563, + "narHash": "sha256-FK8iq76wlacriq3u0kFCehsRYTAqjA9nfprpiSWRWIc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "648f70160c03151bc2121d179291337ad6bc564b", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1748693115, "narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=", @@ -92,7 +126,7 @@ "type": "indirect" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { "lastModified": 1748693115, "narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=", @@ -111,7 +145,7 @@ "nur": { "inputs": { "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "treefmt-nix": "treefmt-nix" }, "locked": { @@ -131,8 +165,9 @@ "root": { "inputs": { "home-manager": "home-manager", + "nix-private": "nix-private", "nixgl": "nixgl", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "nur": "nur", "sops-nix": "sops-nix" } diff --git a/flake.nix b/flake.nix index 84149e0..251eabc 100644 --- a/flake.nix +++ b/flake.nix @@ -15,20 +15,23 @@ url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + nix-private = { + url = "git+ssh://git@git.epha.se:24422/ephase/nix-private.git?shallow=1&ref=main"; + }; }; outputs = { self, nixpkgs, home-manager, nur, nixgl, sops-nix, ... }@inputs: - let + let stateVersion = "23.11"; - + allSystems = [ "x86_64-linux" # 64bit AMD/Intel x86 "aarch64-linux" # 64bit ARM Linux ]; - + forAllSystems = fn: nixpkgs.lib.genAttrs allSystems (system: fn { pkgs = import nixpkgs { inherit system; }; }); - + createNixosSystem = { system, hostname, username ? "ephase" }: nixpkgs.lib.nixosSystem { system = system; specialArgs = { @@ -40,7 +43,7 @@ ./nixos/default.nix ]; }; - + createHomeConfiguration = { system ? "x86_64-linux", hostname, username ? "ephase" }: home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { @@ -79,13 +82,13 @@ luci = createNixosSystem { system = "x86_64-linux"; hostname = "luci"; }; }; homeConfigurations = { - "rick" = createHomeConfiguration { system = "aarch64-linux"; hostname = "rick";}; - "luci" = createHomeConfiguration { system = "x86_64-linux"; hostname = "luci";}; - "morty" = createHomeConfiguration { system = "x86_64-linux"; hostname = "morty";}; - "mrmeeseeks" = createHomeConfiguration { system = "x86_64-linux"; hostname = "mrmeeseeks";}; + "rick" = createHomeConfiguration { system = "aarch64-linux"; hostname = "rick";}; + "luci" = createHomeConfiguration { system = "x86_64-linux"; hostname = "luci";}; + "morty" = createHomeConfiguration { system = "x86_64-linux"; hostname = "morty";}; + "mrmeeseeks" = createHomeConfiguration { system = "x86_64-linux"; hostname = "mrmeeseeks";}; "work" = createHomeConfiguration { system = "x86_64-linux"; - hostname = "work"; + hostname = "work"; username = "yorick-barbanneau"; }; }; diff --git a/hosts/morty/home-config.nix b/hosts/morty/home-config.nix index afb756a..fc9bf9f 100644 --- a/hosts/morty/home-config.nix +++ b/hosts/morty/home-config.nix @@ -1,5 +1,12 @@ -{ ... }: { +{ inputs, ... }: { config.modules = { + email = { + enable = true; + accountConfigs = { + ubordeaux = inputs.nix-private.mail.ubordeaux; + }; + primary = "ubordeaux"; + }; application = { gnupg = { enable = true; diff --git a/modules/home-manager/accounts/email/default.nix b/modules/home-manager/accounts/email/default.nix new file mode 100644 index 0000000..71c7e11 --- /dev/null +++ b/modules/home-manager/accounts/email/default.nix @@ -0,0 +1,153 @@ +{ lib, config, pkgs, ... }: +with lib; +let + cfg = config.modules.email; +in +{ + options.modules.email = { + enable = mkEnableOption "Enable email accounts configuration"; + + accountConfigs = mkOption { + type = types.attrsOf types.attrs; + default = false; + description = "List of account variables used to create accounts"; + }; + + primary = mkOption { + type = types.str; + default = false; + description = "name of primary account"; + }; + }; + + config = mkIf cfg.enable { + accounts.email = let + defaultSetting = { + mbsync = { + enable = true; + create = "maildir"; + expunge = "both"; + }; + aerc = { + enable = true; + extraAccounts ={ + source = "notmuch://~/mail"; + maildir-store = "~/mail"; + default = "Inbox"; + postpone = "Drafts"; + copy-to = "Sent"; + use-envelope-from = true; + }; + }; + notmuch = { + enable = true; + }; + }; + accountsList = lib.mapAttrs ( name: value: lib.recursiveUpdate defaultSetting value.config ) cfg.accountConfigs; + in { + maildirBasePath = "mail"; + accounts = lib.recursiveUpdate accountsList { "${cfg.primary}".primary = true; }; + }; + + # programs.notmuch = { + # enable = true; + # new.tags = [ "new" ]; + # hooks.postNew = '' + # ${pkgs.afew}/bin/afew -t -n + # ${pkgs.afew}/bin/afew -w -n + # ''; + # }; + + programs.afew = { + enable = true; + extraConfig = '' + [FolderNameFilter] + folder_explicit_list = archives + folder_transforms = archives:archive + maildir_separator = / + [MailMover] + [SpamFilter] + [KillThreadsFilter] + [ArchiveSentMailsFilter] + sent_tag = sent + [InboxFilter] + ''; + }; + programs.aerc = { + enable = true; + extraConfig = { + general = { + unsafe-accounts-conf = true; + }; + ui = { + column-subject = '' + {{if .ThreadPrefix}}{{.Style (printf "%s " .ThreadPrefix) "thread"}}{{- end }}{{.Subject}} + ''; + column-flags = '' + {{.Flags | join " "}} + ''; + index-columns = '' + flags:5,name<20%,subject,date>= + ''; + thread-prefix-tip = "╼ "; + thread-prefix-indent = ""; + thread-prefix-stem = "│"; + thread-prefix-limb = "─"; + thread-prefix-folded = "+"; + thread-prefix-unfolded = ""; + thread-prefix-first-child = "┬"; + thread-prefix-has-siblings = "├"; + thread-prefix-orphan = "┬╼ "; + thread-prefix-dummy = "┬"; + thread-prefix-lone = " "; + thread-prefix-last-sibling = "╰"; + completion-popovers = true; + icon-attachment = "󰁦"; + icon-replied = ""; + icon-forwarded = ""; + icon-new = ""; + icon-old = ""; + icon-unencrypted = ""; + icon-encrypted = ""; + icon-signed = "󰏫"; + icon-signed-encrypted = ""; + icon-invalid = "󰏯"; + icon-unknown = "󰷭"; + threading-enabled = true; + }; + statusline = { + status-columns='' + left<*,right>* + ''; + column-left = '' + {{.Style (printf " %s " (toUpper .Account)) "statusline_account" }}\ + {{.Style (printf "  %s | 󰉉 %s " .Folder (humanReadable .Size)) "statusline_folder"}}\ + {{ if .ContentInfo }}{{.Style (printf " %s " .ContentInfo) "statusline_contentinfo"}}{{- end }} + ''; + column-center = '' + {{.Style .PendingKeys "statusline_center"}} + ''; + }; + filters = { + "text/plain" = " wrap -w 100 | colorize"; + "text/html" = "! html"; + "text/calendar" = "calendar"; + "message/delivery-status" = "colorize"; + "message/rfc822" = "colorize"; + ".headers" = "colorize"; + }; + }; + stylesets = { + default = (builtins.readFile ./files/default.theme); + }; + }; + programs.mbsync = { + enable = true; + }; + services.mbsync = { + enable = true; + postExec = "${pkgs.notmuch}/bin/notmuch new"; + package = config.programs.mbsync.package; + }; + }; +} diff --git a/modules/home-manager/accounts/email/files/default.theme b/modules/home-manager/accounts/email/files/default.theme new file mode 100644 index 0000000..6c8f522 --- /dev/null +++ b/modules/home-manager/accounts/email/files/default.theme @@ -0,0 +1,91 @@ +*.default=true +*.normal=true +border.fg=16 + +title.fg=5 +title.bg=0 + + +msglist_*.selected.bold=true +msglist_default.selected.bg=19 +msglist_default.selected.fg=7 + +msglist_flagged.italic=true + +msglist_marked.fg=0 +msglist_marked.bg=4 +msglist_marked.selected.fg=4 +msglist_marked.selected.bg= +msglist_marked.italic=true + +msglist_result.fg=0 +msglist_result.bg=3 +msglist_result.italic=true +msglist_result.selected.fg=3 +msglist_result.selected.bg= + +msglist_pill.bg=8 + +dirlist_*.selected.bold=true +dirlist_*.selected.bg=19 + +part_switcher.fg=7 +part_switcher.bg=19 +part_switcher.selected.bg=18 + +part_filename.bg=18 +part_filename.selected.bg=8 + +part_mimetype.bg=18 +part_mimetype.selected.bg=18 +part_mimetype.selected.dim=true + +statusline_error.fg=0 +statusline_error.bg=1 +statusline_error.bold=true + +statusline_success.fg=0 +statusline_success.bg=2 +statusline_success.bold=true + +completion_default.bg=18 +completion_default.fg=20 + +completion_description.bg=18 +completion_description.fg=20 + +completion_default.selected.fg=7 +completion_default.selected.bg=8 + +completion_description.selected.fg=7 +completion_description.selected.bg=8 + +selector_*.bg=18 + +tab.fg=15 +tab.bg=19 +tab.selected.fg=15 +tab.selected.bg=0 + +[viewer] +url.fg=4 +url.underline=true +header.fg=1 +header.bold=true +signature.dim=true +diff_meta.bold=true +diff_chunk.fg=#89b4fa +diff_chunk_func.fg=#89b4fa +diff_chunk_func.bold=true +diff_add.fg=#a6e3a1 +diff_del.fg=#f38ba8 +quote_*.fg=8 +quote_1.fg=17 + +[user] +thread.fg=1 +statusline_account.bg=4 +statusline_account.fg=0 +statusline_account.bold=true +statusline_folder.bg=18 +statusline_contentinfo.bg=19 diff --git a/modules/home-manager/accounts/email/files/ubordeaux.map b/modules/home-manager/accounts/email/files/ubordeaux.map new file mode 100644 index 0000000..0c29c2e --- /dev/null +++ b/modules/home-manager/accounts/email/files/ubordeaux.map @@ -0,0 +1,2 @@ +_Inbox=folder:ubordeaux/Inbox +_Sent=folder:ubordeaux/Sent diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index b17aa6f..ff73a9f 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -25,5 +25,6 @@ ./web/qutebrowser/default.nix ./web/webcord ./accounts/dav + ./accounts/email ]; } diff --git a/modules/home-manager/desktop/sway/includes/mako.nix b/modules/home-manager/desktop/sway/includes/mako.nix index 323e831..3b8d3df 100644 --- a/modules/home-manager/desktop/sway/includes/mako.nix +++ b/modules/home-manager/desktop/sway/includes/mako.nix @@ -15,16 +15,16 @@ with lib; enable = true; settings = { font = "Fira Code Nerd Font 10"; - backgroundColor = "#353535FF"; - borderColor = "#1CD180"; - progressColor = "over #5566AAFF"; - textColor = "#FDFDFD"; + background-color = "#353535"; + border-color = "#1CD180"; + progress-color = "over #5566AA"; + text-color = "#FDFDFD"; width = 300; height = 100; - borderRadius = 0; - borderSize = 2; + border-radius = 0; + border-size = 2; icons = true; - maxIconSize = 64; + max-icon-size = 64; layer = "overlay"; anchor = "top-right"; format = ''