diff --git a/.forgejo/workflows/update-inputs.yml b/.forgejo/workflows/update-inputs.yml deleted file mode 100644 index c63d914a..00000000 --- a/.forgejo/workflows/update-inputs.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: update-inputs - -on: - schedule: - - cron: "0 6 * * 2,5" # Tue & Fri - workflow_dispatch: - -jobs: - update-flake-lock: - runs-on: nixos - - env: - BASE_BRANCH: main - BRANCH_PREFIX: flake-lock-update - FJ_URL: https://code.oliverdavies.uk - GIT_AUTHOR_EMAIL: flake-bot@local - GIT_AUTHOR_NAME: flake-bot - GIT_COMMITTER_EMAIL: ${{ env.GIT_AUTHOR_EMAIL }} - GIT_COMMITTER_NAME: ${{ env.GIT_AUTHOR_NAME }} - - steps: - - uses: actions/checkout@v3 - with: { fetch-depth: 0 } - - - name: Update inputs & commit - id: bump - run: | - set -o errexit - set -o nounset - set -o pipefail - - BRANCH="${BRANCH_PREFIX}-${GITHUB_RUN_ID}" - git switch -c "$BRANCH" - - BEFORE=$(git rev-parse HEAD) - - # Nix updates inputs and commits if needed - nix flake update --commit-lock-file - - AFTER=$(git rev-parse HEAD) - if [ "$BEFORE" = "$AFTER" ]; then - echo "changed=false" >> "$GITHUB_OUTPUT" - exit 0 - fi - - # ── Grab commit info ──────────────────────────────────────────────── - # Full message - COMMIT_RAW=$(git log -1 --pretty=%B) - - # First line is the short summary; we keep lines AFTER the first blank - COMMIT_BODY=$(printf '%s\n' "$COMMIT_RAW" \ - | sed '1,/^$/d' \ - | sed 's/^• */* /') # nicer Markdown bullet - - # Title becomes first line of the PR - COMMIT_TITLE=$(printf '%s\n' "$COMMIT_RAW" | head -n1) - - # JSON-escape the body so \n etc. are valid JSON - BODY_JSON=$(printf '%s' "$COMMIT_BODY" | jq -Rs .) - - echo "changed=true" >> "$GITHUB_OUTPUT" - echo "branch=$BRANCH" >> "$GITHUB_OUTPUT" - echo "title=$COMMIT_TITLE" >> "$GITHUB_OUTPUT" - echo "body_json=$BODY_JSON" >> "$GITHUB_OUTPUT" - - git push -u origin "$BRANCH" - - - name: Open pull-request - if: steps.bump.outputs.changed == 'true' - env: - TOKEN: ${{ secrets.FLAKE_UPDATE_PAT }} - BRANCH: ${{ steps.bump.outputs.branch }} - TITLE: ${{ steps.bump.outputs.title }} - BODY_JSON: ${{ steps.bump.outputs.body_json }} - run: | - set -o errexit - set -o nounset - - OWNER="${GITHUB_REPOSITORY%%/*}" - REPO="${GITHUB_REPOSITORY#*/}" - - curl -fSs -X POST "$FJ_URL/api/v1/repos/$OWNER/$REPO/pulls" \ - -H "Authorization: token $TOKEN" \ - --json '{ - "base": "'"$BASE_BRANCH"'", - "body": '"$BODY_JSON"', - "draft": false, - "head": "'"$BRANCH"'", - "title": "'"$TITLE"'" - }' diff --git a/flake.lock b/flake.lock index 94c1a79f..68beed58 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1754433428, - "narHash": "sha256-NA/FT2hVhKDftbHSwVnoRTFhes62+7dxZbxj5Gxvghs=", + "lastModified": 1762618334, + "narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=", "owner": "ryantm", "repo": "agenix", - "rev": "9edb1787864c4f59ae5074ad498b6272b3ec308d", + "rev": "fcdea223397448d35d9b31f798479227e80183f6", "type": "github" }, "original": { @@ -26,11 +26,11 @@ "bop-scripts": { "flake": false, "locked": { - "lastModified": 1756931648, - "narHash": "sha256-bfAmJ1IY0B6eNbJvoWkUMQ7Ya4ShrIoVSdQrnE/cn40=", + "lastModified": 1762468291, + "narHash": "sha256-kvhro91rmPgSX8LYLTsesLJlOlKp1YJsIg9e+Cb9u6o=", "owner": "breadonpenguins", "repo": "scripts", - "rev": "d04bcbe63176e623e1ce8edc4c3840c506a28d96", + "rev": "c1c94c3f4b89076dc8f788fae12f639dda663ddb", "type": "github" }, "original": { @@ -39,22 +39,6 @@ "type": "github" } }, - "conf-vim": { - "flake": false, - "locked": { - "lastModified": 1507549264, - "narHash": "sha256-AjiTJsoim0BAnyfqk1IQzNsa6jhFM2+A66E7q9sJqz0=", - "owner": "tjdevries", - "repo": "conf.vim", - "rev": "a716df0fd5d7ba558c07dac2e07f05d5eba11afb", - "type": "github" - }, - "original": { - "owner": "tjdevries", - "repo": "conf.vim", - "type": "github" - } - }, "darwin": { "inputs": { "nixpkgs": [ @@ -98,6 +82,24 @@ "type": "github" } }, + "devshell_2": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1741473158, + "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", + "owner": "numtide", + "repo": "devshell", + "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -105,11 +107,11 @@ ] }, "locked": { - "lastModified": 1756733629, - "narHash": "sha256-dwWGlDhcO5SMIvMSTB4mjQ5Pvo2vtxvpIknhVnSz2I8=", + "lastModified": 1762276996, + "narHash": "sha256-TtcPgPmp2f0FAnc+DMEw4ardEgv1SGNR3/WFGH0N19M=", "owner": "nix-community", "repo": "disko", - "rev": "a5c4f2ab72e3d1ab43e3e65aa421c6f2bd2e12a1", + "rev": "af087d076d3860760b3323f6b583f4d828c1ac17", "type": "github" }, "original": { @@ -118,32 +120,16 @@ "type": "github" } }, - "edit-alternate-vim": { - "flake": false, - "locked": { - "lastModified": 1635180789, - "narHash": "sha256-mEKnqYAhgrdxPRoKf4S4yYecdFIHGg8bDxpqPuC1+S4=", - "owner": "tjdevries", - "repo": "edit_alternate.vim", - "rev": "ef3019115d9bb7ffd691d2859eda213dd99e0b0a", - "type": "github" - }, - "original": { - "owner": "tjdevries", - "repo": "edit_alternate.vim", - "type": "github" - } - }, "flake-parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1762440070, + "narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8", "type": "github" }, "original": { @@ -205,17 +191,17 @@ ] }, "locked": { - "lastModified": 1757018109, - "narHash": "sha256-KfRzBPOOM5cf8mFVeWjV7TGa3p+ul/flxnUdwGW4Sds=", + "lastModified": 1757063075, + "narHash": "sha256-DpZgkdZELTZ/F/O+Xgj81E+01S5Zp2JCMa8zruEZe9o=", "ref": "refs/heads/main", - "rev": "63235768261976efe0d9c825e69c44fff8c80e5d", - "revCount": 1, + "rev": "19591ad8e1f3c261e84b487307c8534dd67a3707", + "revCount": 37, "type": "git", - "url": "https://code.oliverdavies.uk/opdavies/git-repo-updater" + "url": "https://git.oliverdavies.uk/opdavies/git-repo-updater" }, "original": { "type": "git", - "url": "https://code.oliverdavies.uk/opdavies/git-repo-updater" + "url": "https://git.oliverdavies.uk/opdavies/git-repo-updater" } }, "home-manager": { @@ -246,11 +232,11 @@ ] }, "locked": { - "lastModified": 1756991914, - "narHash": "sha256-4ve/3ah5H/SpL2m3qmZ9GU+VinQYp2MN1G7GamimTds=", + "lastModified": 1762721397, + "narHash": "sha256-E428EuouA4nFTNlLuqlL4lVR78X+EbBIqDqsBFnB79w=", "owner": "nix-community", "repo": "home-manager", - "rev": "b08f8737776f10920c330657bee8b95834b7a70f", + "rev": "b8645b18b0f5374127bbade6de7381ef0b3d5720", "type": "github" }, "original": { @@ -262,11 +248,11 @@ }, "import-tree": { "locked": { - "lastModified": 1752730890, - "narHash": "sha256-GES8fapSLGz36MMPRVNkSUWXUTtqvGQNXHjRmRLfJUY=", + "lastModified": 1762327901, + "narHash": "sha256-AJ96FNj50DU0bTyIzAPkPOjCZTHqjURVjok8qoXvmqM=", "owner": "vic", "repo": "import-tree", - "rev": "6ebb8cb87987b20264c09296166543fd3761d274", + "rev": "90fa129798be99cde036b78658e89475710966a1", "type": "github" }, "original": { @@ -310,11 +296,11 @@ ] }, "locked": { - "lastModified": 1756612744, - "narHash": "sha256-/glV6VAq8Va3ghIbmhET3S1dzkbZqicsk5h+FtvwiPE=", + "lastModified": 1762660502, + "narHash": "sha256-C9F1C31ys0V7mnp4EcDy7L1cLZw/sCTEXqqTtGnvu08=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "3fe768e1f058961095b4a0d7a2ba15dc9736bdc6", + "rev": "15c5451c63f4c612874a43846bfe3fa828b03eee", "type": "github" }, "original": { @@ -325,11 +311,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1756925795, - "narHash": "sha256-kUb5hehaikfUvoJDEc7ngiieX88TwWX/bBRX9Ar6Tac=", + "lastModified": 1762463231, + "narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "ba6fab29768007e9f2657014a6e134637100c57d", + "rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226", "type": "github" }, "original": { @@ -341,11 +327,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1762596750, + "narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e", "type": "github" }, "original": { @@ -357,11 +343,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1754788789, - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", "type": "github" }, "original": { @@ -386,6 +372,22 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1722073938, + "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixvim": { "inputs": { "flake-parts": [ @@ -398,11 +400,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1756946299, - "narHash": "sha256-N4PjGA0rittpNZGscKPel+mr/dMcKF73j0yr4rbG3T0=", + "lastModified": 1762691346, + "narHash": "sha256-dyYnqvYrgViB22inBqNern/XSWtOiweP8NTfJQJeTis=", "owner": "nix-community", "repo": "nixvim", - "rev": "63496f00c681b3e200bd17878a43ec68b7139a66", + "rev": "faf1fb4b7cd069ce44469e45c3259b7bcf106f81", "type": "github" }, "original": { @@ -419,11 +421,11 @@ ] }, "locked": { - "lastModified": 1757050467, - "narHash": "sha256-Rps0Ga0g/TdY49rR2ZRBsdBYybSzPccEsaI9IvwuE98=", + "lastModified": 1762724684, + "narHash": "sha256-B24ywaTUd9BYkK3qHfl0MubCLnO4Bk8cRSQmIvfofco=", "owner": "nix-community", "repo": "NUR", - "rev": "985abf0197c75dd64c24691a7e5e0acf308d7f20", + "rev": "efc27c839b15d0ff15d58fb09035a93dea7f85f5", "type": "github" }, "original": { @@ -442,11 +444,11 @@ ] }, "locked": { - "lastModified": 1755555503, - "narHash": "sha256-WiOO7GUOsJ4/DoMy2IC5InnqRDSo2U11la48vCCIjjY=", + "lastModified": 1761730856, + "narHash": "sha256-t1i5p/vSWwueZSC0Z2BImxx3BjoUDNKyC2mk24krcMY=", "owner": "NuschtOS", "repo": "search", - "rev": "6f3efef888b92e6520f10eae15b86ff537e1d2ea", + "rev": "e29de6db0cb3182e9aee75a3b1fd1919d995d85b", "type": "github" }, "original": { @@ -459,9 +461,7 @@ "inputs": { "agenix": "agenix", "bop-scripts": "bop-scripts", - "conf-vim": "conf-vim", "disko": "disko", - "edit-alternate-vim": "edit-alternate-vim", "flake-parts": "flake-parts", "git-repo-updater": "git-repo-updater", "home-manager": "home-manager_2", @@ -473,21 +473,19 @@ "nixvim": "nixvim", "nur": "nur", "rwxrob-dot": "rwxrob-dot", - "standard-vim": "standard-vim", - "vim-heritage": "vim-heritage", "vim-textobj-xmlattr": "vim-textobj-xmlattr", "voidrice": "voidrice", - "zet": "zet" + "z": "z" } }, "rwxrob-dot": { "flake": false, "locked": { - "lastModified": 1751898094, - "narHash": "sha256-kGpHL2l9p/yOtmG+AZvOb0Y5mH1d+Zoh2dd5N3Xjizc=", + "lastModified": 1758333677, + "narHash": "sha256-gSR2fOzlWA7dtWEsoVjUIdLjZU2gBAxm0JLbk7TEo+g=", "owner": "rwxrob", "repo": "dot", - "rev": "90794c77061f270078e847af45c376610768c6e2", + "rev": "d0d9eccb3834b1dbde2b133e811d71a05b9ac7f3", "type": "github" }, "original": { @@ -496,22 +494,6 @@ "type": "github" } }, - "standard-vim": { - "flake": false, - "locked": { - "lastModified": 1539613748, - "narHash": "sha256-9VwkvV1Dv6cE4uDkPp36DozjWJOclDR883yDMYw000E=", - "owner": "tjdevries", - "repo": "standard.vim", - "rev": "b333ef9a9cf6cf66536deda017a542843613fa75", - "type": "github" - }, - "original": { - "owner": "tjdevries", - "repo": "standard.vim", - "type": "github" - } - }, "systems": { "locked": { "lastModified": 1681028828, @@ -557,22 +539,6 @@ "type": "github" } }, - "vim-heritage": { - "flake": false, - "locked": { - "lastModified": 1716350150, - "narHash": "sha256-YzqP2+Go8bW3heFyzzcS/91LrMkwjpZ89+ptrjjBKrM=", - "owner": "jessarcher", - "repo": "vim-heritage", - "rev": "574baeb0679681a710adce5110a0d8b2ae1c2637", - "type": "github" - }, - "original": { - "owner": "jessarcher", - "repo": "vim-heritage", - "type": "github" - } - }, "vim-textobj-xmlattr": { "flake": false, "locked": { @@ -605,20 +571,28 @@ "type": "github" } }, - "zet": { - "flake": false, + "z": { + "inputs": { + "devshell": "devshell_2", + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, "locked": { - "lastModified": 1759321843, - "narHash": "sha256-rtj3J5UYpjDRmZIirGocbHMk6ol7/ijCkqjO8MO3i3E=", + "lastModified": 1762731584, + "narHash": "sha256-qSN44lGSceoqkUeksXbEAcGPeTf9yJBGQMWafh8cZuw=", "ref": "refs/heads/main", - "rev": "665ef94ca97cf54a563e268cfcf5c447bfa6cef8", - "revCount": 62, + "rev": "184accfd1fadb9580f2af8873ce0f2a70eeb8b49", + "revCount": 165, "type": "git", - "url": "https://code.oliverdavies.uk/opdavies/cmd-zet" + "url": "https://git.oliverdavies.uk/opdavies/z" }, "original": { "type": "git", - "url": "https://code.oliverdavies.uk/opdavies/cmd-zet" + "url": "https://git.oliverdavies.uk/opdavies/z" } } }, diff --git a/flake.nix b/flake.nix index 49ca8b78..01149a04 100644 --- a/flake.nix +++ b/flake.nix @@ -10,28 +10,18 @@ url = "github:breadonpenguins/scripts"; }; - conf-vim = { - flake = false; - url = "github:tjdevries/conf.vim"; - }; - disko = { inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/disko"; }; - edit-alternate-vim = { - flake = false; - url = "github:tjdevries/edit_alternate.vim"; - }; - flake-parts.url = "github:hercules-ci/flake-parts"; git-repo-updater = { inputs.flake-parts.follows = "flake-parts"; inputs.import-tree.follows = "import-tree"; inputs.nixpkgs.follows = "nixpkgs"; - url = "git+https://code.oliverdavies.uk/opdavies/git-repo-updater"; + url = "git+https://git.oliverdavies.uk/opdavies/git-repo-updater"; }; home-manager = { @@ -68,16 +58,6 @@ url = "github:rwxrob/dot"; }; - standard-vim = { - flake = false; - url = "github:tjdevries/standard.vim"; - }; - - vim-heritage = { - flake = false; - url = "github:jessarcher/vim-heritage"; - }; - vim-textobj-xmlattr = { flake = false; url = "github:whatyouhide/vim-textobj-xmlattr"; @@ -88,9 +68,10 @@ url = "github:lukesmithxyz/voidrice"; }; - zet = { - flake = false; - url = "git+https://code.oliverdavies.uk/opdavies/cmd-zet"; + z = { + inputs.flake-parts.follows = "flake-parts"; + inputs.nixpkgs.follows = "nixpkgs"; + url = "git+https://git.oliverdavies.uk/opdavies/z"; }; }; diff --git a/hosts/nixedo/configuration.nix b/hosts/nixedo/configuration.nix index 88d3920c..f59020f5 100644 --- a/hosts/nixedo/configuration.nix +++ b/hosts/nixedo/configuration.nix @@ -2,7 +2,12 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ inputs, pkgs, ... }: +{ + inputs, + lib, + pkgs, + ... +}: { imports = [ @@ -19,12 +24,7 @@ ../../users/opdavies.nix ]; - # TODO: why didn't it work when adding this to jitsi.nix? - nixpkgs.config.permittedInsecurePackages = [ - "jitsi-meet-1.0.8043" - ]; - - services.logind.lidSwitchExternalPower = "ignore"; + services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; boot.loader = { efi.canTouchEfiVariables = true; diff --git a/hosts/nixedo/homelab.nix b/hosts/nixedo/homelab.nix index 5e747cc9..3c00336d 100644 --- a/hosts/nixedo/homelab.nix +++ b/hosts/nixedo/homelab.nix @@ -9,8 +9,7 @@ services = { audiobookshelf.enable = true; home-assistant.enable = true; - homepage-dashboard.enable = true; - jitsi.enable = true; + freshrss.enable = true; paperless.enable = true; peertube.enable = true; tubearchivist.enable = true; diff --git a/hosts/nixedo/modules/acme.nix b/hosts/nixedo/modules/acme.nix index 33979e9c..64a226f1 100644 --- a/hosts/nixedo/modules/acme.nix +++ b/hosts/nixedo/modules/acme.nix @@ -26,6 +26,8 @@ "code" "eric" "florida-drupalcamp-tailwind-css" + "freshrss" + "git" "home" "jellyfin" "luke" diff --git a/hosts/nixedo/modules/audiobookshelf.nix b/hosts/nixedo/modules/audiobookshelf.nix index 8e30bdd4..9ccf8511 100644 --- a/hosts/nixedo/modules/audiobookshelf.nix +++ b/hosts/nixedo/modules/audiobookshelf.nix @@ -15,26 +15,6 @@ in default = "audiobookshelf.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Audiobookshelf"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Self-hosted audiobook and podcast server"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "audiobookshelf"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Media"; - type = types.str; - }; }; config = mkIf cfg.enable { diff --git a/hosts/nixedo/modules/containers/pi-hole.nix b/hosts/nixedo/modules/containers/pi-hole.nix index 7d523e89..f7ef64f4 100644 --- a/hosts/nixedo/modules/containers/pi-hole.nix +++ b/hosts/nixedo/modules/containers/pi-hole.nix @@ -2,7 +2,7 @@ let service = "pihole"; - port = config.homelab.ports.${service}; + port = config.homelab.ports.services.${service}; in { virtualisation.oci-containers.containers.${service} = { diff --git a/hosts/nixedo/modules/containers/tubearchivist.nix b/hosts/nixedo/modules/containers/tubearchivist.nix index 76212f0d..57ba7107 100644 --- a/hosts/nixedo/modules/containers/tubearchivist.nix +++ b/hosts/nixedo/modules/containers/tubearchivist.nix @@ -13,7 +13,7 @@ let service = "tubearchivist"; homelab = config.homelab; - port = homelab.ports.${service}; + port = homelab.ports.services.${service}; in { options.homelab.services.${service} = { @@ -23,26 +23,6 @@ in default = "${service}.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Tube Archivist"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Your self hosted YouTube media server"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "tube-archivist"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Media"; - type = types.str; - }; }; config = mkIf cfg.enable { @@ -53,6 +33,7 @@ in virtualisation.oci-containers.containers."archivist-es" = { image = "bbilly1/tubearchivist-es"; + pull = "newer"; environment = { "ES_JAVA_OPTS" = "-Xms1g -Xmx1g"; @@ -155,6 +136,7 @@ in virtualisation.oci-containers.containers."tubearchivist" = { image = "bbilly1/tubearchivist"; + pull = "newer"; environment = { "ES_URL" = "http://archivist-es:9200"; diff --git a/hosts/nixedo/modules/default.nix b/hosts/nixedo/modules/default.nix index 20a9d6cf..21e7fc5c 100644 --- a/hosts/nixedo/modules/default.nix +++ b/hosts/nixedo/modules/default.nix @@ -23,10 +23,10 @@ with lib; ./cloudflared.nix ./containers ./forgejo.nix + ./freshrss.nix ./home-assistant.nix ./immich.nix ./jellyfin.nix - ./jitsi.nix ./nginx ./paperless.nix ./peertube.nix diff --git a/hosts/nixedo/modules/forgejo.nix b/hosts/nixedo/modules/forgejo.nix index 91a228d6..7a8b4f18 100644 --- a/hosts/nixedo/modules/forgejo.nix +++ b/hosts/nixedo/modules/forgejo.nix @@ -7,7 +7,7 @@ settings = { server = { - DOMAIN = "code.oliverdavies.uk"; + DOMAIN = "git.oliverdavies.uk"; LANDING_PAGE = "explore"; ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}"; SSH_DOMAIN = "ssh.oliverdavies.uk"; diff --git a/hosts/nixedo/modules/freshrss.nix b/hosts/nixedo/modules/freshrss.nix new file mode 100644 index 00000000..65d68794 --- /dev/null +++ b/hosts/nixedo/modules/freshrss.nix @@ -0,0 +1,45 @@ +{ + config, + lib, + ... +}: + +let + inherit (lib) + mkEnableOption + mkIf + mkOption + types + ; + + cfg = homelab.services.${service}; + homelab = config.homelab; + service = "freshrss"; +in +{ + options.homelab.services.${service} = { + enable = mkEnableOption "Enable ${service}"; + + url = mkOption { + default = "freshrss.${homelab.domain}"; + type = types.str; + }; + }; + + config = mkIf cfg.enable { + services = { + ${service} = { + enable = true; + + baseUrl = "https://${cfg.url}"; + passwordFile = config.age.secrets.freshrss-password-file.path; + virtualHost = cfg.url; + }; + + nginx.virtualHosts.${cfg.url} = { + useACMEHost = homelab.domain; + forceSSL = true; + }; + }; + }; +} diff --git a/hosts/nixedo/modules/home-assistant.nix b/hosts/nixedo/modules/home-assistant.nix index 2995ade3..88b35b35 100644 --- a/hosts/nixedo/modules/home-assistant.nix +++ b/hosts/nixedo/modules/home-assistant.nix @@ -15,26 +15,6 @@ in default = "home.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Home Assisant"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Open source home automation that puts local control and privacy first."; - type = types.str; - }; - - homepage.icon = mkOption { - default = "home-assistant"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Services"; - type = types.str; - }; }; config = mkIf cfg.enable { diff --git a/hosts/nixedo/modules/jellyfin.nix b/hosts/nixedo/modules/jellyfin.nix index 430fac28..8dc57fb0 100644 --- a/hosts/nixedo/modules/jellyfin.nix +++ b/hosts/nixedo/modules/jellyfin.nix @@ -2,7 +2,6 @@ services.jellyfin = { enable = true; - configDir = "/mnt/media/jellyfin"; group = "media"; openFirewall = true; }; diff --git a/hosts/nixedo/modules/jitsi.nix b/hosts/nixedo/modules/jitsi.nix deleted file mode 100644 index fbe216e3..00000000 --- a/hosts/nixedo/modules/jitsi.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ config, lib, ... }: - -let - cfg = config.homelab.services.${service}; - homelab = config.homelab; - service = "jitsi"; - - inherit (lib) mkEnableOption mkOption types; -in -{ - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; - - url = mkOption { - default = "meet.${homelab.domain}"; - type = types.str; - }; - }; - - config = lib.mkIf cfg.enable { - services = { - jitsi-meet = { - enable = false; - - hostName = cfg.url; - - secureDomain.enable = true; - }; - - nginx.virtualHosts.${cfg.url} = { - enableACME = false; - forceSSL = false; - }; - - cloudflared.tunnels.${homelab.cloudflared.tunnelId}.ingress = { - # TODO: is this the correct port? - ${cfg.url} = "http://localhost:5280"; - }; - }; - }; -} diff --git a/hosts/nixedo/modules/nginx/default.nix b/hosts/nixedo/modules/nginx/default.nix index b28403e0..a7ec3e22 100644 --- a/hosts/nixedo/modules/nginx/default.nix +++ b/hosts/nixedo/modules/nginx/default.nix @@ -51,5 +51,8 @@ in users.users.${config.services.nginx.user}.extraGroups = [ "acme" ]; - imports = [ ./www.oliverdavies.uk ]; + imports = [ + ./oliverdavies.uk + ./ponthirtaekwondo.co.uk.nix + ]; } diff --git a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix b/hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix similarity index 96% rename from hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix rename to hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix index cfae1427..467b60ac 100644 --- a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/default.nix +++ b/hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix @@ -2,7 +2,7 @@ let ports = config.homelab.ports; - port = ports.nginx-website-sculpin; + port = ports.nginx.website-sculpin; redirects = builtins.concatStringsSep "\n" ( map (r: "rewrite ^${r.from}/?$ ${r.to} redirect;") (import ./redirects.nix) @@ -26,7 +26,7 @@ let "themes/custom/opdavies" ]; - port = ports.nginx-website-tome; + port = ports.nginx.website-tome; }; tomeLocations = builtins.listToAttrs ( diff --git a/hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix b/hosts/nixedo/modules/nginx/oliverdavies.uk/redirects.nix similarity index 100% rename from hosts/nixedo/modules/nginx/www.oliverdavies.uk/redirects.nix rename to hosts/nixedo/modules/nginx/oliverdavies.uk/redirects.nix diff --git a/hosts/nixedo/modules/nginx/ponthirtaekwondo.co.uk.nix b/hosts/nixedo/modules/nginx/ponthirtaekwondo.co.uk.nix new file mode 100644 index 00000000..f16e61b2 --- /dev/null +++ b/hosts/nixedo/modules/nginx/ponthirtaekwondo.co.uk.nix @@ -0,0 +1,51 @@ +{ config, ... }: + +let + name = "ponthirtaekwondo.co.uk"; + ports = config.homelab.ports; + port = ports.nginx.ponthir-taekwondo; +in +{ + security.acme.certs = { + "ponthirtaekwondo.co.uk" = { + domain = "ponthirtaekwondo.co.uk"; + dnsProvider = "cloudflare"; + email = "oliver@oliverdavies.uk"; + environmentFile = config.age.secrets.cloudflare.path; + webroot = null; + + extraDomainNames = [ + "www.ponthirtaekwondo.co.uk" + ]; + }; + }; + + services = { + nginx.virtualHosts = { + "www.${name}" = { + root = "/var/www/vhosts/${name}"; + + listen = [ + { + inherit port; + + addr = "localhost"; + } + ]; + + locations."/".tryFiles = "$uri $uri.html $uri/index.html =404"; + + extraConfig = '' + port_in_redirect off; + + # Remove trailing slashes. + rewrite ^/(.*)/$ /$1 permanent; + ''; + }; + }; + + cloudflared.tunnels."e1514105-327f-4984-974e-e2fbaca76466".ingress = { + "www.ponthirtaekwondo.co.uk" = "http://localhost:${toString port}"; + }; + }; +} diff --git a/hosts/nixedo/modules/nginx/sites.nix b/hosts/nixedo/modules/nginx/sites.nix index 3d682ec7..78325fb2 100644 --- a/hosts/nixedo/modules/nginx/sites.nix +++ b/hosts/nixedo/modules/nginx/sites.nix @@ -5,7 +5,7 @@ let name: overrides: let root = "/var/www/vhosts/${name}" + (overrides.rootSuffix or ""); - port = ports."nginx-${name}"; + port = ports.nginx.${name}; url = "${name}.oliverdavies.uk"; in { inherit port root url; } // overrides; diff --git a/hosts/nixedo/modules/paperless.nix b/hosts/nixedo/modules/paperless.nix index 33fd9801..4cb73ad8 100644 --- a/hosts/nixedo/modules/paperless.nix +++ b/hosts/nixedo/modules/paperless.nix @@ -15,26 +15,6 @@ in default = "${service}.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Paperless-ngx"; - type = types.str; - }; - - homepage.description = mkOption { - default = "Document management system"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "paperless"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Services"; - type = types.str; - }; }; config = mkIf cfg.enable { diff --git a/hosts/nixedo/modules/peertube.nix b/hosts/nixedo/modules/peertube.nix index a35e3f01..25c90a01 100644 --- a/hosts/nixedo/modules/peertube.nix +++ b/hosts/nixedo/modules/peertube.nix @@ -25,26 +25,6 @@ in default = "videos.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Peertube"; - type = types.str; - }; - - homepage.description = mkOption { - default = "A free and open-source, decentralized, ActivityPub federated video platform"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "peertube"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Media"; - type = types.str; - }; }; config = mkIf cfg.enable { diff --git a/hosts/nixedo/ports.nix b/hosts/nixedo/ports.nix index e3ceba08..7d5e3c50 100644 --- a/hosts/nixedo/ports.nix +++ b/hosts/nixedo/ports.nix @@ -6,33 +6,37 @@ in { options.homelab.ports = mkOption { internal = true; - type = types.attrsOf types.port; + type = types.attrsOf (types.attrsOf types.port); }; config.homelab.ports = { - homepage-dashboard = 8097; - mealie = 9001; - pihole = 8082; - tubearchivist = 8099; - vaultwarden = 8022; + services = { + mealie = 9001; + pihole = 8082; + tubearchivist = 8099; + vaultwarden = 8022; + }; - nginx-website-sculpin = 8095; - nginx-website-tome = 8098; + nginx = { + website-sculpin = 8095; + website-tome = 8098; - nginx-books = 9002; - nginx-bootstrap-with-tailwind = 8081; - nginx-eric = 8084; - nginx-examples = 9003; - nginx-florida-drupalcamp-tailwind-css = 8083; - nginx-luke = 8094; - nginx-phpsw-sculpin-demo = 8085; - nginx-rebuilding-acquia = 8086; - nginx-rebuilding-bartik = 8087; - nginx-rebuilding-bristol-js = 8088; - nginx-rebuilding-symfony = 8089; - nginx-tailwindcss-demo = 8090; - nginx-talking-drupal-tailwindcss = 8093; - nginx-wp-tailwind = 8091; - nginx-zet = 8092; + books = 9002; + bootstrap-with-tailwind = 8081; + eric = 8084; + examples = 9003; + florida-drupalcamp-tailwind-css = 8083; + luke = 8094; + phpsw-sculpin-demo = 8085; + ponthir-taekwondo = 9004; + rebuilding-acquia = 8086; + rebuilding-bartik = 8087; + rebuilding-bristol-js = 8088; + rebuilding-symfony = 8089; + tailwindcss-demo = 8090; + talking-drupal-tailwindcss = 8093; + wp-tailwind = 8091; + zet = 8092; + }; }; } diff --git a/hosts/nixedo/secrets.nix b/hosts/nixedo/secrets.nix index 6c55583f..853a4958 100644 --- a/hosts/nixedo/secrets.nix +++ b/hosts/nixedo/secrets.nix @@ -2,5 +2,6 @@ age.secrets = { cloudflare.file = ../../secrets/cloudflare.age; cloudflared.file = ../../secrets/cloudflared-credentials.age; + freshrss-password-file.file = ../../secrets/freshrss-password-file.age; }; } diff --git a/hosts/nixedo/services/default.nix b/hosts/nixedo/services/default.nix index b5a19f88..4bf7c492 100644 --- a/hosts/nixedo/services/default.nix +++ b/hosts/nixedo/services/default.nix @@ -7,8 +7,6 @@ { imports = [ - ./homepage - ./mastodon.nix ./mealie.nix ./samba.nix ./uptime-kuma.nix diff --git a/hosts/nixedo/services/homepage/default.nix b/hosts/nixedo/services/homepage/default.nix deleted file mode 100644 index df0b543b..00000000 --- a/hosts/nixedo/services/homepage/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "homepage-dashboard"; -in -{ - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; - - url = mkOption { - default = "${config.networking.hostName}.${homelab.domain}"; - type = types.str; - }; - }; - - config = mkIf cfg.enable { - services = { - ${service} = { - enable = true; - listenPort = homelab.ports.${service}; - openFirewall = true; - - customCSS = '' - #information-widgets { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - div#footer { - display: none; - } - - .services-group { - margin-bottom: 3rem; - } - ''; - - services = (import ./services.nix { inherit config lib; }); - - settings = { - headerStyle = "clean"; - hideVersion = "true"; - layout = (import ./layout.nix); - statusStyle = "dot"; - }; - }; - - glances.enable = true; - - nginx.virtualHosts.${cfg.url} = { - forceSSL = true; - useACMEHost = homelab.domain; - - locations."/".proxyPass = - "http://localhost:${toString config.services.homepage-dashboard.listenPort}"; - }; - }; - }; -} diff --git a/hosts/nixedo/services/homepage/glances.nix b/hosts/nixedo/services/homepage/glances.nix deleted file mode 100644 index ebcd3622..00000000 --- a/hosts/nixedo/services/homepage/glances.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ config }: - -{ - Glances = - let - port = toString config.services.glances.port; - in - [ - { - Info = { - widget = { - type = "glances"; - url = "http://localhost:${port}"; - metric = "info"; - chart = false; - version = 4; - }; - }; - } - - { - "CPU Temp" = { - widget = { - type = "glances"; - url = "http://localhost:${port}"; - metric = "sensor:Package id 0"; - chart = false; - version = 4; - }; - }; - } - - { - Processes = { - widget = { - type = "glances"; - url = "http://localhost:${port}"; - metric = "process"; - chart = false; - version = 4; - }; - }; - } - - { - Network = { - widget = { - type = "glances"; - url = "http://localhost:${port}"; - metric = "network:enp0s20f0u1"; - chart = false; - version = 4; - }; - }; - } - ]; -} diff --git a/hosts/nixedo/services/homepage/layout.nix b/hosts/nixedo/services/homepage/layout.nix deleted file mode 100644 index b0b05b94..00000000 --- a/hosts/nixedo/services/homepage/layout.nix +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - Glances = { - columns = 4; - header = false; - style = "row"; - }; - } - - { - Media = { - header = true; - style = "column"; - }; - } - - { - Services = { - header = true; - style = "column"; - }; - } -] diff --git a/hosts/nixedo/services/homepage/services.nix b/hosts/nixedo/services/homepage/services.nix deleted file mode 100644 index 52c8cec8..00000000 --- a/hosts/nixedo/services/homepage/services.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, lib }: - -with lib; - -let - homelab = config.homelab.services; - - homepageCategories = [ - "Media" - "Services" - ]; - - homepageServices = - category: - (attrsets.filterAttrs ( - name: value: value ? homepage && value.homepage.category == category - ) homelab); - - services = lists.forEach homepageCategories (cat: { - "${cat}" = - lib.lists.forEach (lib.attrsets.mapAttrsToList (name: value: name) (homepageServices "${cat}")) - (x: { - "${homelab.${x}.homepage.name}" = { - icon = homelab.${x}.homepage.icon; - description = homelab.${x}.homepage.description; - href = "https://${homelab.${x}.url}"; - siteMonitor = "https://${homelab.${x}.url}"; - }; - }); - }); -in -services ++ [ (import ./glances.nix { inherit config; }) ] diff --git a/hosts/nixedo/services/mastodon.nix b/hosts/nixedo/services/mastodon.nix deleted file mode 100644 index d020a223..00000000 --- a/hosts/nixedo/services/mastodon.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ config, lib, ... }: - -with lib; - -let - cfg = config.homelab.services.${service}; - domain = "oliverdavies.uk"; - service = "mastodon"; -in -{ - options.homelab.services.${service} = { - url = mkOption { - default = "social.${domain}"; - internal = true; - type = types.str; - }; - }; - - config = { - services = { - ${service} = { - enable = false; - - configureNginx = false; - localDomain = domain; - streamingProcesses = 3; - - extraConfig = { - SINGLE_USER_MODE = "true"; - WEB_DOMAIN = cfg.url; - }; - - smtp = { - fromAddress = "social@${domain}"; - }; - }; - - cloudflared.tunnels.${config.homelab.cloudflared.tunnelId} = { - ingress = { - "${cfg.url}" = "http://localhost"; - }; - }; - - nginx = { - upstreams.mastodon-streaming = { - extraConfig = '' - least_conn; - ''; - - servers = builtins.listToAttrs ( - map (i: { - name = "unix:/run/mastodon-streaming/streaming-${toString i}.socket"; - value = { }; - }) (range 1 config.services.mastodon.streamingProcesses) - ); - }; - - virtualHosts."social.oliverdavies.uk" = { - root = "${config.services.mastodon.package}/public/"; - - locations = { - "/".tryFiles = "$uri @proxy"; - - "/api/v1/streaming/" = { - proxyPass = "http://mastodon-streaming"; - proxyWebsockets = true; - }; - - "/system/".alias = "/var/lib/mastodon/public-system/"; - - "@proxy" = { - proxyPass = "http://unix:/run/mastodon-web/web.socket"; - proxyWebsockets = true; - }; - }; - - extraConfig = '' - client_max_body_size 100m; - ''; - }; - }; - }; - }; -} diff --git a/hosts/nixedo/services/mealie.nix b/hosts/nixedo/services/mealie.nix index ceb4516f..b6c36042 100644 --- a/hosts/nixedo/services/mealie.nix +++ b/hosts/nixedo/services/mealie.nix @@ -10,7 +10,7 @@ in database.createLocally = true; - port = ports.mealie; + port = ports.services.mealie; settings.ALLOW_SIGNUP = "false"; }; diff --git a/hosts/nixedo/services/uptime-kuma.nix b/hosts/nixedo/services/uptime-kuma.nix index 2bdb1487..52dd8ed5 100644 --- a/hosts/nixedo/services/uptime-kuma.nix +++ b/hosts/nixedo/services/uptime-kuma.nix @@ -15,26 +15,6 @@ in default = "uptime.${homelab.domain}"; type = types.str; }; - - homepage.name = mkOption { - default = "Uptime Kuma"; - type = types.str; - }; - - homepage.description = mkOption { - default = "A fancy self-hosted monitoring tool"; - type = types.str; - }; - - homepage.icon = mkOption { - default = "uptime-kuma"; - type = types.str; - }; - - homepage.category = mkOption { - default = "Services"; - type = types.str; - }; }; config = mkIf cfg.enable { diff --git a/hosts/nixedo/services/vaultwarden.nix b/hosts/nixedo/services/vaultwarden.nix index b3f697a3..48a64f8e 100644 --- a/hosts/nixedo/services/vaultwarden.nix +++ b/hosts/nixedo/services/vaultwarden.nix @@ -32,7 +32,7 @@ in config = { DOMAIN = "https://${cfg.url}"; ROCKET_ADDRESS = "127.0.0.1"; - ROCKET_PORT = homelab.ports.${service}; + ROCKET_PORT = homelab.ports.services.${service}; SIGNUPS_ALLOWED = false; }; }; diff --git a/hosts/t480/configuration.nix b/hosts/t480/configuration.nix index 6609ecc7..10a47b94 100644 --- a/hosts/t480/configuration.nix +++ b/hosts/t480/configuration.nix @@ -11,7 +11,6 @@ ./hardware-configuration.nix ./cron.nix ./neomutt.nix - ./newsboat ./secrets.nix ./xserver.nix @@ -95,4 +94,10 @@ xsel yt-dlp ]; + + services.logind.settings.Login = { + HandleLidSwitch = "supend-then-hibernate"; + HandleLidSwitchExternalPower = "ignore"; + HandlePowerKey = "supend-then-hibernate"; + }; } diff --git a/hosts/t480/cron.nix b/hosts/t480/cron.nix index 27b9e811..cb3c405c 100644 --- a/hosts/t480/cron.nix +++ b/hosts/t480/cron.nix @@ -5,7 +5,7 @@ enable = true; systemCronJobs = [ - "*/15 * * * * opdavies ${pkgs.imapfilter}/bin/imapfilter -c ~/Repos/code.oliverdavies.uk/opdavies/email-filters/config.lua" + "*/15 * * * * opdavies ${pkgs.imapfilter}/bin/imapfilter -c ~/Repos/git.oliverdavies.uk/opdavies/email-filters/config.lua" "0 8,20 * * * opdavies ${pkgs.isync}/bin/mbsync -a" ]; }; diff --git a/hosts/t480/newsboat/default.nix b/hosts/t480/newsboat/default.nix deleted file mode 100644 index e99f78e9..00000000 --- a/hosts/t480/newsboat/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - home-manager.users.opdavies.programs.newsboat = { - enable = true; - - extraConfig = '' - bind-key j down - bind-key k up - - bind-key j next articlelist - bind-key k prev articlelist - bind-key J next-feed articlelist - bind-key K prev-feed articlelist - - bind-key g home - bind-key G end - - bind-key d pagedown - bind-key u pageup - - bind-key a toggle-article-read - bind-key n next-unread - bind-key N prev-unread - bind-key x pb-delete - - color info white black bold - ''; - - urls = import ./urls.nix; - }; -} diff --git a/hosts/t480/newsboat/urls.nix b/hosts/t480/newsboat/urls.nix deleted file mode 100644 index 83f2a2df..00000000 --- a/hosts/t480/newsboat/urls.nix +++ /dev/null @@ -1,298 +0,0 @@ -[ - { url = "https://www.reddit.com/r/nginx/new/.rss"; } - { url = "https://www.reddit.com/r/devops/.rss"; } - { url = "https://medium.com/feed/@bdfinst"; } - { url = "https://blog.system76.com/rss"; } - { url = "https://medium.com/feed/@codemonkeymike"; } - { url = "https://www.reddit.com/r/devops/new/.rss"; } - { url = "https://www.reddit.com/r/sysadmin/.rss"; } - { - url = "https://www.carlpullein.com/blog?format=RSS"; - title = "Carl Pullein"; - tags = [ "Productivity" ]; - } - { url = "https://feeds.feedburner.com/Faildesk"; } - { url = "https://syndication.thedailywtf.com/TheDailyWtf"; } - { url = "https://www.sherdog.com/rss/videos2.xml"; } - { - url = "https://www.reddit.com/r/MMA/.rss"; - tags = [ "MMA" ]; - } - { - url = "https://mmaweekly.com/feed/rss"; - tags = [ "MMA" ]; - } - { - url = "https://www.sherdog.com/rss/news2.xml"; - tags = [ "MMA" ]; - } - { - url = "https://www.sherdog.com/rss/articles2.xml"; - tags = [ "MMA" ]; - } - { - url = "https://www.ufc.com/rss/news"; - tags = [ "MMA" ]; - } - { url = "https://www.theregister.co.uk/headlines.atom"; } - { - url = "https://www.rbs6nations.com/en/RssLatestNews.xml"; - tags = [ "Rugby" ]; - } - { - url = "https://feeds.feedburner.com/rugbydump"; - tags = [ "Rugby" ]; - } - { - url = "https://www.telegraph.co.uk/sport/rugbyunion/rss"; - tags = [ "Rugby" ]; - } - { url = "https://code.facebook.com/posts/rss"; } - { url = "https://nginx.com/feed/rss"; } - { - url = "https://www.lornajane.net/feed"; - tags = [ "Software" ]; - } - { - url = "https://nginx.org/index.rss"; - tags = [ "Software" ]; - } - { url = "https://www.engadget.com/rss.xml"; } - { url = "https://rss.slashdot.org/Slashdot/slashdotIt"; } - { url = "https://lwn.net/headlines/newrss"; } - { url = "https://rss.slashdot.org/Slashdot/slashdotLinux"; } - { - url = "https://blog.sebastian-daschner.com/feeds/rss"; - title = "Sebastian Daschner"; - } - { url = "https://www.reddit.com/r/linux/.rss"; } - { url = "https://githubengineering.com/atom.xml"; } - { url = "https://rss.slashdot.org/Slashdot/slashdotDevelopers"; } - { url = "https://www.alistapart.com/rss.xml"; } - { url = "https://www.christitus.com/index.xml"; } - { url = "https://www.freeagentcentral.com/feed.rss"; } - { url = "https://akrabat.com/feed Software"; } - { url = "https://jasonmccreary.me/feed.atom"; } - { url = "https://martinfowler.com/bliki/bliki.atom"; } - { url = "https://lornajane.net/feed"; } - { url = "https://christoph-rumpel.com/feed.xml"; } - { url = "https://gdstechnology.blog.gov.uk/feed/atom"; } - { url = "https://weierophinney.net/matthew/feeds/index.rss2"; } - { url = "https://stitcher.io/rss"; } - { url = "https://www.reddit.com/r/css.rss"; } - { url = "https://www.reddit.com/r/PHP/.rss"; } - { url = "https://whateverthing.com/atom.xml"; } - { url = "https://mnapoli.fr/atom.xml"; } - { url = "https://www.epicweb.dev/rss.xml?ck_subscriber_id=2498091571"; } - { url = "https://dev.to/feed"; } - { url = "https://localheinz.com/feed.xml"; } - { url = "https://www.ben-morris.com/feed"; } - { url = "https://www.jbrains.ca/rss"; } - { url = "https://blog.thecodewhisperer.com/rss"; } - { url = "https://odan.github.io/feed.xml"; } - { url = "https://feeds.feedburner.com/symfony/blog"; } - { url = "https://www.alwaysagileconsulting.com/feed"; } - { url = "https://blog.sensiolabs.com/feed"; } - { url = "https://pascalbaljetmedia.com/rss"; } - { url = "https://tighten.co/blog/feed.atom"; } - { url = "https://ryangjchandler.co.uk/feed"; } - { url = "https://jnsgr.uk/posts/index.xml"; } - { url = "https://timacdonald.me/feed.xml"; } - { url = "https://phppot.com/feed"; } - { url = "https://howtocodewell.libsyn.com/rss"; } - { url = "https://ctankersley.com/atom.xml"; } - { url = "https://blog.wyrihaximus.net/atom.xml"; } - { url = "https://dotfyle.com/this-week-in-neovim/rss.xml"; } - { url = "https://paul-m-jones.com/feed"; } - { url = "https://www.tomasvotruba.cz/rss.xml"; } - { url = "https://www.reddit.com/r/git/.rss"; } - { url = "https://www.daveismyname.com/feed"; } - { - url = "https://murze.be/feed/php"; - title = "freek.dev"; - tags = [ - "PHP" - "Laravel" - "Software" - ]; - } - { url = "https://nikic.github.io/rss.xml"; } - { - url = "https://drupal.org/planet/rss.xml"; - tags = [ "Drupal" ]; - } - { url = "https://www.bram.us/feed"; } - { url = "https://feeds.feedburner.com/GiantRobotsSmashingIntoOtherGiantRobots"; } - { url = "https://murze.be/feed/originals"; } - { url = "https://www.patkua.com/feed"; } - { url = "https://www.benjystanton.co.uk/feed.xml"; } - { - url = "https://drupal.org/security/rss.xml"; - tags = [ "Drupal" ]; - } - { - url = "https://uk.indeed.com/rss?q=symfony&l=np18"; - tags = [ "Jobs" ]; - } - { - url = "https://uk.indeed.com/rss?q=php&l=np18"; - tags = [ "Jobs" ]; - } - { - url = "https://jobs.drupal.org/all-jobs/feed"; - tags = [ "Jobs" ]; - } - { - url = "https://www.reed.co.uk/jobs/rss/np18?source=rss&keywords=drupal&salaryfrom=50000&sortby=DisplayDate"; - tags = [ "Jobs" ]; - } - { - url = "https://www.reed.co.uk/jobs/rss/np18?source=rss&keywords=php&salaryfrom=50000&sortby=DisplayDate"; - tags = [ "Jobs" ]; - } - { - url = "https://uk.indeed.com/rss?q=drupal&l=np18"; - tags = [ "Jobs" ]; - } - { - url = "https://www.reed.co.uk/jobs/rss/np18?source=rss&keywords=symfony&salaryfrom=50000&sortby=DisplayDate"; - tags = [ "Jobs" ]; - } - { url = "https://emilywebber.co.uk/feed"; } - { url = "https://introvertdear.com/feed"; } - { url = "https://designli.co/blog/feed"; } - { url = "https://www.oliverdavies.uk/rss/daily.xml"; } - { - url = "https://www.drupal.org/project/issues/rss/override_node_options"; - tags = [ "Drupal" ]; - } - { - url = "https://www.drupal.org/project/issues/rss/tailwindcss"; - tags = [ "Drupal" ]; - } - { - url = "https://nixos.org/blog/announcements-rss.xml"; - tags = [ "Linux" ]; - } - { - url = "https://laracasts.com/feed"; - tags = [ - "PHP" - "Laravel" - ]; - } - { - url = "https://feeds.feedburner.com/knpuniversity"; - title = "SymfonyCasts"; - tags = [ - "PHP" - "Symfony" - ]; - } - { - url = "https://nickjanetakis.com/atom.xml"; - title = "Nick Janetakis"; - } - { - url = "https://www.learnlinux.tv/feed"; - tags = [ "Linux" ]; - } - { - url = "https://tailwindcss.com/feeds/feed.xml"; - tags = [ - "Software" - "CSS" - ]; - } - { - url = "https://monospacementor.com/feed"; - tags = [ - "Linux" - "Software" - ]; - } - { - url = "https://frontendmasters.com/blog/feed"; - tags = [ "Software" ]; - title = "Frontend Masters Boost"; - } - { - url = "https://www.youtube.com/feeds/videos.xml?channel_id=UC2aHRY064THg_t7JZoGSYGg"; - title = "YouTube - elysse"; - tags = [ - "Software" - "YouTube" - ]; - } - { - url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCSUA5RARrNt4-Ik3qtbETLQ"; - title = "YouTube - Jason Swett"; - tags = [ - "Software" - "YouTube" - ]; - } - { - url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCorzANoC3fX9VVefJHM5wtA"; - title = "~YouTube - Nick Janetakis"; - tags = [ - "Software" - "YouTube" - ]; - } - { url = "https://devenv.sh/feed_rss_created.xml"; } - { url = "https://sive.rs/en.atom"; } - { url = "https://kressle.in/feed.xml"; } - { - url = "https://github.com/sculpin/sculpin/releases.atom"; - tags = [ - "PHP" - "Sculpin" - "Open Source" - ]; - } - { url = "https://www.theminimalists.com/feed"; } - { url = "https://opensourcepledge.com/rss.xml"; } - { - url = "https://feeds.bbci.co.uk/sport/rugby-union/teams/ng-dragons/rss.xml"; - tags = [ "Rugby" ]; - title = "BBC Sport - Dragons RFC"; - } - { - url = "https://openrss.org/www.twitch.tv/thealtf4stream/videos?filter=all&sort=time"; - tags = [ "Twitch" ]; - } - { - url = "https://openrss.org/www.twitch.tv/theprimeagen/videos?filter=all&sort=time"; - tags = [ "Twitch" ]; - } - { - url = "https://openrss.org/www.twitch.tv/teej_dv/videos?filter=all&sort=time"; - tags = [ "Twitch" ]; - } - { - url = "https://openrss.org/www.twitch.tv/monospacementor/videos?filter=all&sort=time"; - tags = [ "Twitch" ]; - } - { url = "https://www.reddit.com/r/librewolf/new/.rss"; } - { - url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCSJKQnpmPcdkysduL0mNktg"; - title = "YouTube - teej_daily"; - tags = [ - "Software" - "YouTube" - ]; - } - { - url = "https://feeds.bbci.co.uk/sport/rugby-union/rss.xml"; - tags = [ "Rugby" ]; - title = "BBC Sport - Rugby Union"; - } - { url = "https://tinkerbetter.tube/feeds/videos.xml?videoChannelId=2"; } - { url = "https://video.fosshq.org/feeds/videos.xml?videoChannelId=2"; } - { - url = "https://www.garfieldtech.com/blog/feed"; - tags = [ "PHP" ]; - } - { url = "https://world.hey.com/dhh/feed.atom"; } -] diff --git a/modules/dmenu-mpv.nix b/modules/dmenu-mpv.nix new file mode 100644 index 00000000..b60d4d58 --- /dev/null +++ b/modules/dmenu-mpv.nix @@ -0,0 +1,24 @@ +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "dmenu_mpv"; + + text = '' + selected="$(find "$HOME/Videos" -type f | dmenu -i -l 15)" + + if [[ -n "$selected" ]]; then + mpv --fs --speed=1.5 "$selected" >/dev/null 2>&1 + fi + ''; + + runtimeInputs = with pkgs; [ + dmenu + mpv + ]; + }) + ]; + }; +} diff --git a/modules/dmenu-sys.nix b/modules/dmenu-sys.nix index 2ccab6e7..6f289eb4 100644 --- a/modules/dmenu-sys.nix +++ b/modules/dmenu-sys.nix @@ -17,7 +17,7 @@ installPhase = '' mkdir -p $out/bin - cp $src/${pname} $out/bin + cp $src/shortcuts-menus/sys $out/bin/${pname} chmod +x $out/bin/${pname} ''; }) diff --git a/modules/dmenu-timer.nix b/modules/dmenu-timer.nix index 7a829d27..460305f4 100644 --- a/modules/dmenu-timer.nix +++ b/modules/dmenu-timer.nix @@ -17,7 +17,7 @@ installPhase = '' mkdir -p $out/bin - cp $src/${pname} $out/bin + cp $src/statusbar/timer $out/bin/${pname} chmod +x $out/bin/${pname} ''; }) diff --git a/modules/dmenu-tmux.nix b/modules/dmenu-tmux.nix new file mode 100644 index 00000000..deb6e66e --- /dev/null +++ b/modules/dmenu-tmux.nix @@ -0,0 +1,36 @@ +{ inputs, ... }: + +{ + flake.modules.homeManager.gui = + { pkgs, ... }: + { + home.packages = [ + (pkgs.writeShellApplication { + name = "dmenu_tmux"; + + text = '' + selected="$(z tmux list | dmenu -l 40)" || exit 0 + + if tmux list-sessions >/dev/null 2>&1; then + if pgrep -x st >/dev/null; then + z tmux connect "$selected" + + exit 0 + fi + fi + + pkill -x st 2>/dev/null || true + sleep 0.1 + + exec st -e z tmux connect "$selected" + ''; + + runtimeInputs = with pkgs; [ + dmenu + inputs.z.packages.${pkgs.stdenv.hostPlatform.system}.default + st + ]; + }) + ]; + }; +} diff --git a/modules/git-repo-updater.nix b/modules/git-repo-updater.nix index 25fb059f..1b78a042 100644 --- a/modules/git-repo-updater.nix +++ b/modules/git-repo-updater.nix @@ -2,10 +2,10 @@ { flake.modules.nixos.base = - { system, ... }: + { pkgs, ... }: { environment.systemPackages = [ - inputs.git-repo-updater.packages.${system}.default + inputs.git-repo-updater.packages.${pkgs.stdenv.hostPlatform.system}.default ]; }; } diff --git a/modules/git/aliases.nix b/modules/git/aliases.nix index ad52e1b7..feac4013 100644 --- a/modules/git/aliases.nix +++ b/modules/git/aliases.nix @@ -1,50 +1,52 @@ { - flake.modules.homeManager.base.programs.git.aliases = { - aa = "add --all"; - assume = "update-index --assume-unchanged"; - assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; - b = "branch"; - blame = "blame -w -C -C -C"; - browse = "!gh repo view --web"; - ca = "commit --amend --verbose"; - car = "commit --amend --no-edit"; - cl = "!hub clone"; - co = "checkout"; - compare = "!hub compare"; - current-branch = "rev-parse --abbrev-ref HEAD"; - dc = "diff --color --word-diff --cached"; - df = "diff --color --word-diff"; - dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; - fixup = "commit --fixup"; - issues = "!gh issue list --web"; - mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; - no-ff = "merge --no-ff"; - pl = "pull"; - prune = "remote prune origin"; - ps = "push"; - pulls = "!gh pr list --web"; - rbc = "rebase --continue"; - rdup = "!git dup && git rebase develop"; - remotes = "remote -v"; - repush = "!git pull --rebase && git push"; - ri = "rebase --interactive"; - rid = "!git rebase -i $(git merge-base develop HEAD)"; - rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; - rip = "!git rebase -i $(git merge-base production HEAD)"; - ris = "!git rebase -i $(git merge-base staging HEAD)"; - riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; - rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; - sl = "log --oneline --decorate -20"; - sla = "log --oneline --decorate --graph --all -20"; - slap = "log --oneline --decorate --graph --all"; - slp = "log --oneline --decorate"; - stash = "stash --included-untracked"; - unassume = "update-index --no-assume-unchanged"; - uncommit = "reset --soft HEAD^"; - unstage = "reset"; - update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; - upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; - ureset = "!git reset --hard $(git upstream)"; - worktrees = "worktree list"; + flake.modules.homeManager.base.programs.git = { + settings.aliases = { + aa = "add --all"; + assume = "update-index --assume-unchanged"; + assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; + b = "branch"; + blame = "blame -w -C -C -C"; + browse = "!gh repo view --web"; + ca = "commit --amend --verbose"; + car = "commit --amend --no-edit"; + cl = "!hub clone"; + co = "checkout"; + compare = "!hub compare"; + current-branch = "rev-parse --abbrev-ref HEAD"; + dc = "diff --color --word-diff --cached"; + df = "diff --color --word-diff"; + dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; + fixup = "commit --fixup"; + issues = "!gh issue list --web"; + mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; + no-ff = "merge --no-ff"; + pl = "pull"; + prune = "remote prune origin"; + ps = "push"; + pulls = "!gh pr list --web"; + rbc = "rebase --continue"; + rdup = "!git dup && git rebase develop"; + remotes = "remote -v"; + repush = "!git pull --rebase && git push"; + ri = "rebase --interactive"; + rid = "!git rebase -i $(git merge-base develop HEAD)"; + rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; + rip = "!git rebase -i $(git merge-base production HEAD)"; + ris = "!git rebase -i $(git merge-base staging HEAD)"; + riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; + rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; + sl = "log --oneline --decorate -20"; + sla = "log --oneline --decorate --graph --all -20"; + slap = "log --oneline --decorate --graph --all"; + slp = "log --oneline --decorate"; + stash = "stash --included-untracked"; + unassume = "update-index --no-assume-unchanged"; + uncommit = "reset --soft HEAD^"; + unstage = "reset"; + update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; + upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; + ureset = "!git reset --hard $(git upstream)"; + worktrees = "worktree list"; + }; }; } diff --git a/modules/git/defaults.nix b/modules/git/defaults.nix index 02b8978c..31c59951 100644 --- a/modules/git/defaults.nix +++ b/modules/git/defaults.nix @@ -2,7 +2,7 @@ flake.modules.homeManager.base = { config, ... }: { - programs.git.extraConfig = { + programs.git.settings = { branch = { autosetupmerge = true; autosetuprebase = "always"; diff --git a/modules/git/user.nix b/modules/git/user.nix index bc3f214f..5b04c014 100644 --- a/modules/git/user.nix +++ b/modules/git/user.nix @@ -2,7 +2,9 @@ { flake.modules.homeManager.base.programs.git = { - userName = config.flake.meta.owner.name; - userEmail = config.flake.meta.owner.email; + settings.user = { + email = config.flake.meta.owner.email; + name = config.flake.meta.owner.name; + }; }; } diff --git a/modules/hosts/t480/ollama.nix b/modules/hosts/t480/ollama.nix deleted file mode 100644 index 4ec6407a..00000000 --- a/modules/hosts/t480/ollama.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - flake.modules.nixos.desktop.services.ollama.enable = false; -} diff --git a/modules/hosts/t480/open-webui.nix b/modules/hosts/t480/open-webui.nix deleted file mode 100644 index ae6421f8..00000000 --- a/modules/hosts/t480/open-webui.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - nixpkgs.allowedUnfreePackages = [ "open-webui" ]; - - flake.modules.nixos.desktop.services.open-webui.enable = false; -} diff --git a/modules/kanata/config.nix b/modules/kanata/config.nix index bc73ab3e..7fb660b8 100644 --- a/modules/kanata/config.nix +++ b/modules/kanata/config.nix @@ -5,21 +5,21 @@ ) (defvar - tap-time 150 hold-time 200 hold-time-slow 300 + tap-time 150 ) (defalias escctrl (tap-hold 100 100 esc lctl) - a (tap-hold $tap-time $hold-time-slow a lmet) + a (tap-hold $tap-time $hold-time-slow a lsft) s (tap-hold $tap-time $hold-time-slow s lalt) - d (tap-hold $tap-time $hold-time d lsft) - f (tap-hold $tap-time $hold-time f lctl) - j (tap-hold $tap-time $hold-time j rctl) - k (tap-hold $tap-time $hold-time k rsft) + d (tap-hold $tap-time $hold-time d lctl) + f (tap-hold $tap-time $hold-time f lmet) + j (tap-hold $tap-time $hold-time j rmet) + k (tap-hold $tap-time $hold-time k rctl) l (tap-hold $tap-time $hold-time-slow l ralt) - ; (tap-hold $tap-time $hold-time-slow ; rmet) + ; (tap-hold $tap-time $hold-time-slow ; rsft) ) (deflayer base diff --git a/modules/nixvim/auto-save.nix b/modules/nixvim/auto-save.nix deleted file mode 100644 index 732944ba..00000000 --- a/modules/nixvim/auto-save.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - flake.modules.nixvim.custom.plugins.auto-save = { - enable = true; - - settings.condition = '' - function(buf) - local excluded_filetypes = {} - - local excluded_filenames = {} - - if vim.tbl_contains(excluded_filetypes, vim.fn.getbufvar(buf, "&filetype")) - or vim.tbl_contains(excluded_filenames, vim.fn.expand("%:t")) - then - return false - end - - return true - end - ''; - }; -} diff --git a/modules/nixvim/completion/snippets/nix.lua b/modules/nixvim/completion/snippets/nix.lua index 8e454963..76254b27 100644 --- a/modules/nixvim/completion/snippets/nix.lua +++ b/modules/nixvim/completion/snippets/nix.lua @@ -1,39 +1,6 @@ return { s("home_packages", fmta("home.packages = with pkgs; [ <> ];", i(0))), - s( - "homepage_options", - fmta( - [[ - homepage.name = mkOption { - default = ""; - type = types.str; - }; - - homepage.description = mkOption { - default = ""; - type = types.str; - }; - - homepage.icon = mkOption { - default = ""; - type = types.str; - }; - - homepage.category = mkOption { - default = ""; - type = types.str; - }; - ]], - { - description = i(2), - finish = i(0), - icon = i(3), - name = i(1), - } - ) - ), - s( "imports", fmta( diff --git a/modules/nixvim/filetypes.nix b/modules/nixvim/filetypes.nix index bfdc4ca9..6bdbef9a 100644 --- a/modules/nixvim/filetypes.nix +++ b/modules/nixvim/filetypes.nix @@ -7,6 +7,7 @@ module = "php"; neon = "yaml"; pcss = "scss"; + tf = "terraform"; theme = "php"; }; diff --git a/modules/nixvim/keymaps.nix b/modules/nixvim/keymaps.nix index dc13def0..458e411a 100644 --- a/modules/nixvim/keymaps.nix +++ b/modules/nixvim/keymaps.nix @@ -43,7 +43,7 @@ } { - action = "silent !tmux new-window tmux-sessionizer"; + action = "silent !tmux new-window start-tmux"; key = ""; options.silent = true; } diff --git a/modules/nixvim/lsp/terraform.nix b/modules/nixvim/lsp/terraform.nix new file mode 100644 index 00000000..d2054efe --- /dev/null +++ b/modules/nixvim/lsp/terraform.nix @@ -0,0 +1,3 @@ +{ + flake.modules.nixvim.custom.lsp.servers.terraformls.enable = true; +} diff --git a/modules/nixvim/oil.nix b/modules/nixvim/oil.nix new file mode 100644 index 00000000..80a83874 --- /dev/null +++ b/modules/nixvim/oil.nix @@ -0,0 +1,24 @@ +{ + flake.modules.nixvim.custom = { + plugins.oil = { + enable = true; + + settings = { + delete_to_trash = true; + + keymaps."-" = "actions.parent"; + + skip_confirm_for_simple_edits = true; + view_options.show_hidden = true; + }; + }; + + keymaps = [ + { + action = "Oil"; + key = "-"; + } + ]; + }; +} + diff --git a/modules/nixvim/qmk.nix b/modules/nixvim/qmk.nix new file mode 100644 index 00000000..54997959 --- /dev/null +++ b/modules/nixvim/qmk.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixvim.custom.plugins.qmk = { + enable = true; + + settings = { + layout = [ + "x x x x x _ _ _ _ _ _ _ _ _ x x x x x" + "x x x x x x _ _ _ _ _ _ _ x x x x x x" + "x x x x x x _ _ _ _ _ _ _ x x x x x x" + "x x x x x x _ _ _ _ _ _ _ x x x x x x" + "x x x x x x x x x _ x x x x x x x x x" + "x x x x x _ x x x _ x x x _ x x x x x" + ]; + name = "LAYOUT_glove80"; + variant = "zmk"; + }; + }; +} diff --git a/modules/nixvim/treesitter.nix b/modules/nixvim/treesitter.nix index 02de1492..d2e85c12 100644 --- a/modules/nixvim/treesitter.nix +++ b/modules/nixvim/treesitter.nix @@ -11,6 +11,7 @@ comment css csv + devicetree dockerfile gitattributes gitignore @@ -41,7 +42,10 @@ yaml ]; - settings.highlight.enable = true; + settings = { + highlight.enable = true; + indent.enable = true; + }; }; treesitter-textobjects.enable = true; diff --git a/modules/scripts/add-weight.nix b/modules/scripts/add-weight.nix deleted file mode 100644 index 8bf9d5f6..00000000 --- a/modules/scripts/add-weight.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ withSystem, ... }: - -let - name = "add-weight"; -in -{ - perSystem = - psArgs@{ pkgs, ... }: - { - packages.${name} = pkgs.writeShellApplication { - inherit name; - - runtimeInputs = with pkgs; [ - coreutils - psArgs.config.packages.today2 - psArgs.config.packages.weight - ]; - - text = '' - echo "$(today2),$1" >> "$XDG_DOCUMENTS_DIR/notes/2-areas/health-fitness/weight.csv" - - weight - ''; - }; - }; - - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - }; -} diff --git a/modules/scripts/build-adoc.nix b/modules/scripts/build-adoc.nix deleted file mode 100644 index 703adf51..00000000 --- a/modules/scripts/build-adoc.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (pkgs.writeShellApplication { - name = "build-adoc"; - - runtimeInputs = with pkgs; [ - asciidoctor-with-extensions - ]; - - excludeShellChecks = [ "SC2034" ]; - - text = '' - ls book - - echo "" - - date=$(date '+%Y-%m-%d %H:%M:%S') - - echo "The current date is $date." - - pwd=$(pwd) - parent=$(basename "$(dirname "$pwd")") - name=$(basename "$pwd") - - echo "The parent directory is $parent." - echo "The current directory is $name." - - echo "" - echo "Generating the HTML..." - asciidoctor \ - -D book \ - -a "date=$date" \ - -o index.html \ - ./book/index.adoc - - echo "" - echo "Generating the EPUB..." - asciidoctor-epub3 \ - -D book \ - -a "date=$date" \ - -o "$parent-$name.epub" \ - ./book/index.adoc - - echo "" - echo "Generating the PDF..." - asciidoctor-pdf \ - -D book \ - -a "date=$date" \ - -o "$parent-$name.pdf" \ - ./book/index.adoc - - echo "" - - ls book - ''; - }) - ]; - }; -} diff --git a/modules/scripts/build.nix b/modules/scripts/build.nix deleted file mode 100644 index c04f4664..00000000 --- a/modules/scripts/build.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (pkgs.writeShellApplication { - name = "build"; - - text = '' - test -r book/index.adoc && exec build-adoc "$@" - test -x build && exec ./build "$@" - ''; - }) - ]; - }; -} diff --git a/modules/scripts/clone.nix b/modules/scripts/clone.nix index 36d1574d..dc655e91 100644 --- a/modules/scripts/clone.nix +++ b/modules/scripts/clone.nix @@ -9,7 +9,7 @@ runtimeInputs = with pkgs; [ git - psArgs.config.packages.tmux-sessionizer + psArgs.config.packages.start-tmux ]; text = '' @@ -20,7 +20,7 @@ domain="''${BASH_REMATCH[2]}" if [[ "$domain" == "ssh.oliverdavies.uk" ]]; then - domain="code.oliverdavies.uk" + domain="git.oliverdavies.uk" fi user="''${BASH_REMATCH[3]}" @@ -29,13 +29,13 @@ user_path="$XDG_REPOS_DIR/$domain/$user" repo_path="$user_path/$name" - [[ -d "$repo_path" ]] && tmux-sessionizer "$repo_path" && exit 0 + [[ -d "$repo_path" ]] && start-tmux "$repo_path" && exit 0 mkdir -pv "$repo_path" git clone "$repo_url" "$repo_path" - tmux-sessionizer "$repo_path" + start-tmux "$repo_path" else exit 1 fi @@ -47,7 +47,7 @@ { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.clone)) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.clone)) ]; }; } diff --git a/modules/scripts/datepath.nix b/modules/scripts/datepath.nix index fa2b4e4d..44101018 100644 --- a/modules/scripts/datepath.nix +++ b/modules/scripts/datepath.nix @@ -20,7 +20,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/hnow.nix b/modules/scripts/hnow.nix deleted file mode 100644 index 58650c03..00000000 --- a/modules/scripts/hnow.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, withSystem, ... }: - -let - name = "hnow"; -in -{ - perSystem = - psArgs@{ pkgs, ... }: - let - now = withSystem pkgs.system (psArgs: psArgs.config.packages.now); - in - { - packages.${name} = pkgs.writeShellApplication { - inherit name; - - runtimeInputs = [ - psArgs.config.packages.now - ]; - - text = '' - # Based on https://github.com/rwxrob/dot/blob/main/scripts/hnow. - - echo "== $(${lib.getExe now} "$*")" - ''; - }; - }; - - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - }; -} diff --git a/modules/scripts/now.nix b/modules/scripts/now.nix deleted file mode 100644 index 94ad3d31..00000000 --- a/modules/scripts/now.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ withSystem, ... }: - -let - name = "now"; -in -{ - perSystem = - { pkgs, ... }: - { - packages.${name} = pkgs.writeShellApplication { - inherit name; - - runtimeInputs = with pkgs; [ coreutils ]; - - text = '' - # Based on https://github.com/rwxrob/dot/blob/main/scripts/now. - - out=$(date "+%A, %B %e, %Y, %R %Z" "-d ''${*:-now}") - - echo "''${out// / }" - ''; - }; - }; - - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - }; -} diff --git a/modules/scripts/onchange.nix b/modules/scripts/onchange.nix index 78e36bf4..6ce168dc 100644 --- a/modules/scripts/onchange.nix +++ b/modules/scripts/onchange.nix @@ -29,7 +29,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/open-repo-url.nix b/modules/scripts/open-repo-url.nix index 35e5b5f0..4726a167 100644 --- a/modules/scripts/open-repo-url.nix +++ b/modules/scripts/open-repo-url.nix @@ -15,7 +15,7 @@ in text = '' repo_url=$(git remote get-url origin | sed -E 's#(git|forgejo)@([A-Za-z0-9.-]+):#https://\2/#;s#.git$##') - repo_url="''${repo_url//ssh.oliverdavies.uk/code.oliverdavies.uk}" + repo_url="''${repo_url//ssh.oliverdavies.uk/git.oliverdavies.uk}" xdg-open "$repo_url" ''; @@ -26,7 +26,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/ppp.nix b/modules/scripts/ppp.nix index 17cba13a..90c96ae4 100644 --- a/modules/scripts/ppp.nix +++ b/modules/scripts/ppp.nix @@ -20,7 +20,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/ptest.nix b/modules/scripts/ptest.nix index a0cfa6eb..487da87c 100644 --- a/modules/scripts/ptest.nix +++ b/modules/scripts/ptest.nix @@ -36,7 +36,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/skills.nix b/modules/scripts/skills.nix index b1af10a0..e6a46f00 100644 --- a/modules/scripts/skills.nix +++ b/modules/scripts/skills.nix @@ -20,7 +20,7 @@ in { config, pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; home.sessionVariables.SKILLS_FILE = "${config.home.sessionVariables.NOTES_DIRECTORY}/2-areas/skills.csv"; diff --git a/modules/scripts/start-tmux.nix b/modules/scripts/start-tmux.nix new file mode 100644 index 00000000..3fb6ee8e --- /dev/null +++ b/modules/scripts/start-tmux.nix @@ -0,0 +1,33 @@ +{ inputs, withSystem, ... }: + +let + name = "start-tmux"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + runtimeInputs = with pkgs; [ + fzf + inputs.z.packages.${pkgs.stdenv.hostPlatform.system}.default + ]; + + text = '' + selected="$(z tmux list | fzf)" + + [[ -n $selected ]] && z tmux connect "$selected" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/tmux-default-startup.nix b/modules/scripts/tmux-default-startup.nix new file mode 100644 index 00000000..c9de163d --- /dev/null +++ b/modules/scripts/tmux-default-startup.nix @@ -0,0 +1,36 @@ +{ withSystem, ... }: + +let + name = "tmux-default-startup"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = pkgs.writeShellApplication { + inherit name; + + text = '' + if [[ -x "$PWD/.tmux-sessionizer" ]]; then + "$PWD/.tmux-sessionizer" + fi + + if [[ -x "$PWD/.tmux" ]]; then + "$PWD/.tmux" + fi + + tmux new-window -d -n scratch + + "$EDITOR" + ''; + }; + }; + + flake.modules.homeManager.base = + { pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) + ]; + }; +} diff --git a/modules/scripts/tmux-sessionizer/default.nix b/modules/scripts/tmux-sessionizer/default.nix deleted file mode 100644 index 8f4513b5..00000000 --- a/modules/scripts/tmux-sessionizer/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - flake.modules.homeManager.base = - { config, pkgs, ... }: - { - home.file.".tmux-sessionizer".source = "${ - pkgs.writeShellApplication { - name = ".tmux-sessionizer"; - - runtimeInputs = with pkgs; [ - tmux - ]; - - text = '' - set +o errexit - set +o nounset - - if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/work" ]]; then - clear - - return - fi - - tmux new-window -d -n scratch - nvim . - clear - ''; - } - }/bin/.tmux-sessionizer"; - }; -} diff --git a/modules/scripts/tmux-sessionizer/package.nix b/modules/scripts/tmux-sessionizer/package.nix index e33b99a6..90e66dfb 100644 --- a/modules/scripts/tmux-sessionizer/package.nix +++ b/modules/scripts/tmux-sessionizer/package.nix @@ -83,7 +83,7 @@ { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.tmux-sessionizer)) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.tmux-sessionizer)) ]; }; } diff --git a/modules/scripts/today.nix b/modules/scripts/today.nix index 1abbee1f..57ff2b61 100644 --- a/modules/scripts/today.nix +++ b/modules/scripts/today.nix @@ -20,7 +20,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/today2.nix b/modules/scripts/today2.nix index 90a76c59..15cdddf4 100644 --- a/modules/scripts/today2.nix +++ b/modules/scripts/today2.nix @@ -1,4 +1,4 @@ -{ withSystem, ... }: +{ withSystem, ... }: let name = "today2"; @@ -20,7 +20,7 @@ in { pkgs, ... }: { home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) ]; }; } diff --git a/modules/scripts/todo.nix b/modules/scripts/todo.nix deleted file mode 100644 index 9eb0248c..00000000 --- a/modules/scripts/todo.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ withSystem, ... }: - -let - name = "todo"; -in -{ - perSystem = - { pkgs, ... }: - { - packages.${name} = pkgs.writeShellApplication { - inherit name; - - runtimeInputs = with pkgs; [ coreutils ]; - - text = '' - "$EDITOR" +3 "$TODO_FILE" - cd "$NOTES_DIRECTORY" - git add "$TODO_FILE" - git commit -m "Update TODOs" - git push - ''; - }; - }; - - flake.modules.homeManager.base = - { config, pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - - home.sessionVariables.TODO_FILE = "${config.home.sessionVariables.NOTES_DIRECTORY}/todo.adoc"; - }; -} diff --git a/modules/scripts/weight.nix b/modules/scripts/weight.nix deleted file mode 100644 index d2f58553..00000000 --- a/modules/scripts/weight.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ withSystem, ... }: - -let - name = "weight"; -in -{ - perSystem = - { pkgs, ... }: - { - packages.${name} = pkgs.writeShellApplication { - inherit name; - - runtimeInputs = with pkgs; [ - coreutils - ]; - - text = ''tail "$XDG_DOCUMENTS_DIR/notes/2-areas/health-fitness/weight.csv"''; - }; - }; - - flake.modules.homeManager.base = - { pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - }; -} diff --git a/modules/scripts/zet.nix b/modules/scripts/zet.nix deleted file mode 100644 index 5c9a0bfc..00000000 --- a/modules/scripts/zet.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ inputs, withSystem, ... }: - -let - name = "zet"; -in -{ - perSystem = - { pkgs, ... }: - { - packages.${name} = pkgs.buildGoModule { - inherit name; - - runtimeInputs = with pkgs; [ - git - ]; - - src = inputs.zet; - - vendorHash = "sha256-pprnK2JKmPuR3Q+F8+vMDEdowlb3oX4BOOzW8NGOqgs="; - - postInstall = '' - mv $out/bin/cmd-${name} $out/bin/${name} - ''; - }; - }; - - flake.modules.homeManager.base = - { config, pkgs, ... }: - { - home.packages = [ - (withSystem pkgs.system (psArgs: psArgs.config.packages.${name})) - ]; - - home.sessionVariables = { - ZET_DIRECTORY = "${config.home.sessionVariables.NOTES_DIRECTORY}/${name}"; - }; - }; -} diff --git a/modules/st.nix b/modules/st.nix index 09d393dd..328dca7b 100644 --- a/modules/st.nix +++ b/modules/st.nix @@ -3,363 +3,7 @@ { pkgs, ... }: { home.packages = with pkgs; [ - (st.override { - conf = '' - static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; - - int disablebold = 1; - int disableitalic = 1; - int disableroman = 1; - - static int borderpx = 2; - - static char *shell = "/bin/sh"; - char *utmp = NULL; - char *scroll = NULL; - char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; - - char *vtiden = "\033[?6c"; - - static float cwscale = 1.0; - static float chscale = 1.0; - - wchar_t *worddelimiters = L" "; - - static unsigned int doubleclicktimeout = 300; - static unsigned int tripleclicktimeout = 600; - - int allowaltscreen = 1; - - int allowwindowops = 0; - - static double minlatency = 2; - static double maxlatency = 33; - - static unsigned int blinktimeout = 800; - - static unsigned int cursorthickness = 2; - - static int bellvolume = 0; - - char *termname = "st-256color"; - - unsigned int tabspaces = 8; - - static const char *colorname[] = { - "black", - "red3", - "green3", - "yellow3", - "blue2", - "magenta3", - "cyan3", - "gray90", - - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", - - [255] = 0, - - "#cccccc", - "#555555", - "gray90", - "black", - }; - - unsigned int defaultfg = 258; - unsigned int defaultbg = 259; - unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - - static unsigned int cursorshape = 2; - - static unsigned int cols = 80; - static unsigned int rows = 24; - - static unsigned int mouseshape = XC_xterm; - static unsigned int mousefg = 7; - static unsigned int mousebg = 0; - - static unsigned int defaultattr = 11; - - static uint forcemousemod = ShiftMask; - - static MouseShortcut mshortcuts[] = { - { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, - { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, - { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, - { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, - { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, - }; - - #define MODKEY Mod1Mask - #define TERMMOD (ControlMask|ShiftMask) - - static Shortcut shortcuts[] = { - { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, - { ControlMask, XK_Print, toggleprinter, {.i = 0} }, - { ShiftMask, XK_Print, printscreen, {.i = 0} }, - { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, - { TERMMOD, XK_Prior, zoom, {.f = +1} }, - { TERMMOD, XK_Next, zoom, {.f = -1} }, - { TERMMOD, XK_Home, zoomreset, {.f = 0} }, - { TERMMOD, XK_C, clipcopy, {.i = 0} }, - { TERMMOD, XK_D, zoom, {.f = -2} }, - { TERMMOD, XK_J, zoom, {.f = -1} }, - { TERMMOD, XK_K, zoom, {.f = +1} }, - { TERMMOD, XK_U, zoom, {.f = +2} }, - { TERMMOD, XK_V, clippaste, {.i = 0} }, - { TERMMOD, XK_Y, selpaste, {.i = 0} }, - { ShiftMask, XK_Insert, selpaste, {.i = 0} }, - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, - }; - - static KeySym mappedkeys[] = { -1 }; - - static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; - - static Key key[] = { - { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, - { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, - { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, - { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, - { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, - { XK_KP_End, ControlMask, "\033[J", -1, 0}, - { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_KP_End, ShiftMask, "\033[K", -1, 0}, - { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, - { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, - { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, - { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, - { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, - { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, - { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, - { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, - { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, - { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, - { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, - { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, - { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, - { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, - { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, - { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, - { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, - { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, - { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, - { XK_Up, ControlMask, "\033[1;5A", 0, 0}, - { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, - { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, - { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, - { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, - { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, - { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, - { XK_Down, ControlMask, "\033[1;5B", 0, 0}, - { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, - { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, - { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, - { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, - { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, - { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, - { XK_Left, ControlMask, "\033[1;5D", 0, 0}, - { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, - { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, - { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, - { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, - { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, - { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, - { XK_Right, ControlMask, "\033[1;5C", 0, 0}, - { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, - { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, - { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, - { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, - { XK_Return, Mod1Mask, "\033\r", 0, 0}, - { XK_Return, XK_ANY_MOD, "\r", 0, 0}, - { XK_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_Insert, ControlMask, "\033[L", -1, 0}, - { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_Delete, ControlMask, "\033[M", -1, 0}, - { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, - { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, - { XK_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_End, ControlMask, "\033[J", -1, 0}, - { XK_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_End, ShiftMask, "\033[K", -1, 0}, - { XK_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, - { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_Next, ControlMask, "\033[6;5~", 0, 0}, - { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, - { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, - { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, - { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, - { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, - { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, - { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, - { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, - { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, - { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, - { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, - { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, - { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, - { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, - { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, - { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, - { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, - { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, - { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, - { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, - { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, - { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, - { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, - { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, - { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, - { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, - { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, - { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, - { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, - { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, - { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, - { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, - { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, - { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, - { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, - { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, - { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, - { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, - { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, - { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, - { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, - { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, - { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, - { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, - { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, - { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, - { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, - { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, - { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, - { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, - { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, - { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, - { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, - { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, - { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, - { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, - { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, - { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, - { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, - { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, - { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, - { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, - { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, - { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, - { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, - { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, - { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, - { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, - { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, - { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, - { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, - { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, - { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, - { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, - { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, - { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, - { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, - { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, - { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, - { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, - { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, - { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, - { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, - { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, - { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, - { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, - }; - - static uint selmasks[] = { - [SEL_RECTANGULAR] = Mod1Mask, - }; - - static char ascii_printable[] = - " !\"#$%&'()*+,-./0123456789:;<=>?" - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" - "`abcdefghijklmnopqrstuvwxyz{|}~"; - ''; - - patches = [ - (fetchpatch { - name = "disable_bold_italic_fonts"; - url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; - sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; - }) - - (fetchpatch { - name = "anysize"; - url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; - sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; - }) - ]; - }) + st ]; }; } diff --git a/modules/sudo.nix b/modules/sudo.nix index 7f70c7c6..933b9963 100644 --- a/modules/sudo.nix +++ b/modules/sudo.nix @@ -2,8 +2,6 @@ { flake.modules.nixos.pc = { - security.sudo-rs.enable = true; - users.users.${config.flake.meta.owner.username}.extraGroups = [ "wheel" ]; }; } diff --git a/modules/sxhkd/keybindings.nix b/modules/sxhkd/keybindings.nix index 67338e12..f713990d 100644 --- a/modules/sxhkd/keybindings.nix +++ b/modules/sxhkd/keybindings.nix @@ -13,6 +13,8 @@ "super + shift + i" = "${pkgs.xdotool}/bin/xdotool type $(cat ~/.local/share/snippets.txt | grep -v '^#' | grep -v '^$' | sort | dmenu -i -l 50 | cut -d' ' -f1)"; "super + shift + p" = "${lib.getExe pkgs.passmenu-otp} -i"; + "super + shift + t" = "dmenu_tmux"; + "super + shift + v" = "dmenu_mpv"; "super + x; {1, 2, 3, 4}" = "st {notes, newsboat, nmtui, bluetuith}"; "{_, shift +, super +}XF86MonBrightness{Down,Up}" = "${lib.getExe pkgs.brightnessctl} set {5%-,10%-,10%,+5%,+10%,100%} --quiet"; diff --git a/modules/tmux/extra-config.nix b/modules/tmux/extra-config.nix index a5daeaae..5a16ed63 100644 --- a/modules/tmux/extra-config.nix +++ b/modules/tmux/extra-config.nix @@ -61,7 +61,8 @@ bind k select-pane -U bind l select-pane -R - bind-key -r f run-shell "tmux new-window tmux-sessionizer" + bind-key -r f run-shell "tmux new-window start-tmux" + bind-key -r g run-shell "tmux new-window open-repo-url" bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/notes/todo.txt" bind-key -r W split-window -h -c ~/Documents/notes "nvim '+Telescope find_files'" diff --git a/modules/z.nix b/modules/z.nix new file mode 100644 index 00000000..010bb4dc --- /dev/null +++ b/modules/z.nix @@ -0,0 +1,24 @@ +{ inputs, withSystem, ... }: + +let + name = "z"; +in +{ + perSystem = + { pkgs, ... }: + { + packages.${name} = inputs.${name}.packages.${pkgs.stdenv.hostPlatform.system}.default; + }; + + flake.modules.homeManager.base = + { config, pkgs, ... }: + { + home.packages = [ + (withSystem pkgs.stdenv.hostPlatform.system (psArgs: psArgs.config.packages.${name})) + ]; + + home.sessionVariables = { + ZET_DIRECTORY = "${config.home.sessionVariables.NOTES_DIRECTORY}/zet"; + }; + }; +} diff --git a/modules/zsh/abbreviations/abbreviations.nix b/modules/zsh/abbreviations/abbreviations.nix index c979afff..5598a87e 100644 --- a/modules/zsh/abbreviations/abbreviations.nix +++ b/modules/zsh/abbreviations/abbreviations.nix @@ -28,7 +28,7 @@ g = "git"; ga = "git add"; gan = "git add -N"; - gap = "git add . -p"; + gap = "git add -p"; gb = "git branch"; gba = "git branch --all"; gbl = "git blame"; @@ -39,16 +39,16 @@ gcm = "git commit -m"; gco = "git checkout"; gcob = "git checkout -b"; - gd = "git diff ."; - gds = "git diff . --staged"; + gd = "git diff"; + gds = "git diff --staged"; gf = "git fetch"; gfa = "git fetch --all"; gl = "git log"; - glg = "git log --grep ."; - glo = "git log --oneline ."; - glog = "git log --oneline --grep ."; - glos = "git log --oneline -S ."; - gls = "git log . -S"; + glg = "git log --grep"; + glo = "git log --oneline"; + glog = "git log --oneline --grep"; + glos = "git log --oneline -S"; + gls = "git log -S"; gm = "git merge"; gmf = "git merge --ff"; gmnf = "git merge --no-ff"; @@ -67,9 +67,9 @@ gra = "git rebase --abort"; grc = "git rebase --continue"; gri = "git rebase -i"; - gs = "git status ."; - gsh = "git show ."; - gst = "git stash ."; + gs = "git status"; + gsh = "git show"; + gst = "git stash"; gstp = "git stash pop"; gt = "git tag"; @@ -131,6 +131,7 @@ rduli = "run drush uli"; rdup = "run drush updatedb -y"; rpub = "run publish"; + rs = "run switch"; rt = "run test"; nah = "git reset --hard; git clean -fd"; @@ -168,5 +169,8 @@ sgsp = "vendor/bin/sculpin generate --server --port"; sgsw = "vendor/bin/sculpin generate --server --watch"; sgswp = "vendor/bin/sculpin generate --server --watch --port"; + + mnf = "man fzf"; + mnt = "man tmux"; }; } diff --git a/modules/zsh/aliases.nix b/modules/zsh/aliases.nix index e89f1515..6d587de6 100644 --- a/modules/zsh/aliases.nix +++ b/modules/zsh/aliases.nix @@ -9,11 +9,14 @@ "..." = "cd ../.."; "...." = "cd ../../.."; "....." = "cd ../../../.."; + build = "z build"; chmox = "chmod +x"; run = "./run"; tag = "tag-release"; + todo = "z todo"; vss = "LC_ALL=C sort --unique ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.adddotfiles/nvim/spell/en.utf-8.add --output ${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/nixos-config/modules/home-manager/cli/neovim/config/spell/en.utf-8.add"; wt = "git worktree"; + zet = "z zet"; }; }; } diff --git a/modules/zsh/init.nix b/modules/zsh/init.nix index e147ffad..eece5a0b 100644 --- a/modules/zsh/init.nix +++ b/modules/zsh/init.nix @@ -1,8 +1,13 @@ +{ lib, ... }: + { flake.modules.homeManager.base = { config, pkgs, ... }: { programs.zsh.initContent = '' + # Completions + source <(z completion zsh) + background() { for ((i=2;i<=$#;i++)); do ''${@[1]} ''${@[$i]} &> /dev/null & @@ -44,6 +49,10 @@ command ${pkgs.ttyper}/bin/ttyper --language english1000 --words 50 "''${@}" } + watchexec() { + ${lib.getExe pkgs.watchexec} --clear "$@" + } + weather() { curl "https://wttr.in/''$1" } @@ -52,13 +61,19 @@ command yt-dlp --paths ~/Videos "$@" } - bindkey -s ^f "tmux-sessionizer\n" + bindkey -s ^f "start-tmux\n" + bindkey -s ^g "open-repo-url\n" bindkey -s ^v "nvim\n" setopt auto_cd setopt auto_pushd setopt pushd_ignore_dups setopt pushdminus + + autoload -U edit-command-line + bindkey '^x^e' edit-command-line + bindkey '^xe' edit-command-line + zle -N edit-command-line ''; }; } diff --git a/notes.txt b/notes.txt index e01d0f67..fe128232 100644 --- a/notes.txt +++ b/notes.txt @@ -1,6 +1,6 @@ Running Neovim as a package: nix run .#neovim -nix run git+https://code.oliverdavies.uk/opdavies/nix-config#neovim +nix run git+https://git.oliverdavies.uk/opdavies/nix-config#neovim nixos-rebuild --flake .#nixedo --target-host 192.168.1.116 --sudo test diff --git a/overlays/default.nix b/overlays/default.nix index 17308ce2..89b72e68 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -11,6 +11,7 @@ modifications = final: prev: { dwm = import ./mods/dwm { inherit prev; }; + st = import ./mods/st { inherit prev; }; }; stable-packages = final: _prev: { diff --git a/overlays/mods/st/default.nix b/overlays/mods/st/default.nix new file mode 100644 index 00000000..083a99b8 --- /dev/null +++ b/overlays/mods/st/default.nix @@ -0,0 +1,362 @@ +{ prev, ... }: + +let + inherit (prev) lib; +in +prev.st.override { + conf = '' + static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; + + int disablebold = 1; + int disableitalic = 1; + int disableroman = 1; + + static int borderpx = 2; + + static char *shell = "/bin/sh"; + char *utmp = NULL; + char *scroll = NULL; + char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; + + char *vtiden = "\033[?6c"; + + static float cwscale = 1.0; + static float chscale = 1.0; + + wchar_t *worddelimiters = L" "; + + static unsigned int doubleclicktimeout = 300; + static unsigned int tripleclicktimeout = 600; + + int allowaltscreen = 1; + + int allowwindowops = 0; + + static double minlatency = 2; + static double maxlatency = 33; + + static unsigned int blinktimeout = 800; + + static unsigned int cursorthickness = 2; + + static int bellvolume = 0; + + char *termname = "st-256color"; + + unsigned int tabspaces = 8; + + static const char *colorname[] = { + "black", + "red3", + "green3", + "yellow3", + "blue2", + "magenta3", + "cyan3", + "gray90", + + "gray50", + "red", + "green", + "yellow", + "#5c5cff", + "magenta", + "cyan", + "white", + + [255] = 0, + + "#cccccc", + "#555555", + "gray90", + "black", + }; + + unsigned int defaultfg = 258; + unsigned int defaultbg = 259; + unsigned int defaultcs = 256; + static unsigned int defaultrcs = 257; + + static unsigned int cursorshape = 2; + + static unsigned int cols = 80; + static unsigned int rows = 24; + + static unsigned int mouseshape = XC_xterm; + static unsigned int mousefg = 7; + static unsigned int mousebg = 0; + + static unsigned int defaultattr = 11; + + static uint forcemousemod = ShiftMask; + + static MouseShortcut mshortcuts[] = { + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, + { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, + }; + + #define MODKEY Mod1Mask + #define TERMMOD (ControlMask|ShiftMask) + + static Shortcut shortcuts[] = { + { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, + { ControlMask, XK_Print, toggleprinter, {.i = 0} }, + { ShiftMask, XK_Print, printscreen, {.i = 0} }, + { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, + { TERMMOD, XK_Prior, zoom, {.f = +1} }, + { TERMMOD, XK_Next, zoom, {.f = -1} }, + { TERMMOD, XK_Home, zoomreset, {.f = 0} }, + { TERMMOD, XK_C, clipcopy, {.i = 0} }, + { TERMMOD, XK_D, zoom, {.f = -2} }, + { TERMMOD, XK_J, zoom, {.f = -1} }, + { TERMMOD, XK_K, zoom, {.f = +1} }, + { TERMMOD, XK_U, zoom, {.f = +2} }, + { TERMMOD, XK_V, clippaste, {.i = 0} }, + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + }; + + static KeySym mappedkeys[] = { -1 }; + + static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; + + static Key key[] = { + { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, + { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, + { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, + { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, + { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, + { XK_KP_End, ControlMask, "\033[J", -1, 0}, + { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_KP_End, ShiftMask, "\033[K", -1, 0}, + { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, + { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, + { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, + { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, + { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, + { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, + { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, + { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, + { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, + { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, + { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, + { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, + { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, + { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, + { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, + { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, + { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, + { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, + { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, + { XK_Up, ControlMask, "\033[1;5A", 0, 0}, + { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, + { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, + { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, + { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, + { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, + { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, + { XK_Down, ControlMask, "\033[1;5B", 0, 0}, + { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, + { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, + { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, + { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, + { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, + { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, + { XK_Left, ControlMask, "\033[1;5D", 0, 0}, + { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, + { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, + { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, + { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, + { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, + { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, + { XK_Right, ControlMask, "\033[1;5C", 0, 0}, + { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, + { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, + { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, + { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, + { XK_Return, Mod1Mask, "\033\r", 0, 0}, + { XK_Return, XK_ANY_MOD, "\r", 0, 0}, + { XK_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_Insert, ControlMask, "\033[L", -1, 0}, + { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_Delete, ControlMask, "\033[M", -1, 0}, + { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, + { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, + { XK_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_End, ControlMask, "\033[J", -1, 0}, + { XK_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_End, ShiftMask, "\033[K", -1, 0}, + { XK_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, + { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_Next, ControlMask, "\033[6;5~", 0, 0}, + { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, + { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, + { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, + { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, + { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, + { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, + { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, + { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, + { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, + { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, + { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, + { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, + { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, + { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, + { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, + { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, + { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, + { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, + { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, + { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, + { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, + { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, + { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, + { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, + { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, + { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, + { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, + { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, + { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, + { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, + { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, + { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, + { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, + { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, + { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, + { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, + { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, + { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, + { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, + { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, + { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, + { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, + { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, + { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, + { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, + { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, + { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, + { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, + { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, + { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, + { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, + { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, + { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, + { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, + { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, + { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, + { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, + { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, + { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, + { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, + { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, + { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, + { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, + { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, + { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, + { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, + { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, + { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, + { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, + { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, + { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, + { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, + { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, + { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, + { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, + { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, + { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, + { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, + { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, + { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, + { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, + { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, + { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, + { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, + { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, + { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, + }; + + static uint selmasks[] = { + [SEL_RECTANGULAR] = Mod1Mask, + }; + + static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; + ''; + + patches = with prev; [ + (fetchpatch { + name = "disable_bold_italic_fonts"; + url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; + sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; + }) + + (fetchpatch { + name = "anysize"; + url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; + sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; + }) + ]; +} diff --git a/packages/default.nix b/packages/default.nix index 418c1638..1669f6ef 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -28,7 +28,6 @@ in tag-release = callPackage ./tag-release.nix { }; time-until = callPackage ./time-until.nix { }; timer = callPackage ./timer.nix { }; - tmux-sessionizer = callPackage ./tmux-sessionizer { }; unmounter = callPackage ./unmounter.nix { }; update-all-git-repos = callPackage ./update-all-git-repos.nix { }; vic = callPackage ./vic.nix { inherit inputs; }; diff --git a/secrets.nix b/secrets.nix index 23e41540..465ce7ee 100644 --- a/secrets.nix +++ b/secrets.nix @@ -25,6 +25,11 @@ in ] ++ [ users.opdavies ]; + "secrets/freshrss-password-file.age".publicKeys = [ + hosts.nixedo + ] + ++ [ users.opdavies ]; + "secrets/peertube-env.age".publicKeys = [ hosts.nixedo ] diff --git a/secrets/freshrss-password-file.age b/secrets/freshrss-password-file.age new file mode 100644 index 00000000..16e7baba --- /dev/null +++ b/secrets/freshrss-password-file.age @@ -0,0 +1,17 @@ +age-encryption.org/v1 +-> ssh-ed25519 IsVD3g qUcQuqnQVqFEa3pMKA4MCAGvBdkU55wUc9QL+CV7bEg +xFsrPc+7aZBg4AQscuf4uI+NkjHW+iDtx9+lIFGhwvM +-> ssh-rsa +vTWQw +ZsahI21WKpNepuhJFCxRLJmfJaY8ZarIlLXTyhEzPwZ8OISpHfJ4gkgk42AMFZrq +s+Pr1zYx74EZ/VhfuxkvLCTekhW5aT9fk+NsGOZwuddywTjkgoKg8JzaMTXcTJxp +uFYNfGlIUgn94SrnisJP/sNztdjluGz4fEhBo99WJb6KabHtWLllUwEkzwDeKbT4 +hFvCp3ZupjHi/8bb2faAu5CJ82C1bAuHGqhlgJvhdFgi+VMinGl9zUYkQNY12O+O +z8zo5KxtNofzhkM3+Z8Xcnz1C5VaZNHtzvIDXVwA7CTuhc0H1a5uEN8keqBhN0dR +YdU4WiINZcDBq0+A6Aou+TxBZE+IQ+hLQJVuZMch6oBznP6IigD3ugbrVoQtzDGf +mdw87IXFB/tDMMSaT567XJoN7hECoZVqVc6pZKZgGZpmsScBpJBBAqSo6TLpzbsy +/u5AhuiWBZZylaJlX6OrNAwobAbs07scJyufdEJ48ga8dVQI0OHiBphJbq92nGKt +iBHW6nzjgfb4fe93LXaSAT66ffM3j5DOTx6DUkMZnHg0OqUIikWwRLBrLs1bC2oL +1YXJICCbRdA0cW1DnTGtsjBTYwv3IKk3jvYD6XEJYpBXKJC8Uqx3pV/dxuwFrrLV +Rk9U+RmwKmJasqiYFHuYJhEdPbxWT4YPgDwcHpD3vA4 +--- kD476dnm+Q4VMK9oHU4wIz6JciDtOS7LKik6Q2JgDdA +b'Hn?w@D-7ʂF"A jxU{4d6OP5 \ No newline at end of file