Compare commits
16 commits
8d043978a2
...
3885f59083
| Author | SHA1 | Date | |
|---|---|---|---|
| 3885f59083 | |||
| f1c0789571 | |||
| c4ce3cf246 | |||
| 0d59442168 | |||
| 65b164997a | |||
| 53efeef9c4 | |||
| 8c684af604 | |||
| 370d124efc | |||
| 9d0eba39ba | |||
| f0707aacdd | |||
| 0f31a3e560 | |||
| 49b169f473 | |||
| efa99d6331 | |||
| 2e7fa6eb14 | |||
| 57a942b525 | |||
| 853d6aaa17 |
19 changed files with 374 additions and 138 deletions
134
flake.lock
generated
134
flake.lock
generated
|
|
@ -10,11 +10,11 @@
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745630506,
|
"lastModified": 1762618334,
|
||||||
"narHash": "sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus=",
|
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
|
||||||
"owner": "ryantm",
|
"owner": "ryantm",
|
||||||
"repo": "agenix",
|
"repo": "agenix",
|
||||||
"rev": "96e078c646b711aee04b82ba01aefbff87004ded",
|
"rev": "fcdea223397448d35d9b31f798479227e80183f6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -68,11 +68,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746695594,
|
"lastModified": 1763651264,
|
||||||
"narHash": "sha256-pAAWYs3S+/tY65vemHZdVSXpeIz4JINEJZoPoBjr8JU=",
|
"narHash": "sha256-8vvwZbw0s7YvBMJeyPVpWke6lg6ROgtts5N2/SMCcv4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "6bb82b77ce140137177e30df067759931ab60a73",
|
"rev": "e86a89079587497174ccab6d0d142a65811a4fd9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -105,11 +105,11 @@
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1696426674,
|
"lastModified": 1747046372,
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -121,11 +121,11 @@
|
||||||
"flake-compat_2": {
|
"flake-compat_2": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1696426674,
|
"lastModified": 1761588595,
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -152,6 +152,32 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"git-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": [
|
||||||
|
"snm",
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"gitignore": "gitignore_2",
|
||||||
|
"nixpkgs": [
|
||||||
|
"snm",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1763319842,
|
||||||
|
"narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"gitignore": {
|
"gitignore": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -173,6 +199,28 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gitignore_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"snm",
|
||||||
|
"git-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -201,11 +249,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746719124,
|
"lastModified": 1763906693,
|
||||||
"narHash": "sha256-KOL73WIjO00ds1oIe+5HAcGcpd/TfE6dymmmYbiSlYM=",
|
"narHash": "sha256-inm7paa3myo8gE4TzjM8OPvsEg8xocWreIZBgBPEKgo=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "3c59c5132b64e885faca381e713b579dcbddba75",
|
"rev": "3d6c1c8fa0bea3a1a7ba23d6fa5993116766073b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -286,11 +334,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746461020,
|
"lastModified": 1763678758,
|
||||||
"narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=",
|
"narHash": "sha256-+hBiJ+kG5IoffUOdlANKFflTT5nO3FrrR2CA3178Y5s=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae",
|
"rev": "117cc7f94e8072499b0a7aa4c52084fa4e11cc9b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -300,21 +348,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-24_11": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1734083684,
|
|
||||||
"narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "nixpkgs",
|
|
||||||
"ref": "nixos-24.11",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-docs": {
|
"nixpkgs-docs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1705957679,
|
"lastModified": 1705957679,
|
||||||
|
|
@ -365,17 +398,18 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732014248,
|
"lastModified": 1763553727,
|
||||||
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
|
"narHash": "sha256-4aRqRkYHplWk0mrtoF5i3Uo73E3niOWiUZU8kmPm9hQ=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
|
"rev": "094318ea16502a7a81ce90dd3638697020f030a2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"id": "nixpkgs",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable-small",
|
||||||
"type": "indirect"
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nmd": {
|
"nmd": {
|
||||||
|
|
@ -441,11 +475,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746537231,
|
"lastModified": 1763741496,
|
||||||
"narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=",
|
"narHash": "sha256-uIRqs/H18YEtMOn1OkbnPH+aNTwXKx+iU3qnxEkVUd0=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "pre-commit-hooks.nix",
|
"repo": "pre-commit-hooks.nix",
|
||||||
"rev": "fa466640195d38ec97cf0493d6d6882bc4d14969",
|
"rev": "20e71a403c5de9ce5bd799031440da9728c1cda1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -488,15 +522,15 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"blobs": "blobs",
|
"blobs": "blobs",
|
||||||
"flake-compat": "flake-compat_2",
|
"flake-compat": "flake-compat_2",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"git-hooks": "git-hooks",
|
||||||
"nixpkgs-24_11": "nixpkgs-24_11"
|
"nixpkgs": "nixpkgs_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746637515,
|
"lastModified": 1763564778,
|
||||||
"narHash": "sha256-bUq2uHmsfY3SpJrR4dpncITykufTiD2320JsOKgIYl0=",
|
"narHash": "sha256-HSWMOylEaTtVgzIjpTbjcjVLXHDwNyV081eVUBfAcMs=",
|
||||||
"owner": "simple-nixos-mailserver",
|
"owner": "simple-nixos-mailserver",
|
||||||
"repo": "nixos-mailserver",
|
"repo": "nixos-mailserver",
|
||||||
"rev": "a7d2b05a9920d90f5eb8076f449acdb6c1ad79ca",
|
"rev": "4987d275a90392347f84923cd4cd8efcf0aa7a22",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -508,11 +542,11 @@
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746557022,
|
"lastModified": 1751274312,
|
||||||
"narHash": "sha256-QkNoyEf6TbaTW5UZYX0OkwIJ/ZMeKSSoOMnSDPQuol0=",
|
"narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1d3aeb5a193b9ff13f63f4d9cc169fb88129f860",
|
"rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
14
flake.nix
14
flake.nix
|
|
@ -28,16 +28,6 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs-droid";
|
inputs.nixpkgs.follows = "nixpkgs-droid";
|
||||||
};
|
};
|
||||||
|
|
||||||
# emacs = {
|
|
||||||
# url = "github:nix-community/emacs-overlay";
|
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# simplex-chat = {
|
|
||||||
# url = "github:simplex-chat/simplex-chat";
|
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
# };
|
|
||||||
|
|
||||||
# age for nix to store encrypted passwords conveniently
|
# age for nix to store encrypted passwords conveniently
|
||||||
agenix = {
|
agenix = {
|
||||||
url = "github:ryantm/agenix";
|
url = "github:ryantm/agenix";
|
||||||
|
|
@ -129,6 +119,10 @@
|
||||||
modules = [ ./hosts/igor ];
|
modules = [ ./hosts/igor ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
homeConfigurations."alex@dregil" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
nixOnDroidConfigurations.default =
|
nixOnDroidConfigurations.default =
|
||||||
with inputs;
|
with inputs;
|
||||||
nix-on-droid.lib.nixOnDroidConfiguration {
|
nix-on-droid.lib.nixOnDroidConfiguration {
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,16 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ssh.enable = true;
|
ssh = {
|
||||||
|
enable = true;
|
||||||
|
enableDefaultConfig = false;
|
||||||
|
matchBlocks = {
|
||||||
|
"*" = {
|
||||||
|
controlMaster = "auto";
|
||||||
|
controlPersist = "10m";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
texlive.enable = true;
|
texlive.enable = true;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,6 @@
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
electron-overlay = final: prev: { electron = final.electron_25; };
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [ ];
|
imports = [ ];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,19 +9,19 @@
|
||||||
imports = [
|
imports = [
|
||||||
./cli.nix
|
./cli.nix
|
||||||
./programs/rofi
|
./programs/rofi
|
||||||
./programs/xmonad
|
# ./programs/xmonad
|
||||||
# ./programs/i3
|
# ./programs/i3
|
||||||
./programs/jitsi-meet
|
./programs/jitsi-meet
|
||||||
./programs/simplex-chat
|
./programs/simplex-chat
|
||||||
./programs/zathura
|
./programs/zathura
|
||||||
./programs/autorandr
|
./programs/autorandr
|
||||||
./services/polybar
|
# ./services/polybar
|
||||||
./services/dunst
|
# ./services/dunst
|
||||||
./services/udiskie
|
# ./services/udiskie
|
||||||
# ./services/picom
|
# ./services/picom
|
||||||
./services/screen-locker
|
# ./services/screen-locker
|
||||||
./services/blueman-applet
|
# ./services/blueman-applet
|
||||||
./services/network-manager
|
# ./services/network-manager
|
||||||
./services/syncthing
|
./services/syncthing
|
||||||
./services/git-sync
|
./services/git-sync
|
||||||
./modules/email.nix
|
./modules/email.nix
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
# social
|
# social
|
||||||
discord # talk to other people
|
discord # talk to other people
|
||||||
google-chrome
|
google-chrome
|
||||||
|
signal-desktop
|
||||||
|
|
||||||
# system tools
|
# system tools
|
||||||
uhk-agent # my keyboard
|
uhk-agent # my keyboard
|
||||||
|
|
@ -53,6 +54,8 @@
|
||||||
parallel-disk-usage
|
parallel-disk-usage
|
||||||
gdu
|
gdu
|
||||||
|
|
||||||
|
gnomeExtensions.paperwm
|
||||||
|
|
||||||
# gaming support
|
# gaming support
|
||||||
stable.bottles
|
stable.bottles
|
||||||
wine64Packages.stagingFull
|
wine64Packages.stagingFull
|
||||||
|
|
@ -99,7 +102,7 @@
|
||||||
{
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
loginExtra = auth-socket-env;
|
loginExtra = auth-socket-env;
|
||||||
initExtra = auth-socket-env;
|
initContent = auth-socket-env;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,9 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
hooks.preNew = "mbsync --all";
|
hooks.preNew = "mbsync --all";
|
||||||
};
|
};
|
||||||
|
programs.mu = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
accounts.email = {
|
accounts.email = {
|
||||||
accounts.failco = mkAccount "me@failco.de" // {
|
accounts.failco = mkAccount "me@failco.de" // {
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,4 @@ in
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
startWithUserSession = true;
|
startWithUserSession = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.configFile.doom = {
|
|
||||||
target = "doom";
|
|
||||||
source = ./doom;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -321,6 +321,18 @@
|
||||||
(("C-c n d" . #'denote-open-or-create-with-command))
|
(("C-c n d" . #'denote-open-or-create-with-command))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(use-package! denote-org
|
||||||
|
:after denote)
|
||||||
|
|
||||||
|
(use-package! denote-journal
|
||||||
|
:after denote)
|
||||||
|
|
||||||
|
(use-package! denote-menu
|
||||||
|
:after denote)
|
||||||
|
|
||||||
|
(use-package! denote-sequence
|
||||||
|
:after denote)
|
||||||
|
|
||||||
(use-package! org-super-agenda
|
(use-package! org-super-agenda
|
||||||
:after org-agenda
|
:after org-agenda
|
||||||
:init
|
:init
|
||||||
|
|
@ -375,7 +387,7 @@
|
||||||
:after denote)
|
:after denote)
|
||||||
|
|
||||||
(use-package! cov)
|
(use-package! cov)
|
||||||
(use-package! casual-suite)
|
;(use-package! casual-suite)
|
||||||
|
|
||||||
(map! :desc "Move workspace to the left" :leader :n "TAB <" #'+workspace/swap-left)
|
(map! :desc "Move workspace to the left" :leader :n "TAB <" #'+workspace/swap-left)
|
||||||
(map! :desc "Move workspace to the left" :leader :n "TAB >" #'+workspace/swap-right)
|
(map! :desc "Move workspace to the left" :leader :n "TAB >" #'+workspace/swap-right)
|
||||||
|
|
|
||||||
|
|
@ -177,8 +177,8 @@
|
||||||
(zig +lsp +tree-sitter) ; C, but simpler
|
(zig +lsp +tree-sitter) ; C, but simpler
|
||||||
|
|
||||||
:email
|
:email
|
||||||
;; (mu4e +org +gmail)
|
(mu4e +org +gmail +mbsync)
|
||||||
(notmuch +org +afew)
|
;; (notmuch +org +afew)
|
||||||
;;(wanderlust +gmail)
|
;;(wanderlust +gmail)
|
||||||
|
|
||||||
:app
|
:app
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,10 @@
|
||||||
;; :recipe (:host github :repo "username/repo"
|
;; :recipe (:host github :repo "username/repo"
|
||||||
;; :files ("some-file.el" "src/lisp/*.el")))
|
;; :files ("some-file.el" "src/lisp/*.el")))
|
||||||
|
|
||||||
(unpin! compat)
|
;;(unpin! compat)
|
||||||
;(unpin! with-editor ghub)
|
;;(unpin! with-editor ghub)
|
||||||
|
|
||||||
|
;;(package! transient :pin "25b994a565ce8035330b0a3071ee430c0282349e") ; 0.8.8
|
||||||
|
|
||||||
(package! ormolu)
|
(package! ormolu)
|
||||||
(package! org-gtd
|
(package! org-gtd
|
||||||
|
|
@ -68,7 +70,13 @@
|
||||||
(package! emacsql-sqlite3)
|
(package! emacsql-sqlite3)
|
||||||
(package! nov)
|
(package! nov)
|
||||||
(package! org-present)
|
(package! org-present)
|
||||||
|
|
||||||
(package! denote)
|
(package! denote)
|
||||||
|
(package! denote-org)
|
||||||
|
(package! denote-journal)
|
||||||
|
(package! denote-menu)
|
||||||
|
(package! denote-sequence)
|
||||||
|
|
||||||
(package! org-super-agenda)
|
(package! org-super-agenda)
|
||||||
(package! org-modern)
|
(package! org-modern)
|
||||||
(package! org-ql)
|
(package! org-ql)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,9 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
programs.git = {
|
programs.git = {
|
||||||
|
|
@ -17,18 +22,23 @@
|
||||||
key = "41A6D13FECA21280";
|
key = "41A6D13FECA21280";
|
||||||
signByDefault = false;
|
signByDefault = false;
|
||||||
};
|
};
|
||||||
delta = { enable = true; };
|
|
||||||
# TODO create option for my own account meta data
|
|
||||||
userEmail = "me@failco.de";
|
|
||||||
userName = "Alexander Kobjolke";
|
|
||||||
|
|
||||||
extraConfig = {
|
settings = {
|
||||||
pull = { rebase = true; };
|
pull = {
|
||||||
merge = { conflictstyle = "diff3"; };
|
rebase = true;
|
||||||
submodule = { recurse = true; };
|
|
||||||
};
|
};
|
||||||
|
merge = {
|
||||||
aliases = {
|
conflictstyle = "diff3";
|
||||||
|
};
|
||||||
|
submodule = {
|
||||||
|
recurse = true;
|
||||||
|
};
|
||||||
|
user = {
|
||||||
|
# TODO create option for my own account meta data
|
||||||
|
email = "me@failco.de";
|
||||||
|
name = "Alexander Kobjolke";
|
||||||
|
};
|
||||||
|
alias = {
|
||||||
a = "add";
|
a = "add";
|
||||||
c = "commit";
|
c = "commit";
|
||||||
ca = "commit --amend";
|
ca = "commit --amend";
|
||||||
|
|
@ -57,8 +67,17 @@
|
||||||
rs = "remote show";
|
rs = "remote show";
|
||||||
st = "status";
|
st = "status";
|
||||||
};
|
};
|
||||||
extraConfig = { init.defaultBranch = "main"; };
|
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.git-cliff = { enable = true; };
|
programs.delta = {
|
||||||
|
enable = true;
|
||||||
|
enableGitIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.git-cliff = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@
|
||||||
programs.jujutsu = {
|
programs.jujutsu = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
user.name = config.programs.git.userName;
|
user.name = config.programs.git.settings.user.name;
|
||||||
user.email = config.programs.git.userEmail;
|
user.email = config.programs.git.settings.user.email;
|
||||||
ui.default-command = "log";
|
ui.default-command = "log";
|
||||||
aliases.init = [
|
aliases.init = [
|
||||||
"git"
|
"git"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,14 @@
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
autosuggestion.enable = true;
|
autosuggestion.enable = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
|
||||||
|
initContent = ''
|
||||||
|
[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
|
||||||
|
'';
|
||||||
|
|
||||||
oh-my-zsh = {
|
oh-my-zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
plugins = [
|
plugins = [
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
config.xsession.windowManager.xmonad = {
|
config.xsession.windowManager.xmonad = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
@ -8,5 +12,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
# control backlight
|
# control backlight
|
||||||
config.home.packages = [ pkgs.xorg.xbacklight pkgs.scrot ];
|
config.home.packages = [
|
||||||
|
pkgs.xorg.xbacklight
|
||||||
|
pkgs.scrot
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,7 @@ in
|
||||||
extraLocaleSettings = {
|
extraLocaleSettings = {
|
||||||
TIME_STYLE = "iso";
|
TIME_STYLE = "iso";
|
||||||
};
|
};
|
||||||
supportedLocales = [
|
extraLocales = "all";
|
||||||
"C.UTF-8/UTF-8"
|
|
||||||
"en_US.UTF-8/UTF-8"
|
|
||||||
"de_DE.UTF-8/UTF-8"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
console = {
|
console = {
|
||||||
|
|
|
||||||
|
|
@ -324,6 +324,7 @@ in
|
||||||
address = "127.0.0.1";
|
address = "127.0.0.1";
|
||||||
port = 3002;
|
port = 3002;
|
||||||
consumptionDirIsPublic = true;
|
consumptionDirIsPublic = true;
|
||||||
|
configureTika = true;
|
||||||
settings = {
|
settings = {
|
||||||
PAPERLESS_OCR_LANGUAGE = "deu+eng";
|
PAPERLESS_OCR_LANGUAGE = "deu+eng";
|
||||||
PAPERLESS_OCR_USER_ARGS = ''{"invalidate_digital_signatures": true}'';
|
PAPERLESS_OCR_USER_ARGS = ''{"invalidate_digital_signatures": true}'';
|
||||||
|
|
@ -412,6 +413,7 @@ in
|
||||||
|
|
||||||
mailserver = {
|
mailserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
stateVersion = 3;
|
||||||
fqdn = "thrall.failco.de";
|
fqdn = "thrall.failco.de";
|
||||||
domains = [
|
domains = [
|
||||||
"failco.de"
|
"failco.de"
|
||||||
|
|
@ -459,6 +461,9 @@ in
|
||||||
];
|
];
|
||||||
"anne@kobjolke.de" = "anne.kobjolke@gmail.com";
|
"anne@kobjolke.de" = "anne.kobjolke@gmail.com";
|
||||||
"alexander@kobjolke.de" = "alex@kobjolke.de";
|
"alexander@kobjolke.de" = "alex@kobjolke.de";
|
||||||
|
"ida@kobjolke.de" = "alex@kobjolke.de";
|
||||||
|
"klara@kobjolke.de" = "alex@kobjolke.de";
|
||||||
|
"charlie@kobjolke.de" = "alex@kobjolke.de";
|
||||||
};
|
};
|
||||||
|
|
||||||
certificateScheme = "acme-nginx";
|
certificateScheme = "acme-nginx";
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,14 @@
|
||||||
keep-outputs = true;
|
keep-outputs = true;
|
||||||
keep-derivations = true;
|
keep-derivations = true;
|
||||||
|
|
||||||
trusted-substituters = [ "https://devenv.cachix.org" ];
|
trusted-substituters = [
|
||||||
trusted-public-keys = [ "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" ];
|
"https://devenv.cachix.org"
|
||||||
|
"https://nixcache.reflex-frp.org"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||||
|
"ryantrinkle.com-1:JJiAKaRv9mWgpVAz8dwewnZe0AzzEAzPkagE9SP5NWI="
|
||||||
|
];
|
||||||
trusted-users = [
|
trusted-users = [
|
||||||
"root"
|
"root"
|
||||||
"alex"
|
"alex"
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,10 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
greeters.slick.enable = true;
|
greeters.slick.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
desktopManager.xfce.enable = true;
|
|
||||||
desktopManager.gnome.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
desktopManager.gnome.enable = true;
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
libinput = {
|
libinput = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
||||||
142
scripts/nixos-mailserver-migration-03.py
Executable file
142
scripts/nixos-mailserver-migration-03.py
Executable file
|
|
@ -0,0 +1,142 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i python3 -p python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
from enum import Enum
|
||||||
|
from pathlib import Path
|
||||||
|
from pwd import getpwnam
|
||||||
|
|
||||||
|
|
||||||
|
class FolderLayout(Enum):
|
||||||
|
Default = 1
|
||||||
|
Folder = 2
|
||||||
|
|
||||||
|
|
||||||
|
def check_user(vmail_root: Path):
|
||||||
|
owner = vmail_root.owner()
|
||||||
|
owner_uid = getpwnam(owner).pw_uid
|
||||||
|
|
||||||
|
if os.geteuid() == owner_uid:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
print(
|
||||||
|
f"Trying to switch effective user id to {owner_uid} ({owner})",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
os.seteuid(owner_uid)
|
||||||
|
return
|
||||||
|
except PermissionError:
|
||||||
|
print(
|
||||||
|
f"Failed switching to virtual mail user. Please run this script under it, for example by using `sudo -u {owner}`)",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def is_maildir_related(path: Path, layout: FolderLayout) -> bool:
|
||||||
|
if path.name in [
|
||||||
|
"subscriptions"
|
||||||
|
# https://doc.dovecot.org/2.3/admin_manual/mailbox_formats/maildir/#imap-uid-mapping
|
||||||
|
"dovecot-uidlist",
|
||||||
|
# https://doc.dovecot.org/2.3/admin_manual/mailbox_formats/maildir/#imap-keywords
|
||||||
|
"dovecot-keywords",
|
||||||
|
]:
|
||||||
|
return True
|
||||||
|
if not path.is_dir():
|
||||||
|
return False
|
||||||
|
if path.name in ["cur", "new", "tmp"]:
|
||||||
|
return True
|
||||||
|
if layout is FolderLayout.Default and path.name.startswith("."):
|
||||||
|
return True
|
||||||
|
if layout is FolderLayout.Folder:
|
||||||
|
if path.name in ["mail"]:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def mkdir(dst: Path, dry_run: bool = True):
|
||||||
|
print(f'mkdir "{dst}"')
|
||||||
|
if not dry_run:
|
||||||
|
# u+rwx, setgid
|
||||||
|
dst.mkdir(mode=0o2700)
|
||||||
|
|
||||||
|
|
||||||
|
def move(src: Path, dst: Path, dry_run: bool = True):
|
||||||
|
print(f'mv "{src}" "{dst}"')
|
||||||
|
if not dry_run:
|
||||||
|
src.rename(dst)
|
||||||
|
|
||||||
|
|
||||||
|
def delete(dst: Path, dry_run: bool = True):
|
||||||
|
if not dst.exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
if dst.is_dir():
|
||||||
|
print(f'rm --recursive "{dst}"')
|
||||||
|
if not dry_run:
|
||||||
|
shutil.rmtree(dst)
|
||||||
|
else:
|
||||||
|
print(f'rm "{dst}"')
|
||||||
|
if not dry_run:
|
||||||
|
dst.unlink()
|
||||||
|
|
||||||
|
|
||||||
|
def main(vmail_root: Path, layout: FolderLayout, dry_run: bool = True):
|
||||||
|
maildirs = {path.parent for path in vmail_root.glob("*/*/cur")}
|
||||||
|
maybe_delete = []
|
||||||
|
|
||||||
|
# The old maildir will be the new home directory
|
||||||
|
for homedir in maildirs:
|
||||||
|
maildir = homedir / "mail"
|
||||||
|
mkdir(maildir, dry_run)
|
||||||
|
|
||||||
|
for path in homedir.iterdir():
|
||||||
|
if is_maildir_related(path, layout):
|
||||||
|
move(path, maildir / path.name, dry_run)
|
||||||
|
else:
|
||||||
|
maybe_delete.append(path)
|
||||||
|
|
||||||
|
# Files that are part of the previous home directory, but now obsolete
|
||||||
|
for path in [
|
||||||
|
vmail_root / ".dovecot.lda-dupes",
|
||||||
|
vmail_root / ".dovecot.lda-dupes.locks",
|
||||||
|
]:
|
||||||
|
delete(path, dry_run)
|
||||||
|
|
||||||
|
# The remaining files are likely obsolete, but should still be checked with care
|
||||||
|
for path in maybe_delete:
|
||||||
|
print(f"# rm {str(path)}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="""
|
||||||
|
NixOS Mailserver Migration #3: Dovecot mail directory migration
|
||||||
|
(https://nixos-mailserver.readthedocs.io/en/latest/migrations.html#dovecot-mail-directory-migration)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"vmail_root", type=Path, help="Path to the `mailserver.mailDirectory`"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--layout",
|
||||||
|
choices=["default", "folder"],
|
||||||
|
required=True,
|
||||||
|
help="Folder layout: 'default' unless `mailserver.useFsLayout` was enabled, then'folder'",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--execute", action="store_true", help="Actually perform changes"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
layout = FolderLayout.Default if args.layout == "default" else FolderLayout.Folder
|
||||||
|
|
||||||
|
check_user(args.vmail_root)
|
||||||
|
main(args.vmail_root, layout, not args.execute)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue