diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..aa3f5f4 --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,14 @@ +# This example uses YAML anchors which allows reuse of multiple keys +# without having to repeat yourself. +# Also see https://github.com/Mic92/dotfiles/blob/master/nixos/.sops.yaml +# for a more complex example. +keys: + - &ephase 26D5035DF6B4BE70F2B51B4C178139E02D2ACF00 + - &luci age19kvatn3zpeqh9zy7u8ce0hqe7dyaesxrukewxt8u7pf4cqkj5dfqm5nlwy +creation_rules: + - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ + key_groups: + - age: + - *luci + pgp: + - *ephase diff --git a/flake.lock b/flake.lock index 0932201..da4e55b 100644 --- a/flake.lock +++ b/flake.lock @@ -56,26 +56,6 @@ "type": "github" } }, - "nix-private": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1754945619, - "narHash": "sha256-kcvY8kUakGwUUWvk6mgIbp5Xj2ABsjj0oBcKQ3MtjTM=", - "ref": "main", - "rev": "6878e000fef8449ed6d640436a3bc630fa8788b2", - "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", @@ -98,20 +78,6 @@ } }, "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=", @@ -126,7 +92,7 @@ "type": "indirect" } }, - "nixpkgs_3": { + "nixpkgs_2": { "locked": { "lastModified": 1748693115, "narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=", @@ -145,7 +111,7 @@ "nur": { "inputs": { "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_2", "treefmt-nix": "treefmt-nix" }, "locked": { @@ -165,9 +131,8 @@ "root": { "inputs": { "home-manager": "home-manager", - "nix-private": "nix-private", "nixgl": "nixgl", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "nur": "nur", "sops-nix": "sops-nix" } diff --git a/flake.nix b/flake.nix index 251eabc..84149e0 100644 --- a/flake.nix +++ b/flake.nix @@ -15,23 +15,20 @@ 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 = { @@ -43,7 +40,7 @@ ./nixos/default.nix ]; }; - + createHomeConfiguration = { system ? "x86_64-linux", hostname, username ? "ephase" }: home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { @@ -82,13 +79,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/home-manager/base.nix b/home-manager/base.nix new file mode 100644 index 0000000..2501587 --- /dev/null +++ b/home-manager/base.nix @@ -0,0 +1,4 @@ +_: +{ + +} diff --git a/hosts/morty/home-config.nix b/hosts/morty/home-config.nix index ae0d96c..afb756a 100644 --- a/hosts/morty/home-config.nix +++ b/hosts/morty/home-config.nix @@ -1,14 +1,5 @@ -{ inputs, ... }: { +{ ... }: { config.modules = { - email = { - enable = true; - accountConfigs = { - a = inputs.nix-private.mail.xiemeart; - b = inputs.nix-private.mail.ephase; - c = inputs.nix-private.mail.ubordeaux; - }; - primary = "a"; - }; application = { gnupg = { enable = true; @@ -25,10 +16,7 @@ git.enable = true; neovim.enable = true; starship.enable = true; - tmux = { - enable = true; - extraConfig = inputs.nix-private.tmux.personal; - }; + tmux.enable = true; utils.enable = true; vifm.enable = true; zellij.enable = true; diff --git a/hosts/morty/includes/home-manager.nix b/hosts/morty/includes/home-manager.nix index 9643c77..cad60ba 100644 --- a/hosts/morty/includes/home-manager.nix +++ b/hosts/morty/includes/home-manager.nix @@ -1,6 +1,6 @@ { ... }: { - home.file.".config/xkb/symbols/gpdwinmax".text = + home.file.".config/xkb/symbols/gpdwinmax".text = '' default partial alphanumeric_keys xkb_symbols "us-intl-winmax" { @@ -30,5 +30,4 @@ scale = "1.3"; }; }; - sops.age.keyFile = "/home/ephase/.config/sops/age/keys.txt"; } diff --git a/hosts/work/home-config.nix b/hosts/work/home-config.nix index 0712e15..94033f8 100644 --- a/hosts/work/home-config.nix +++ b/hosts/work/home-config.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, ... }: { +{ pkgs, ... }: { config.modules = { application = { zathura.enable = true; @@ -13,21 +13,20 @@ ghq.enable = true; git = { enable = true; - userEmail = inputs.nix-private.git.work.userEmail; - signingKey = inputs.nix-private.git.work.signingKey; - }; - k8s = { - enable = true; - kubectlPlugins = with pkgs; [ - kubectl-cnpg - ]; + userEmail = "ybarbanneau@sellsy.com"; + signingKey = "6E1A834E282FBD98B48069444447A19BBEDB8DBA"; + signByDefault = true; }; neovim.enable = true; starship.enable = true; tmux = { enable = true; - extraConfig = inputs.nix-private.tmux.work; + extraConfig = '' + bind -n M-F9 run 'create-tmux-session -n quipu -r quipuapp "run:nvim ." repo:quipu-infrastructure neww:quipu-infra p:sellsy hsplit:50 run:k9s repo:charts neww:charts' + bind -n M-F8 run 'create-tmux-session -n verifactu -r verifactu "run:nvim ." repo:verifactu-infrastructure neww:verifactu-infra repo:sellsy hsplit:50 run:k9s repo:charts neww:charts' + ''; }; + utils.enable = true; vifm.enable = true; zellij.enable = true; diff --git a/modules/home-manager/accounts/dav/default.nix b/modules/home-manager/accounts/dav/default.nix index ddb3f4a..1282443 100644 --- a/modules/home-manager/accounts/dav/default.nix +++ b/modules/home-manager/accounts/dav/default.nix @@ -1,23 +1,36 @@ -{ lib, config, inputs, pkgs, ... }: +{ lib, config, ... }: with lib; let - cfg = config.modules.dav; - secretsDirectory = "${(builtins.toString inputs.nix-private)}/secrets"; + cfg = config.modules.accounts.dav; vdirsyncerConf = { - enable = true; - auth = "basic"; + enable = true; + auth = "basic"; + userNameCommand = [ + "cat" + "${config.sops.secrets."webdav/username".path}" + ]; }; in { - options.modules.dav = { + options.modules.accounts.dav = { enable = mkEnableOption "enable personal Caldav / CardDav"; }; config = mkIf cfg.enable { - + + ## Manage secrets used in this module sops = { secrets = { - "${inputs.nix-private.dav.personal.secret.key}" = { - sopsFile = "${secretsDirectory}/${inputs.nix-private.dav.personal.secret.file}"; + "webdav/url/caldav" = { + sopsFile = ../../../../secrets/accounts.yaml; + }; + "webdav/url/carddav" = { + sopsFile = ../../../../secrets/accounts.yaml; + }; + "webdav/username" = { + sopsFile = ../../../../secrets/accounts.yaml; + }; + "webdav/password" = { + sopsFile = ../../../../secrets/accounts.yaml; }; }; }; @@ -25,15 +38,11 @@ in accounts.calendar.basePath = ".local/share/calendars"; accounts.calendar.accounts.personal_calendars = { name = "personal_calendar"; - remote = { - type = "caldav"; - url = inputs.nix-private.dav.personal.caldavUrl; - userName = inputs.nix-private.dav.personal.userName; - passwordCommand = [ - "${pkgs.coreutils}/bin/cat" - "${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}" - ]; - }; + remote.type = "caldav"; + remote.passwordCommand = [ + "cat" + "${config.sops.secrets."webdav/password".path}" + ]; vdirsyncer = vdirsyncerConf // { metadata = [ "color" @@ -43,6 +52,10 @@ in "VTODO" "VEVENT" ]; + urlCommand = [ + "cat" + "${config.sops.secrets."webdav/url/caldav".path}" + ]; collections = [ "from a" "from b" @@ -57,23 +70,22 @@ in accounts.contact.basePath = ".local/share/contacts"; accounts.contact.accounts.personal_contacts = { - remote = { - type = "carddav"; - url = inputs.nix-private.dav.personal.carddavUrl; - userName = inputs.nix-private.dav.personal.userName; - passwordCommand = [ - "${pkgs.coreutils}/bin/cat" - "${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}" - ]; - }; - local = { - type = "filesystem"; - fileExt = ".vcf"; - }; + remote.type = "carddav"; + remote.passwordCommand = [ + "cat" + "${config.sops.secrets."webdav/password".path}" + ]; + local.type = "filesystem"; + local.fileExt = ".vcf"; vdirsyncer = vdirsyncerConf // { + metadata = [ "displayname" ]; + urlCommand = [ + "cat" + "${config.sops.secrets."webdav/url/carddav".path}" + ]; }; khal = { enable = true; diff --git a/modules/home-manager/accounts/email/default.nix b/modules/home-manager/accounts/email/default.nix deleted file mode 100644 index 0f9b089..0000000 --- a/modules/home-manager/accounts/email/default.nix +++ /dev/null @@ -1,252 +0,0 @@ -{ lib, config, pkgs, inputs, ... }: -with lib; -let - cfg = config.modules.email; - secretsDirectory = "${(builtins.toString inputs.nix-private)}/secrets"; -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 { - sops = let - secretList = lib.mapAttrs' ( name: value: - nameValuePair ( value.secret.key ) ({ - sopsFile = "${secretsDirectory}/${value.secret.file}"; - }) - ) cfg.accountConfigs; - in { - secrets = secretList; - }; - accounts.email = let - defaultSetting = { - mbsync = { - enable = true; - create = "both"; - expunge = "both"; - remove = "both"; - patterns = [ - "*" - # Trash is a pain in the ass to manage with notmuch - "!Trash" - ]; - }; - msmtp = { - enable = true; - }; - notmuch = { - enable = true; - }; - neomutt = { - enable = true; - showDefaultMailbox = false; - }; - }; - accountsList = lib.mapAttrs ( name: value: lib.recursiveUpdate defaultSetting value.config ) cfg.accountConfigs; - in { - maildirBasePath = "mail"; - accounts = lib.recursiveUpdate accountsList { "${cfg.primary}".primary = true; }; - }; - - programs.afew = let - mailMoverRules = lib.mergeAttrsList ( - lib.attrsets.mapAttrsToList ( - n: v: - if lib.hasAttrByPath ["afew" "mailMover"] v then - v.afew.mailMover - else {} - ) cfg.accountConfigs); - mailFilterRules = lib.flatten ( - lib.attrsets.mapAttrsToList ( - n: v: - if lib.hasAttrByPath ["afew" "filters"] v then - v.afew.filters - else [] - ) cfg.accountConfigs); - in { - enable = true; - extraConfig = '' - [FolderNameFilter] - folder_explicit_list = archives - folder_transforms = archives:archived - maildir_separator = / - [MailMover] - folders = ${lib.concatStringsSep " " (lib.unique (lib.mapAttrsToList (n: v: "${n}") mailMoverRules))} - rename = True - ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n} = ${toString v}") mailMoverRules)} - [SpamFilter] - [KillThreadsFilter] - [ArchiveSentMailsFilter] - sent_tag = sent - ${lib.concatImapStrings (p: e: "\n\n[Filter.${toString p}]\n ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n} = ${v}") e)}") mailFilterRules} - [InboxFilter] - ''; - }; - programs.neomutt = let - accountMacros = lib.imap1 ( - i: - elem: elem // { - map = ["index" "pager"]; - key = ""; - }) ( - lib.attrsets.mapAttrsToList ( - n: c: - { "action" = "source ~/.config/neomutt/${n}Unread:${c.config.address}";} - ) cfg.accountConfigs); - in { - enable = true; - unmailboxes = true; - changeFolderWhenSourcingAccount = true; - sourcePrimaryAccount = false; - editor = "nvim +/^$/ +':nohl'"; - settings = { - sleep_time = "1"; - mbox_type = "Maildir"; - header_color_partial = "yes"; - duplicate_threads = "yes"; - index_format = "'%4C| %24.24?GS?%F %GS &%F? %?GR?%GR &%?GU?%GU & ??%?GA?%GA & ?%?GE?%GE & ?%?M?󰘕 %s&%s? %* %?g?  %g? %<[y?%<[m?%<[d?%9[%H:%M ]&%9[%a %d ]>&%9[%b %d ]>&%9[%m/%y ]>'"; - sort_aux = "last-date-sent"; - mail_check = "120"; - hidden_tags = "inbox,unread,draft,flagged,passed,replied,signed,encrypted,attachment,sent"; - markers = "no"; - wrap = "90"; - smart_wrap = "yes"; - reflow_text = "yes"; - reflow_wrap = "90"; - text_flowed = "yes"; - search_context = "3"; - pager_context = "5"; - pager_index_lines = "10"; - rfc2047_parameters = "yes"; - edit_headers = "yes"; - send_charset = "utf-8"; - envelope_from = "yes"; - my_status = "' %o/%m  | %l 󰉉 | %f %* Sort: %s-%S Pos: %P '"; - my_pager = "'  %F |  %s %* Pos: %P '"; - compose_format = "' COMPOSE  %a | 󰉉 %l'"; - query_command = "'${pkgs.khard}/bin/khard email --parsable --search-in-source-files %s'"; - virtual_spoolfile = "yes"; - mail_check_stats = "yes"; - mh_purge = "yes"; - mailcap_path= "${config.xdg.configHome}/neomutt/mailcap"; - }; - extraConfig = '' - ${(builtins.readFile ./files/theme.muttrc)} - charset-hook ^iso-8859-1$ cp1252 - ignore * - - unignore from date subject to cc bcc tags user-agent x-mailer - - # Attachment - auto_view text/x-vcard text/html text/enriched text/calendar - alternative_order text/html text/enriched text/plain text/* - - tag-transforms "attachment" "󰁦" \ - "encrypted" "󱧈" \ - "signed" "󱅞" \ - "unread" "" \ - "replied" "" - tag-formats "attachment" "GA" \ - "encrypted" "GE" \ - "signed" "GS" \ - "unread" "GU" \ - "replied" "GR" - - ${lib.concatStrings (lib.attrsets.mapAttrsToList ( _: v: if lib.hasAttrByPath [ "neomuttHooks" ] v then v.neomuttHooks else "" ) cfg.accountConfigs)} - # manually source first account instead of use home-manager parameter because - # of $my_pager expansion does not work as this variable is not already set - source ${config.xdg.configHome}/neomutt/${cfg.primary} - ''; - binds = [ - { map = [ "attach" "browser" "index" "pager" ]; key = "g"; action = "noop"; } - { map = [ "attach" "browser" "index" "pager" ]; key = "G"; action = "noop"; } - { map = [ "index" ]; key = "q"; action = "noop";} - { map = [ "pager" ]; key = "Q"; action = "noop";} - { map = [ "attach" "browser" "index" ]; key = "gg"; action = "first-entry";} - { map = [ "attach" "browser" "index" ]; key = "G"; action = "last-entry";} - { map = [ "pager" ]; key = "gg"; action = "top"; } - { map = [ "pager" ]; key = "G"; action = "bottom"; } - { map = [ "pager" ]; key = "k"; action = "previous-line"; } - { map = [ "pager" ]; key = "j"; action = "next-line"; } - - # Scrolling - { map = [ "attach" "browser" "pager" "index" ]; key = "\\CF"; action = "next-page";} - { map = [ "attach" "browser" "pager" "index" ]; key = "\\CB"; action = "previous-page";} - { map = [ "attach" "browser" "pager" "index" ]; key = "\\Cu"; action = "half-up";} - { map = [ "attach" "browser" "pager" "index" ]; key = "\\Cd"; action = "half-down";} - { map = [ "browser" "pager" ]; key = "\\Ce"; action = "next-line";} - { map = [ "browser" "pager" ]; key = "\\Cy"; action = "previous-line";} - { map = [ "index" ]; key = "\\Ce"; action = "next-line";} - { map = [ "index" ]; key = "\\Cy"; action = "previous-line";} - - # Reply - { map =[ "pager" "index" ]; key = "R"; action = "group-reply";} - - # sidebar - { map = [ "index" "pager" ]; key = ""; action = "sidebar-toggle-visible";} - { map = [ "index" "pager" ]; key = "{"; action = "sidebar-prev";} - { map = [ "index" "pager" ]; key = "}"; action = "sidebar-next";} - { map = [ "index" "pager" ]; key = "|"; action = "sidebar-open";} - - # open virtual folder - { map = [ "index" "pager" ]; key = "X"; action = "noop";} - { map = [ "index" "pager" ]; key = "X"; action = "change-vfolder";} - - # read entire thread of the current message - { map = [ "index" "pager" ]; key = "+"; action = "entire-thread";} - - # generate virtual folder from query - { map = [ "index" "pager" ]; key = "\\eX"; action = "vfolder-from-query";} - - # generate virtual folder from query with time window - - { map = [ "index" "pager" ]; key = "\\CD"; action = "modify-tags";} - - # Editor - { map = [ "editor" ]; key = ""; action = "complete-query";} - { map = [ "editor" ]; key = "^T"; action = "complete";} - ]; - macros = [ - { map = [ "pager" ]; key = "\\CB"; action = "${pkgs.urlscan}/bin/urlscan -d -c --color true"; } - ] ++ accountMacros; - }; - programs.mbsync = { - enable = true; - }; - services.mbsync = { - enable = true; - postExec = "${pkgs.notmuch}/bin/notmuch new"; - }; - programs.notmuch = { - enable = true; - new.tags = [ "new" ]; - hooks.postNew = '' - ${pkgs.afew}/bin/afew --tag --new - ${pkgs.afew}/bin/afew --move --all - ''; - }; - programs.msmtp = { - enable = true; - }; - home.file."${config.xdg.configHome}/urlscan/config.json".source = ./files/urlscan.config.json; - xdg.configFile."neomutt/mailcap".text = '' - text/html; ${pkgs.xdg-utils}/bin/xdg-open %s; nametemplate=%html - text/html; ${pkgs.w3m}/bin/w3m -I %{charset} -cols 90 -T text/html %s; copiousoutput - application/pdf; ${pkgs.xdg-utils}/bin/xdg-open %s & - image/*; ${pkgs.xdg-utils}/bin/xdg-open %s & - ''; - }; -} diff --git a/modules/home-manager/accounts/email/files/theme.muttrc b/modules/home-manager/accounts/email/files/theme.muttrc deleted file mode 100644 index e3e0baa..0000000 --- a/modules/home-manager/accounts/email/files/theme.muttrc +++ /dev/null @@ -1,122 +0,0 @@ -# vi: ft=muttrc - -## Base -color normal color20 default # softer, bold - -## Weak -color tilde color08 default # `~` padding at the end of pager -color attachment color08 default -color tree color01 default # arrow in threads -color signature color08 default -color markers color08 default # `+` wrap indicator in pager - -color underline color21 default - -color error color01 default -color message color04 default # informational messages -color search color08 color03 -color status color20 color18 -color indicator color21 color19 # inverse, brighter - -color status color00 color06 ' Pos: ([[:alnum:]]|%)+ ' -color status color20 color19 ' Sort: ([[:alpha:]]|-)+ ' - -# Message Index ---------------------------------------------------------------- - -## Index parts -color index_number color20 default -color index_author color20 default -color index_date color20 default -color index_flags color20 default -color index_tag color20 default -color index_tags italic color08 default - -color index_author italic color06 default "~g !~V" -color index_author color04 default "~g ~V" - -color index_subject color04 default "~G" - -color index_date color08 default - -color index_number color08 default -color index_subject bold color07 default "(~U|~N|~O)" - -color index_author italic color00 color06 "~T" -color index_subject italic color00 color06 "~T" -color index_date italic color00 color06 "~T" -color index_tags italic color00 color06 "~T" -color index_tag italic color00 color06 "~T" - -color index_subject color01 color18 "~D" # deleted messages - -color index_subject italic bold color00 default "~T (~U|~N|~O)" - -## Weak -color index color01 default "~v~(~F)" # collapsed thread with flagged inside - -# Selection -color index italic color00 color06 "~T" # tagged messages -color index default color18 "~D" # deleted messages - -### Message Headers ---------------------------------------------------- - -# Base -set header_color_partial -hdr_order From Date: From: To: Cc: Subject: - -color header color04 default '^[^[:blank:]:]*:' -color hdrdefault color20 default -color header color17 default "^[Date:] (.*)" -color header color04 default "^From:" -color header color05 default "^Tags:" -color header color16 default "^(To|Cc|CC|BCC):" -color header brightcolor07 default "^Subject: (.*)" - -color header color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" - -### Message Body ------------------------------------------------------- -# When possible, these regular expressions attempt to match http://spec.commonmark.org/ -## Weak -# ~~~ Horizontal rules ~~~ -color body color08 default "([[:space:]]*[-+=#*~_]){3,}[[:space:]]*" - -# *Bold* span -color body brightcolor03 default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" - -# _Underline_ span -color body underline color20 default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" - -# /Italic/ span (Sometimes gets directory names) -color body italic color20 default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" - -# ATX headers -color body color04 default "^[[:space:]]{0,3}#+[[:space:]].*$" - -# `Code` span -color body color05 default "(^|[[:space:][:punct:]])\`[^\`]+\`([[:space:][:punct:]]|$)" - -color body bold color01 default "^(\\*[[:space:]])" - -## URI -color body italic color04 color00 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" -# Email addresses -color body color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" - -# Emoticons ;-P -color body black yellow "[;:][-o]?[})>{(<|P]" - -# PGP -color body color02 default "(Good signature)" -color body color01 default "(Bad signature)" -color body color16 default "(Problem signature)" -color body color04 color00 "^gpg: " - -## Quotation blocks -color quoted color06 color00 -color quoted1 color02 color00 -color quoted2 color03 color00 -color quoted3 color16 color00 -color quoted4 color01 color00 -color quoted5 color17 color00 -color quoted6 color05 color00 -color quoted7 color04 color00 diff --git a/modules/home-manager/accounts/email/files/urlscan.config.json b/modules/home-manager/accounts/email/files/urlscan.config.json deleted file mode 100644 index 961c5ce..0000000 --- a/modules/home-manager/accounts/email/files/urlscan.config.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "palettes": { - "default": [ - [ "header", "white", "dark blue", "standout", "#d8d8d8", "#383838" ], - [ "footer", "white", "dark red", "standout", "#d8d8d8", "#383838" ], - [ "search", "white", "dark green", "standout", "#282828", "#f7ca88" ], - [ "msgtext", "", "", "", "", "" ], - [ "msgtext:ellipses", "light gray", "black", "bold", "#f7ca88", "#383838" ], - [ "urlref:number:braces", "light gray", "black", "bold", "#f8f8f8", "#383838"], - [ "urlref:number","yellow", "black","bold", "#f7ca88", "#383838" ], - [ "urlref:url", "white", "black", "italics", "#7cafc2", "#181818" ], - [ "url:sel", "white", "dark blue", "underline", "#7cafc2", "#383838" ] - ] - - }, - "keys": { - "/": "search_key", - "0": "digits", - "1": "digits", - "2": "digits", - "3": "digits", - "4": "digits", - "5": "digits", - "6": "digits", - "7": "digits", - "8": "digits", - "9": "digits", - "a": "add_url", - "C": "clipboard", - "c": "context", - "ctrl l": "clear_screen", - "ctrl f": "page_down", - "ctrl b": "page_up", - "d": "del_url", - "f1": "help_menu", - "G": "bottom", - "g": "top", - "j": "down", - "k": "up", - "J": "next", - "K": "previous", - "P": "clipboard_pri", - "l": "link_handler", - "o": "open_queue", - "O": "open_queue_win", - "p": "palette", - "Q": "quit", - "q": "quit", - "R": "reverse", - "S": "all_shorten", - "s": "shorten", - "u": "all_escape" - } -} diff --git a/modules/home-manager/cli/git/default.nix b/modules/home-manager/cli/git/default.nix index fc1236b..520adcb 100644 --- a/modules/home-manager/cli/git/default.nix +++ b/modules/home-manager/cli/git/default.nix @@ -1,4 +1,4 @@ -{ lib, config, pkgs, inputs, ... }: +{ lib, config, pkgs, ... }: with lib; let cfg = config.modules.cli.git; @@ -15,19 +15,19 @@ in userEmail = mkOption { type = types.str; - default = inputs.nix-private.git.personal.userEmail; + default = "ephase@xieme-art.org"; description = "git email"; }; signingKey = mkOption { type = types.nullOr types.str; - default = inputs.nix-private.git.personal.signingKey; + default = null; description = "signing key fingerprint"; }; signByDefault = mkOption { type = types.bool; - default = true; + default = false; description = "activate signing by default"; }; }; @@ -68,13 +68,6 @@ in autoSetupRemote = true; default = "current"; }; - diff = { - algorithm = "histogram"; - colorMoved = "plain"; - mnemonicPrefix = true; - renames = true; - }; - commit.verbose = true; }; }; }; diff --git a/modules/home-manager/cli/k8s/default.nix b/modules/home-manager/cli/k8s/default.nix deleted file mode 100644 index 7afaf2c..0000000 --- a/modules/home-manager/cli/k8s/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ lib, config, pkgs, ... }: -with lib; -let - cfg = config.modules.cli.k8s; -in -{ - options.modules.cli.k8s = { - enable = mkEnableOption "Install k8s utils"; - - kubectlPlugins = mkOption { - type = types.listOf types.package; - default = []; - description = "activate signing by default"; - }; - }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ - kubectl - kubecm - ] ++ cfg.kubectlPlugins; - programs.k9s = { - enable = true; - }; - }; -} diff --git a/modules/home-manager/cli/starship/default.nix b/modules/home-manager/cli/starship/default.nix index cc8ff84..65db136 100644 --- a/modules/home-manager/cli/starship/default.nix +++ b/modules/home-manager/cli/starship/default.nix @@ -12,7 +12,7 @@ in enable = true; enableZshIntegration = true; settings = { - format = "$username$hostname$directory$kubernetes$git_branch$git_state$git_status$cmd_duration$line_break$python$nix_shell$character"; + format = "$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$fill$kubernetes$line_break$python$nix_shell$character"; directory = { style = "blue"; truncate_to_repo = false; @@ -59,10 +59,13 @@ in style = "bright-black"; }; kubernetes = { - format = "[$symbol$cluster ]($style)"; - symbol = ""; - style = "dimmed blue"; + format = "[|$symbol$cluster| ]($style)"; + style = "yellow"; disabled = false; + detect_folders = [ + "clusters" + "deploy" + ]; }; fill = { symbol = " "; diff --git a/modules/home-manager/cli/tmux/default.nix b/modules/home-manager/cli/tmux/default.nix index 1ff3293..dbb44f4 100644 --- a/modules/home-manager/cli/tmux/default.nix +++ b/modules/home-manager/cli/tmux/default.nix @@ -1,5 +1,5 @@ -{ lib, config, pkgs, inputs, ... }: +{ lib, config, pkgs, ... }: with lib; let cfg = config.modules.cli.tmux; @@ -51,6 +51,9 @@ in bind -n M-F3 if 'tmux has-session -t 3' {switch-client -t 3} {display-popup -E -E 'create-tmux-session -i 3'} bind -n M-F4 if 'tmux has-session -t 4' {switch-client -t 4} {display-popup -E -E 'create-tmux-session -i 4'} + # Alt+F10 for launching my Nix project + bind -n M-F10 run 'create-tmux-session -n config -r nix "run:nvim ." vsplit:20' + # change window with Alt+{1..5} bind -n -N "Goto window 1" M-1 select-window -T -t 1 bind -n -N "Goto window 2" M-2 select-window -T -t 2 @@ -71,21 +74,18 @@ in setw -g window-status-current-format '#[fg=colour18,bg=colour11] #I\ #[bg=colour19,fg=colour7,bold] #W\ - #{?window_active,󰎂 ,}#{?window_marked_flag,󰃃 ,}#{?window_activity_flag, ,}#{?window_silence_flag,󰝟 ,}#{?window_zoomed_flag,󱀅 ,}' + #{?window_active,󰎂 ,}#{?window_marked_flag,󰃃 ,}#{?window_activity_flag, ,}#{?window_silence_flag,󰝟 ,}#{?window_zoomed_flag,󱀅 ,}#{?window_bell_flag,#[fg=colour1]󱈸 ,}' set -g pane-border-style fg=colour19 set -g pane-active-border-style fg=colour4 setw -g window-status-format '#[bg=color12,fg=colour19] #I\ #[bg=colour18,fg=colour7,dim] #W\ - #{?window_last_flag, ,}#{?window_marked_flag,󰃃 ,}#{?window_activity_flag, ,}#{?window_silence_flag,󰝟 ,}#{?window_zoomed_flag,󱀅 ,}#{?window_bell_flag,#[bg=colour1]#[fg=colour15]#[none] ,}' - setw -g window-status-bell-style bg=colour18,fg=colour7 + #{?window_last_flag, ,}#{?window_marked_flag,󰃃 ,}#{?window_activity_flag, ,}#{?window_silence_flag,󰝟 ,}#{?window_zoomed_flag,󱀅 ,}#{?window_bell_flag,#[fg=colour1]󱈸 ,}' set -g status-left-length 100 set -g status-left '#[bg=colour0, fg=colour6]  #S ' set -g status-right ' ' - '' - + inputs.nix-private.tmux.nix - + cfg.extraConfig; + '' + cfg.extraConfig; plugins = with pkgs; [ tmuxPlugins.tmux-fzf ]; diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index ff73a9f..8ca3f0b 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -9,7 +9,6 @@ ./cli/direnv ./cli/ghq/default.nix ./cli/git - ./cli/k8s ./cli/neovim ./cli/starship ./cli/tmux @@ -25,6 +24,5 @@ ./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 3b8d3df..323e831 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"; - background-color = "#353535"; - border-color = "#1CD180"; - progress-color = "over #5566AA"; - text-color = "#FDFDFD"; + backgroundColor = "#353535FF"; + borderColor = "#1CD180"; + progressColor = "over #5566AAFF"; + textColor = "#FDFDFD"; width = 300; height = 100; - border-radius = 0; - border-size = 2; + borderRadius = 0; + borderSize = 2; icons = true; - max-icon-size = 64; + maxIconSize = 64; layer = "overlay"; anchor = "top-right"; format = '' diff --git a/secrets/accounts.yaml b/secrets/accounts.yaml new file mode 100644 index 0000000..f1d11e4 --- /dev/null +++ b/secrets/accounts.yaml @@ -0,0 +1,46 @@ +webdav: + url: + caldav: ENC[AES256_GCM,data:UMoSLlEhxtJ/80wIQlGaqfu/OI4JXodSLYySwAyJJg==,iv:WTGZ8mq3huVEPMNOBDGdghy994Z5vCzvVDMvp5djnlw=,tag:s34QZVjqvNiQT/P9SVCeUw==,type:str] + carddav: ENC[AES256_GCM,data:oGLZ4c02b4wiYCqhyQzC1NG210BUpSpSqibi7xvtIjHhW/X4wvYU5QPm2VKCrJYpvqIEeiah1TDwvByqLpBz5d8Ucyme,iv:cwaWTvdS5eEGmwm5+n2N31ajzAXPix4woXECUqXtk3E=,tag:jRK3viRDzwd5JmNh6UVt2A==,type:str] + username: ENC[AES256_GCM,data:Z/QVE3Di,iv:pRBgv/K+VzbF5/iaftTDoxZWjvVztPznLJ5LKpKQaoM=,tag:rCw9mLFtzhpp5vO5eVKqvA==,type:str] + password: ENC[AES256_GCM,data:X7hjL2VczjPGKF4n2g==,iv:BwqXZ3h+EIHU+Cvx8gDYhgd2NiBkednUz+ksp40sYas=,tag:ngbtcYsfOxvTTcftBE+lMg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age19kvatn3zpeqh9zy7u8ce0hqe7dyaesxrukewxt8u7pf4cqkj5dfqm5nlwy + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJRk1KamJ3clA4QTBZT3BL + blZGaVNQb2tWMTkrWUxicm9PdXV6RTJJbXh3ClJJQTJON3BBRGJ4RWg1UnRQNVoy + bFllM0E1djlOUTVRQ1lZc1JEQS9YNXcKLS0tIEhac3FpUVd6TW9pbUMyNlAzbk5P + dGZkOExNbTRuS0NvaDgzUmlFRVNvckEK7PSVxtaDd/3yWIIuAMcX586imRu/On09 + duwFZ5btOY2fxNYgV9sCG7Vr+OGCO8n9OWBS9hLy7MJwAzi/f5l7Fg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-07-20T16:25:53Z" + mac: ENC[AES256_GCM,data:4vNjXD26LeHv00B4gDumkUzq7Us9HRWv79Wq3iyTeDjKOXw9lluIQIZsDB1aQS90dTNCEvlbZ6pt1oHRqGySpDcKHId6rsUy9qkeLl683haKKilT47ABpGiMd2sY6xL1FQPiXMH4qc7wxh+EuS0N6Y+mgIY9Kn0qP6ion1s/lqs=,iv:JZ5lnJKBXQeKadihHyItueHDO6zULVMLSPmGCe+Qlz4=,tag:+bh08XI2TWov6yQJ1+KtoA==,type:str] + pgp: + - created_at: "2024-06-24T20:12:19Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hQIMA9/d8qUtz+3ZAQ/7BoojnrnGgF4TEnFTJMWVy229Cx1knABVot45A1frFWmS + kwIGPGQPlCjGF4tyIOmBy8WpQWBuKffYakCC/OklHCyfnLjsyhcR+MSqDVzqMmy3 + dEThTcGPRCerM1Mu8oWPk0yq5AKzuJagr9+4ITrljsh6tRwA4qmfKxQ6BZhGPQHJ + 3FZwcQHfaDkuag3o5swNKHX//MIZwEDyXJHKgeTUPhENzc0POdjPU5CZN0HBU4ep + 98PJAlAiDKyYSQkg1MfOWvCllyfvhGPzTLEPq5jazqpc7lgNKxJGU5kTnUUi2fKS + gCJdqRlMBO/3S8wUZg0gIsw1+OwmfL0y99MeMP1ggGaqFkGs6Pqj7sRd6/QcuP0l + w2QZgB9S6DOUkfy5m5Xw7VboE2aAX4BOrWNJVDy//358322xxuqZdbp3pIjnsmt/ + b2gTZb1eGK/o5GmXfgzCf7In1b3wldg/ZSHyxGct1CJIgNBb1nFDMmyVI9J5zER0 + 2ZTflNfN/cxttW2BvGRoL3fWXnO+ThLHz1q1WWWCOC7TLTnESOtAueSCTlrMcij/ + 7zL7Wc98JgdAuxhznMjiYqY9nZK48jhBCBOdC0uool/FNElcStUaOq1O3HRo5qoi + s277Wqtp0uZqeLBxgNEGwicEDm9BbrVzH9egYGMaPJI6STIJYduJXBegnPf5KFXS + XgHTJyK7u9MrZ58kkiT95455NEqQd27JMqmsGwReX6/LpYs5KJJGT4qGNab8GM5A + VMniFb1GOXIOxSbYgfkgaHc+zK43O5UwBwegOneTC6ak/CQYvD9xQS94FKqwF10= + =7pZ/ + -----END PGP MESSAGE----- + fp: 26D5035DF6B4BE70F2B51B4C178139E02D2ACF00 + unencrypted_suffix: _unencrypted + version: 3.8.1