My self-hosting infrastructure, fully automated from empty disk to operating services

Overview

Khue's Homelab

chat tag document license stars

Current status: ALPHA

This project utilizes Infrastructure as Code to automate provisioning, operating, and updating self-hosted services in my homelab. It can be used as a highly customizable framework to build your own homelab.

Overview

This section provides a high level overview of the project. For further information, please see the documentation.

Hardware

Hardware

  • 4 × NEC SFF PC-MK26ECZDR (Japanese version of the ThinkCentre M700):
    • CPU: Intel Core i5-6600T @ 2.70GHz
    • RAM: 16GB
    • SSD: 128GB
  • TP-Link TL-SG108 switch:
    • Ports: 8
    • Speed: 1000Mbps

Features

Project status: Alpha (see roadmap below)

  • Common applications: Gitea, Seafile, Jellyfin, Paperless...
  • Automated bare metal provisioning with PXE boot
  • Automated Kubernetes installation and management
  • Installing and managing applications using GitOps
  • Modular architecture, easy to add or remove features/components
  • Automated certificate management
  • Automatically update DNS records for exposed services
  • Expose services to the internet securely with Cloudflare Tunnel
  • CI/CD platform
  • Private container registry
  • Distributed storage
  • Monitoring and alerting 🚧
  • Support multiple environments (dev, stag, prod) 🚧
  • Automated offsite backups 🚧
  • Single sign-on 🚧

Screenshots of some user-facing applications are shown here, I will update them before each release. They can't capture all of the project's features, but they are sufficient to get a concept of it.

Homepage with Ingress discovery powered by Hajimari
Git server powered by Gitea
Continuous integration with Tekton
Continuous deployment with ArgoCD
Monitoring dashboard powered by Grafana
Matrix chat server powered by Element and Dendrite
Cluster management using Lens (or you can just use kubectl)
Secret management with Vault

Tech stack

Logo Name Description
Ansible Automate bare metal provisioning and configuration
ArgoCD GitOps tool built to deploy applications to Kubernetes
cert-manager Cloud native certificate management
Cloudflare DNS and Tunnel
Docker Ephermeral PXE server and convenient tools container
Gitea Self-hosted Git service
Grafana Operational dashboards
Helm The package manager for Kubernetes
K3s Lightweight distribution of Kubernetes
Kubernetes Container-orchestration system, the backbone of this project
Loki Log aggregation system
Longhorn Cloud native distributed block storage for Kubernetes
MetalLB Bare metal load-balancer for Kubernetes
NGINX Kubernetes Ingress Controller
Prometheus Systems monitoring and alerting toolkit
Rocky Linux Base OS for Kubernetes nodes
Tekton Cloud native solution for building CI/CD systems
Trow Private container registry
Vault Secrets and encryption management system

Get Started

Roadmap

See roadmap and open issues for a list of proposed features and known issues.

Contributing

Any contributions you make, either big or small, are greatly appreciated.

License

Copyright (c) 2020, 2021, 2022 Khue Doan

Distributed under the GPLv3 License.

This project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this project (LICENSE.md). If not, see https://www.gnu.org/licenses.

Acknowledgements

Stargazers over time

Stargazers over time

Comments
  • PXE Not booting, what is the default bios filename to boot?

    PXE Not booting, what is the default bios filename to boot?

    Thanks for sharing your config :)

    I wondered what the default boot image menu is for the pxe server you are using, as I cannot get the machines to see the default menu / boot image for pxe.

    Thanks

    question 
    opened by mannp 11
  • configure.py error

    configure.py error "TypeError: 'type' object is not subscriptable"

    python3 ./configure.py

    Text editor (vim): Enter your domain (khuedoan.com): Enter seed repo (https://github.com/khuedoan/homelab): Enter time zone (Asia/Ho_Chi_Minh): Enter your Terraform Workspace, skip if you don't want to use external resources yet (khuedoan): Traceback (most recent call last): File "./configure.py", line 27, in def find_and_replace(pattern: str, replacement: str, paths: list[str]) -> None: TypeError: 'type' object is not subscriptable

    bug enhancement 
    opened by bpersino 10
  • dhcpd.conf template does not render

    dhcpd.conf template does not render

    I'm working through your netboot solution, and I have an interesting issue where dhcpd.conf.j2 does not render properly (no variables are substituted). All of the other templates work just fine, and the variables used in dhcpd.conf.j2 are available if I run a debug step:

    # all variables are present with correct values
    - debug:
        var: '{{item}}'
      with_items:
        - ansible_default_ipv4.address
        - ansible_default_ipv4.broadcast
        - ansible_default_ipv4.gateway
        - ansible_default_ipv4.netmask
        - ansible_default_ipv4.network
    
    # no substitution occurs
    - name: Render DHCP config
      template:
        src: dhcpd.conf.j2
        dest: "{{ role_path }}/files/dhcp/dhcpd.conf"
        mode: 0644
    
    # substitution occurs correctly
    - name: Render GRUB config
      template:
        src: grub.cfg.j2
        dest: "{{ role_path }}/files/data/boot/grub/grub.cfg"
        mode: 0644
    

    Do you have any thoughts?

    opened by ahgraber 9
  • how do you manage Data in case of cluster rebuild

    how do you manage Data in case of cluster rebuild

    HI I'am new in kubernetes, I ask myself some question on restauration/secret management if you could help me

    • in case of rebuild cluster how to restore data on database or reuse persistant volume?
    • if I uninstall and install helm release this will generate new secret not according with database current password how do you manage this?
    • I can maybe create some custom secret resource to avoid this but what is best method to create this one?
    opened by vincentDcmps 9
  • Have you ever considered moving from k3 to k3os?

    Have you ever considered moving from k3 to k3os?

    First, great work and your setup is really something I hope I can achieve one day (or at least fraction of it) :)

    I have a question as title says. Have you ever consider moving from k3 on Rocky Linux to pure k3os and remove one layer of complexity (setting up os and then setting up k3?

    Keep up the great work!

    Michal

    opened by mwasowski 8
  • Rocky 8.6 kickstart stalls with root password issue

    Rocky 8.6 kickstart stalls with root password issue

    Describe the bug

    Deploying with the Rocky 8.6 issues stalls complaining of Root account is disable.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Run make tools, make configure, supply info for your environment
    2. Run make
    3. During kickstart installation stalls with "Root account is disabled"

    Expected behavior

    Kickstart should continue normally, without user intervention.

    Screenshots

    image

    Additional context

    You can move past this error by selecting option 8, providing a password and then selecting b to begin installation.. Installation will complete but will also require user to press enter once installation is complete. Supplying a root password in the kickstart template below, appears to allow the installation to complete as expected.

    /homelab/blob/master/metal/roles/pxe_server/templates/kickstart.ks.j2

    using the following line:

    rootpw --iscrypted <hashed password>

    where hashed password is created using something like:

    python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

    bug 
    opened by anothercloudnative 7
  • Building the tools containers to the test VM for the dev environment

    Building the tools containers to the test VM for the dev environment

    When I run:

    make tools to build the image based on Arch distribution I get this error and the image bulding stops, trying to troubleshooting,without results.

    Step 2/4 : RUN pacman --sync --refresh --noconfirm reflector && reflector --save /etc/pacman.d/mirrorlist --protocol https --latest 20 --sort rate ---> Running in 4687b34d956a error: failed to initialize alpm library: (root: /, dbpath: /var/lib/pacman/) could not find or read directory

    question 
    opened by recarmona 7
  • Unable to access resources behind cloudflared.

    Unable to access resources behind cloudflared.

    Describe the bug

    A clear and concise description of what the bug is.

    • [x] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow the instructions on the repo to deploy the lab and run the external layer.

    Expected behavior

    Access the lab via my domain.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    Additional context

    I can get to the the hajimari page and see resources found on the apps folder. Argocd & git are not working. I get a cloudflared error( 1033)

    bug 
    opened by cheers1999 6
  • Tools: volume mount relative to Makefile

    Tools: volume mount relative to Makefile

    Current volume mount assumes all files are contained in your home directory. I assume you wanted people to run make tools and then make inside the docker. This PR drops them right into the files they would need for this.

    First it determines the absolute path to the parent directory (project root) of the Makefile. Then we mount the project root directory (instead of the user's home) into the docker user's home and also use it as workdir.

    opened by karpfediem 6
  • "Bring your own cluster" mode

    Hey there!

    I've got a Kubernetes cluster I've deployed myself, and am not hugely keen on PXE booting. It would be super awesome if there was a way to use this project while skipping past the PXE boot and provisioning stuff.

    In fact, there basically is already a way! Copy your kube configs into place, then...

    make -C bootstrap instead of make, and bam... you've got a khuedoan homelab, kind of.

    Maybe you could have a target like "make existing-cluster" or something which officially supports this deployment method?

    opened by Zorlin 6
  • Feature Proposal: Automatically update helm chart dependencies

    Feature Proposal: Automatically update helm chart dependencies

    Manually keeping all dependencies up to date can be a time consuming task which can easily be automated.

    One possible solution for this is renovatebot which periodically checks for new versions and can create a pull request for each update found.

    It can easily be deployed on kubernetes via helm and works with gitea out of the box.

    enhancement good first issue 
    opened by koeberlue 6
  • Development sandbox make fails

    Development sandbox make fails

    Hello!

    I created a virtualbox to test dev environment and even with docker tools even with nix-shell tried many times in clean install at step "make"

    i get the following error:

    1st time running make

    INFO[0051] Cluster 'homelab-dev' created successfully!  
    INFO[0051] You can now use it like this:                
    kubectl cluster-info
    k3d kubeconfig get homelab-dev > kubeconfig.yaml
    make[1]: Leaving directory '/home/vip/homelab/metal'
    make -C bootstrap
    make[1]: Entering directory '/home/vip/homelab/bootstrap'
    kubectl create namespace argocd --dry-run=client --output=yaml \
            | kubectl apply -f -
    namespace/argocd created
    cd argocd && ./apply.sh
    error: error validating "STDIN": error validating data: invalid object to validate; if you choose to ignore these errors, turn validation off with --validate=false
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applications.argoproj.io" not found
    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "applicationsets.argoproj.io" not found
    make[1]: *** [Makefile:11: argocd] Error 1
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make: *** [Makefile:18: bootstrap] Error 2
    
    

    2nd time trying running make

    statefulset.apps/argocd-application-controller created
    ingress.networking.k8s.io/argocd-server created
    resource mapping not found for name: "argocd-application-controller" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-repo-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-server" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    resource mapping not found for name: "argocd-redis" namespace: "" from "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
    ensure CRDs are installed first
    customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io condition met
    customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io condition met
    cd root && ./apply.sh
    Error from server (NotFound): namespaces "gitea" not found
    applicationset.argoproj.io/bootstrap created
    applicationset.argoproj.io/system created
    applicationset.argoproj.io/platform created
    applicationset.argoproj.io/apps created
    make[1]: Leaving directory '/home/vip/homelab/bootstrap'
    make -C test filter=Smoke
    make[1]: Entering directory '/home/vip/homelab/test'
    gotestsum --format testname -- -timeout 30m -run "Smoke"
    go: downloading github.com/khuedoan/terratest v0.0.0-20220921151310-016fe8e1536b
    ...
    ...
    ...
    

    continuing after few minutes make fails.

    If you need any other details ill be happy to send you and help fix it.

    bug 
    opened by MCP-LTS 7
  • Tekton doesn't seem to work or be configured by default

    Tekton doesn't seem to work or be configured by default

    Describe the bug

    It seems that tekton pipelines want to run as root, but the permissions aren't there.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Install
    2. go to tekton.<domain_name>
    3. Everything is empty
    4. trying to import from the web interface fails with the first error in Additional context
    5. kubectl apply -k .ci/ fails on check-git-files-changed.yaml having v1alpha1
    6. change check-git-files-changed.yaml to be v1beta1
    7. kubectl apply -k .ci/ succeeds
    8. go to web interface, see second error on run
    9. try to run again via the web interface, get third error on run

    Expected behavior

    That CI would be set up with normal install

    Additional context

    completionTime: '2022-11-29T10:26:59Z'
    conditions:  - lastTransitionTime: '2022-11-29T10:26:59Z'
        message: 'failed to create task run pod "import-resources-1669717619307-import-resources": pods "import-resources-1669717619307-import-resources-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "step-git-source-git-source-djgcj" must not set runAsUser=0), seccompProfile (pod or containers "prepare", "step-git-source-git-source-djgcj", "step-import" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe invalid TaskSpec'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    podName: ''
    startTime: '2022-11-29T10:26:59Z'
    taskSpec:  params:    - default: .
          description: The path from which resources are to be imported
          name: path
          type: string
        - default: tekton-pipelines
          description: The namespace in which to create the resources being imported
          name: target-namespace
          type: string
      resources:    inputs:      - name: git-source
            type: git
      steps:    - args:        - apply
            - '-f'
            - $(resources.inputs.git-source.path)/.ci
            - '-n'
            - tektontutorial
          command:        - kubectl
          image: lachlanevenson/k8s-kubectl:latest
          name: import
          resources: {}
    
    Pipeline tekton-pipelines/homelab can't be Run; it contains Tasks that don't exist: Couldn't retrieve Task "kaniko": tasks.tekton.dev "kaniko" not found
    
    conditions:  - lastTransitionTime: '2022-11-29T10:36:23Z'
        message: 'failed to create task run pod "homelab-r-h2wgf-git-clone": pods "homelab-r-h2wgf-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    conditions:  - lastTransitionTime: '2022-11-29T10:46:00Z'
        message: 'failed to create task run pod "homelab-git-clone": pods "homelab-git-clone-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "prepare", "place-scripts", "step-clone" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "prepare", "place-scripts", "step-clone" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "prepare", "place-scripts", "step-clone" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost"). Maybe missing or invalid Task tekton-pipelines/git-clone'
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    bug 
    opened by ClashTheBunny 1
  • Switching chart provider

    Switching chart provider

    Hi there

    As the k8s-at-home charts are marked as deprecated / archived and wont get updated regularly, i propose we switch to something that still is maintained for the default app-stack.

    I mainly played around with a combination of https://github.com/truecharts and linuxserver.io images where i didnt found a suitable image. I mostly had good results and more up to date apps.

    If you would like me to get some of the apps ported over, i will gladly make some pull requests.

    Best regards gitbute

    opened by gitbute 2
  • docs: add SELinux note in prerequisites

    docs: add SELinux note in prerequisites

    • fix #90 via documentation
    • added myself as contributor

    I'm not 100% certain why the prerequisites.md file appears fully 're-written'. I suspect it's related to line endings. It's always line endings...

    opened by JamesPGriffith 0
  • make tools

    make tools "error: getting status of shell.nix: Permission denied"

    Describe the bug

    Unable to execute 'make tools'.

    • [X] I have read the document

    To reproduce

    Steps to reproduce the behavior:

    1. Follow documentation to make tools
    2. Observe error error: getting status of shell.nix: Permission denied
    3. attempt to run the tools command manually
    4. See error -bash: shell: command not found

    Expected behavior

    Build the tools container environment

    Screenshots

    Meh, it's all txt at this point...

    Additional context

    Add any other context about the problem here (hardware, OS, etc.).

    Hardware

    [[email protected] homelab]$ neofetch
                 .',;::::;,'.
             .';:cccccccccccc:;,.            [email protected]
          .;cccccccccccccccccccccc;.         -------------------
        .:cccccccccccccccccccccccccc:.       OS: Fedora Linux 36 (Server Edition) x86_64
      .;ccccccccccccc;.:dddl:.;ccccccc;.     Host: 2447AC4 ThinkPad W530
     .:ccccccccccccc;OWMKOOXMWd;ccccccc:.    Kernel: 5.19.10-200.fc36.x86_64
    .:ccccccccccccc;KMMc;cc;xMMc:ccccccc:.   Uptime: 1 hour
    ,cccccccccccccc;MMM.;cc;;WW::cccccccc,   Packages: 1048 (rpm)
    :cccccccccccccc;MMM.;cccccccccccccccc:   Shell: bash 5.1.16
    :ccccccc;oxOOOo;MMM0OOk.;cccccccccccc:   Resolution: 1600x900
    cccccc:0MMKxdd:;MMMkddc.;cccccccccccc;   Terminal: /dev/pts/0
    ccccc:XM0';cccc;MMM.;cccccccccccccccc'   CPU: Intel i7-3740QM (8) @ 3.700GHz
    ccccc;MMo;ccccc;MMW.;ccccccccccccccc;    GPU: NVIDIA Quadro K1000M
    ccccc;0MNc.ccc.xMMd:ccccccccccccccc;     GPU: Intel 3rd Gen Core processor Graphics Controller
    cccccc;dNMWXXXWM0::cccccccccccccc:,      Memory: 466MiB / 15814MiB
    cccccccc;.:odl:.;cccccccccccccc:,.
    :cccccccccccccccccccccccccccc:'.                                 
    .:cccccccccccccccccccccc:;,..                                    
      '::cccccccccccccc::;,.
    
    
    [[email protected] homelab]$
    

    OS Details

    As the nodes will be provisioned with Fedora, I chose Fedora for the Initial controller for consistency. Even the same version.

    [[email protected] homelab]$ cat /etc/os-release
    NAME="Fedora Linux"
    VERSION="36 (Server Edition)"
    ID=fedora
    VERSION_ID=36
    VERSION_CODENAME=""
    PLATFORM_ID="platform:f36"
    PRETTY_NAME="Fedora Linux 36 (Server Edition)"
    ANSI_COLOR="0;38;2;60;110;180"
    LOGO=fedora-logo-icon
    CPE_NAME="cpe:/o:fedoraproject:fedora:36"
    HOME_URL="https://fedoraproject.org/"
    DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
    SUPPORT_URL="https://ask.fedoraproject.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=36
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=36
    PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
    VARIANT="Server Edition"
    VARIANT_ID=server
    [[email protected] homelab]$
    

    user and groups

    [[email protected] homelab]$ id
    uid=1000(user) gid=1000(user) groups=1000(user),10(wheel),984(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [[email protected] homelab]$
    

    Original error

    [[email protected] homelab]$ make tools
    error: getting status of shell.nix: Permission denied
    make: *** [Makefile:30: tools] Error 1
    [[email protected] homelab]$
    

    SELinux

    I honestly think this is it...

    [[email protected] homelab]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    [[email protected] homelab]$
    
    bug 
    opened by JamesPGriffith 4
  • Serverless

    Serverless

    It would be nice to have something serverless, like knative.dev , or one of the other CNCF options: https://landscape.cncf.io/card-mode?category=serverless&license=open-source&grouping=category&sort=stars

    opened by ClashTheBunny 1
Releases(v0.0.8)
  • v0.0.8(Jul 26, 2022)

    What's Changed

    • build: run post install scripts by default
    • build: set KUBECONFIG from global Makefile
    • feat(external-dns)!: add cluster name as owner ID
    • feat(tools): install yamllint, ansible-lint and k9s
    • feat(tools): set KUBECONFIG by default
    • feat: add pre-commit hooks
    • feat: add script to setup Gitea tokens and OAuth apps
    • perf(argocd): turning on selective sync
    • refactor(docs): migrate to mkdocs
    • refactor(metal): migrate to Fedora 36 for newer packages
    • refactor(pxe)!: combine dhcpd and tftpd to dnsmasq
    • Many bug fixes

    New Contributors

    • @Bourne-ID made their first contribution in https://github.com/khuedoan/homelab/pull/69

    Full Changelog: https://github.com/khuedoan/homelab/compare/v0.0.7-alpha...v0.0.8

    Source code(tar.gz)
    Source code(zip)
  • v0.0.7-alpha(May 14, 2022)

    What's Changed

    https://homelab.khuedoan.com/reference/changelog/#007-alpha

    • Replace standard Vault with Vault Operator
    • Automatically initialize and unseal Vault
    • Declarative secret generation and management
    • Declarative Gitea configuration with YAML
    • Automatic OS rolling upgrade
    • Automatic Kubernetes rolling upgrade
    • Automatic application updates using Renovate (still require manual token generation)
    • Add script to wait for essential services after deployment
    • Add icons and bookmarks to the home page
    • Deploy Matrix chat
    • Replace Authentik with Dex for SSO (still require manual token generation)
    • Switch to Mermaid for diagrams in documentation
    • Replace Vagrant with k3d for development environment
    • Use nip.io domain for development environment
    • Remove Backblaze (S3 Glacier and/or Minio will be added in future version)
    • Enable monitor for the majority of applications
    • Many code refactorings and bug fixes

    New Contributors

    • @locmai made their first contribution in https://github.com/khuedoan/homelab/pull/5
    • @MatthewJohn made their first contribution in https://github.com/khuedoan/homelab/pull/12
    • @karpfediem made their first contribution in https://github.com/khuedoan/homelab/pull/36
    • @linhng98 made their first contribution in https://github.com/khuedoan/homelab/pull/41
    • @BlueHatbRit made their first contribution in https://github.com/khuedoan/homelab/pull/44
    • @dotdiego made their first contribution in https://github.com/khuedoan/homelab/pull/49
    • @Crimrose made their first contribution in https://github.com/khuedoan/homelab/pull/51
    • @eventi made their first contribution in https://github.com/khuedoan/homelab/pull/55

    Full Changelog: https://github.com/khuedoan/homelab/commits/v0.0.7-alpha

    Source code(tar.gz)
    Source code(zip)
Owner
Khue Doan
Site Reliability Engineer
Khue Doan
Python Keylogger for Linux

A keylogger is a program that records your keystrokes, this program saves them in a .txt file on your local computer and, after 30 seconds (or as long as you want), it will close the .txt file and se

Darío Mazzitelli 4 Jul 31, 2021
Automatically draw a KiCad schematic for a circuit prototyped on a breadboard.

Schematic-o-matic Schematic-o-matic automatically draws a KiCad schematic for a circuit prototyped on a breadboard. How It Works The first step in the

Nick Bild 22 Oct 11, 2022
SALUS THERMOSTAT Custom component for Home-Assistant

Home-Assistant Custom Components Custom Components for Home-Assistant (http://www.home-assistant.io) Salus Thermostat Climate Component My device is R

21 Dec 18, 2022
Turn your Raspberry Pi Pico into a USB Rubber Ducky

pico-ducky Turn your Raspberry Pi Pico into a USB Rubber Ducky Install Requirements CircuitPython for the Raspberry Pi Pico adafruit-circuitpython-bun

Konstantinos 5 Nov 08, 2022
Used python functional programming to make this Ai assistant

Python-based-AI-Assistant I have used python functional programming to make this Ai assistant. Inspiration of project : we have seen in our daily life

Durgesh Kumar 2 Dec 26, 2021
智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件

Drone智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。它以A、B两国在C区开展无人机战争为背景,该系统的核心功能是通过仿真平台规划无人机航线,并进行验证输出,数据可导入真实无人机,使其按照规定路线精准抵达战场任一位置,支持多人多设备编队联合行动。

wwy 349 Jan 03, 2023
It is a program that displays the current temperature of the GPU and CPU in real time and stores the temperature history.

HWLogger It is a program that displays the current temperature of the GPU and CPU in real time and stores the temperature history. Sample Usage Run HW

Xeros 0 Apr 05, 2022
Intel Realsense t265 into Unreal Engine

t265_UE Intel Realsense t265 into Unreal Engine. Windows only, and Livelink plugin is 4.26.2 only at the moment. Might recompile it for different vers

Bjarke Aagaard 30 Jan 02, 2023
DNP3 Stalker is a project to analyze and interact with DNP3 devices

DNP3 Stalker Purpose DNP3 Stalker is a project to analyze and interact with DNP3

Cutaway Security, LLC. 2 Feb 10, 2022
Isaac Gym Environments for Legged Robots

Isaac Gym Environments for Legged Robots This repository provides the environment used to train ANYmal (and other robots) to walk on rough terrain usi

Robotic Systems Lab - Legged Robotics at ETH Zürich 372 Jan 08, 2023
The example shows using local self-hosted runners on-premises by making use of a runner on a Raspberry Pi with LED's attached to it

The example shows using local self-hosted runners on-premises by making use of a runner on a Raspberry Pi with LED's attached to it

Martin Woodward 6 Nov 13, 2021
FERM: A Framework for Efficient Robotic Manipulation

Framework for Efficient Robotic Manipulation FERM is a framework that enables robots to learn tasks within an hour of real time training.

Ruihan (Philip) Zhao 111 Dec 31, 2022
iot-dashboard: Fully integrated architecture platform with a dashboard for Logistics Monitoring, Internet of Things.

Fully integrated architecture platform with a dashboard for Logistics Monitoring, Internet of Things. Written in Python. Flask applicati

2 Jul 29, 2022
Resmed_myair_sensors - This is a Home Assistant custom component to pull daily CPAP data from ResMed's myAir service using an undocumented API

resmed_myair This component will set up the following platforms. Platform Description sensor Show info from the myAir API. Installation Using the tool

Preston Tamkin 17 Dec 29, 2022
A python library written for the raspberry pi.

A python package for using certain components on the raspberry pi.

Builder212 1 Nov 09, 2021
DIY split-flap display

The goal is to make a low-cost display that's easy to fabricate at home in small/single quantities (e.g. custom materials can be ordered from Ponoko or similar, and other hardware is generally availa

Scott Bezek 2.5k Jan 05, 2023
Scripts for measuring and displaying thermal behavior on Voron 3D printers

Thermal Profiling Measuring gantry deflection and frame expansion This script runs a series of defined homing and probing routines designed to charact

Jon Sanders 30 Nov 27, 2022
Component for deep integration LedFx from Home Assistant.

LedFX for Home Assistant Component for deep integration LedFx from Home Assistant. Table of Contents FAQ Install Config Performance FAQ Q. What versio

Dmitry Mamontov 28 Dec 13, 2022
Playing diabolo with two robot arms in ROS + Gazebo

Playing diabolo with robots This repository holds the ROS packages for playing diabolo with two UR5e robot arms on ROS Melodic (Ubuntu 18.04). Read ou

23 Dec 18, 2022
Like htop (CPU and memory usage), but for your case LEDs. 😄

Like htop (CPU and memory usage), but for your case LEDs. 😄

Derek Anderson 3 Dec 08, 2021